問題タブ [one-time-password]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
authentication - ワンタイムパスワード認証の設定方法を教えてください。
私はかなりリモートでアクセスするホーム ネットワークを持っています。でも治安が心配。私は強力なパスワードを使用していますが、誰かが私のパスワードを取得し、それを使用してアクセスするのではないかと心配しています.
「ワンタイムパスワード」の存在を知り、大学でも使うようになりました。デバイスのボタンを押す (または電話でアプリケーションを実行する) だけで、次の 1 分間ほど有効なパスワードが生成されます。
- どうすればそのようなものを設定できますか?
- 使いやすくセットアップが簡単なシステムはありますか?
- これらのシステムのいずれかの SDK で遊んだ人はいますか?
- スターターキットはどこから入手できますか?
編集: Linux と Windows が混在するネットワークを実行していますが、これを両方のオペレーティング システムでの認証に使用することを漠然と望んでいます。(いいえ、ドメイン コントローラーはありませんが、Samba を使用して設定できると思います。)
c++ - RAMにのみ存在する一時ファイル?
OTP メソッドを使用して暗号化を作成しようとしています。セキュリティ理論に沿って、平文のドキュメントをメモリにのみ保存し、物理ドライブに書き込まないようにする必要があります。tmpnam コマンドは必要なもののようですが、私が見る限り、ファイルは RAM ではなくディスクに保存されます。
C++ を使用して、ファイルが RAM にのみ存在できるようにする (プラットフォームに依存しない) メソッドはありますか? できればRAMディスク方式は避けたいです。
ありがとう
編集: ありがとう、それは私にとって単なる学習です。私は暗号化が初めてで、さまざまな方法で作業しているだけです。実際にはそれらの多くを使用する予定はありません (特に OTP は、元のファイルサイズが 2 倍になるためです)。 "パッド")。
正直なところ、私は Linux ユーザーなので、Windows を捨てることはそれほど悪くはありません。FUSE は「学習」には少しやり過ぎに思えるので、今のところ RAM ディスクの使用を検討しています。
java - バウンシーキャッスルを使用した Java ME MD5 文字列 - 複数回ハッシュできない
Google 検索の多くでここにたどり着いたことに気づいたので、おそらくあなたの適切な心を借りることができると思いました :)
私は、3 年次の学位論文の一環として、モバイル デバイス (およびログイン用の Web サイト) 用のワンタイム パスワード ジェネレーターに取り組んでいます。
org.bouncycastle.crypto.digests.MD5Digest ライブラリを使用して、(文字列ユーザー入力から) バイト配列を取得し、それを X 回ハッシュしています。これは、デイジー チェーン ハッシュ文字列またはランポート方式の暗号化とも呼ばれます。
私の問題は、文字列が一度ハッシュされると正しくハッシュされますが、新しいハッシュが再度ハッシュされると結果が正しくないということです。
以下のコードを参照してください。
どちらかだと思います。
- ダイジェストが正しいバイト配列を返さない
- Hex コンバーターはこれを誤って変換します
次の MD5 出力を持つ A のシークレットを使用してテストしています。
- 7fc56270e7a70fa81a5935b72eacbe29
- 8f28f2e7231860115d2a8cacba019dbe (これは 4cbd6d53280de25e04712c7434a70642 である必要があります)
事前にご協力いただきありがとうございます:)
ps PHP md5に対してチェックしていますが、これも問題になる可能性がありますか?
java-me - OTP S / KEY-シードはどのように生成されますか?毎回ランダムですか?
ワンタイムパスワード認証システム(電話の場合はj2me、サーバー側の場合はphp)の開発を検討しています。
私はプロセスに頭を悩ませようとしています、これが私が理解していることです
- ユーザー>ランダムシークレット(S)をハッシュn回入力します
- ユーザー>サーバーにS^nを送信します
- サーバー>はnとS^nを保存します
- ユーザー>は(S ^ n)-1を生成し、サーバーに送信します
- サーバー>はユーザー入力を受け取り、ハッシュ関数をもう1回適用し、以前に保存されたハッシュと照合します
ここで、RFC2289(S / Key)を読むと、クライアントに発行され、ユーザーが一意の識別子を入力したときにユーザーのシークレットと連結されるシードがあります(ステップ4)。このシードはどのように作成されますか、ランダムですか、保存されますか。
php - OTPまたはS/KEY-16進文字列の6つの読み取り可能な単語への変換
RFC2289(S / KEY)に見られるように、16進文字列を読み取り可能な形式に変換するときに使用する必要のある単語のリストがあります。
どうすればそうできますか?
RFCは次のように述べています。
したがって、ワンタイムパスワードは、6つの短い(1〜4文字の)英語の単語のシーケンスに変換され、受け入れられます。各単語は2048語の辞書から選択されます。ワードあたり11ビットで、すべてのワンタイムパスワードをエンコードできます。
続きを読む: http: //www.faqs.org/rfcs/rfc1760.html#ixzz0fu7QvXfe
これは、16進数を10進数に変換し、それを単語の配列のインデックスとして使用することを意味しますか?他の可能性があるのは、テキストエンコーディングを使用することです。たとえば、1111はUTF-8エンコーディングのdogと同等である可能性があります。
よろしくお願いします!
java-me - OTP S/KEY ワンタイムパスワード - 折りたたみ式 MD5 ダイジェスト出力
電話用のワンタイムパスワードジェネレーターを作成しようとしています。RFC2289 では、MD5 の出力を折りたたむ必要があると指定されています。弾む城 MD5 を使用していて、バイト配列出力を折りたたむ方法がわかりません。
これは私がこれまでに持っているものです
apache - どのワンタイムパスワードデバイスがmod_authn_otpと互換性がありますか?
mod_authn_otpは、RFC4226で定義されているHOTP/ OATHアルゴリズムを介して生成されたワンタイムパスワード(OTP)を使用した2要素認証用のApache Webサーバーモジュールです。開発者は、互換性のあるデバイス(AuthenexのA-Key 3600)を1つだけリストしています。 Webサイト。デバイスが標準に完全に準拠していて、トークンIDを回復できる場合は、機能するはずです。ただし、テストを行わないと、デバイスが完全に準拠しているかどうかを判断するのは困難です。
mod_authn_otp(または他のオープンソースサーバー側OTPプログラム)を使用して他のデバイス(ソフトウェアまたはハードウェア)を試したことはありますか?はいの場合、あなたの経験を共有してください:)
java - ワンタイムパスワードシステムの実装について他に何を知る必要がありますか?
私はワンタイムパスワード(OTP)システムの作成を任されており、これは最終的にモバイルデバイスでOTPジェネレーターを作成するために使用されます。
カウンターを使用してHOTP(rfc 4226)を使用することを検討していますが、いくつかのバリエーションがある可能性があります。OATHに準拠している必要はありません。
これはセキュリティ/暗号化の分野での私の最初の経験なので、セキュリティの新人を罠にかけるセキュリティの落とし穴を避け(そして学び)、そして私が何をする必要があり、完了するために知っている必要があるかをよりよく理解しようとしていますこの仕事。
この一般的なアドバイスに加えて、このプロジェクトの実装についていくつか具体的な質問があります。
SHA-1を使用しているだけでも、HOTPは安全であると見なされますか?私の同僚の1人は、HMAC-SHA-512を使用する必要があることを提案しました。使用している基本的なアルゴリズムを切り替えるのは簡単に見えます。ここで知っておくべき副作用はありますか?処理時間の増加など?
カウンターの同期について懸念があります。可能なカウンター値の正しい先読みとして何を使用する必要がありますか?ユーザーが先読み制限を超えてクリックした場合に同期を取り戻すための最良の方法は何ですか?対応するOTPと一緒にカウンターを表示して送信する方が簡単ですか、それともセキュリティが大幅に弱まりますか?
また、共有秘密やカウンター値などの関連情報を安全に保存するためのベストプラクティスについてもよく理解していません。
あなたが答えるとき、私がこのドメインに不慣れであり、専門用語と頭字語に追いつくことをまだ試みていることを覚えておいてください。前もって感謝します。
java - 秘密鍵はAndroidとサーバーで異なります
hotpアルゴリズム(RFC 4226)を使用して、ワンタイムパスワードアプリケーションに取り組んでいます。otp生成用のAndroidアプリ(シミュレーター経由)と、検証用のサーバー側アプリがあります。どちらも正常に機能しており、テストに合格しています。
ただし、入力がハードコーディングされていて、入力が同じであっても、デバイスで生成している秘密鍵はサーバーで生成している秘密鍵と同じではありません。これにより、デバイスとサーバーで異なるワンタイムパスワードが生成され、有効なワンタイムパスワードを生成する機能が損なわれます。私はこれがなぜ起こっているのかを理解しようとしています、そしてそれについて私ができることがあれば。
シークレットキーを作成し、キーからワンタイムパスワードを生成するためのコードは、サーバーとデバイスシミュレーターの間で同一です。デバイスとサーバーのkeyspecsのバイトを確認しましたが、同じです。ただし、SecretKey.getEncoded()からバイトを表示すると、SecretKeyFactories(両方ともDESedeKeySpecsから)によって生成されたキーには、1つずつ微妙な違いがあります。トリプルDESの代わりにDESを使用すると、同様の違いが見られます。
興味深いのは、私のAndroidプロジェクトでは、KeySpecのバイトと生成されたSecretKeyは一貫していますが(切り捨てられていますが)、サーバーでは、KeySpecと生成されたSecretKeyのバイトに1つずつ違いがあることがあります。これは正常ですか?DESとトリプルDESを使用する際のパリティビットの変更について読んだので、これが問題かどうかはわかりません。
AndroidがBouncyCastleを使用していることも知っていますが、サーバーはSunJCEを使用しています。私の理解では、これは問題にはならないはずであり、2つの異なるプロバイダーを使用するときにこれが既知の発生であるかどうかを知りたいと思います。バウンシーキャッスルをサーバーサイドで取得する機能は非常に限られています。
アドバイスと悟りをお願いします?