問題タブ [rfc-4226]
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.
java - ワンタイムパスワードシステムの実装について他に何を知る必要がありますか?
私はワンタイムパスワード(OTP)システムの作成を任されており、これは最終的にモバイルデバイスでOTPジェネレーターを作成するために使用されます。
カウンターを使用してHOTP(rfc 4226)を使用することを検討していますが、いくつかのバリエーションがある可能性があります。OATHに準拠している必要はありません。
これはセキュリティ/暗号化の分野での私の最初の経験なので、セキュリティの新人を罠にかけるセキュリティの落とし穴を避け(そして学び)、そして私が何をする必要があり、完了するために知っている必要があるかをよりよく理解しようとしていますこの仕事。
この一般的なアドバイスに加えて、このプロジェクトの実装についていくつか具体的な質問があります。
SHA-1を使用しているだけでも、HOTPは安全であると見なされますか?私の同僚の1人は、HMAC-SHA-512を使用する必要があることを提案しました。使用している基本的なアルゴリズムを切り替えるのは簡単に見えます。ここで知っておくべき副作用はありますか?処理時間の増加など?
カウンターの同期について懸念があります。可能なカウンター値の正しい先読みとして何を使用する必要がありますか?ユーザーが先読み制限を超えてクリックした場合に同期を取り戻すための最良の方法は何ですか?対応するOTPと一緒にカウンターを表示して送信する方が簡単ですか、それともセキュリティが大幅に弱まりますか?
また、共有秘密やカウンター値などの関連情報を安全に保存するためのベストプラクティスについてもよく理解していません。
あなたが答えるとき、私がこのドメインに不慣れであり、専門用語と頭字語に追いつくことをまだ試みていることを覚えておいてください。前もって感謝します。
security - ロックアウトポリシーとワンタイムパスワード
RFC 4226を使用して、自分のWebサイトにワンタイムパスワードシステムを実装しています。このパスワードは、SMSを介してモバイルデバイスに送信されます。ユーザーはモバイルデバイスでのみパスワードを受け取ることができ、パスワードは15分後に期限切れになります。
ユーザーは、通常使用される標準の英数字の「マスターパスワード」も持っています。3つの失敗のロックアウトワークフローを実装しました。このロックアウトは15分間続きます。
私の質問は、セキュリティの観点から、「マスターパスワード」のみをロックアウトすることは許容されますか?ワンタイムパスワード機能を使用する場合、ユーザーにロックアウトポリシーの回避を許可する必要がありますか?どんな種類のセキュリティホールを開いていますか?
cryptography - このRFC4226は間違っていますか?
RFCのテスト値は以下を指定します:
したがって、ルビーで0のHMACを取得しようとすると、次のようになります。
私は得ることが期待されていましたcc93cf18508d94934c64b65d8ba7667fb7cde4b0
だから私はJavaで実装を書きました、そして私は同じようになります:
では、秘密が「12345678901234567890」の場合の「0」の16進数のSHA1-HMACは何でしょうか。
delphi - Delphi HMAC-SHA1 の予期しない結果
このスレッドで説明できない理由により、古いバージョンの Delphi (Delphi 5) で書いています。HOTP を実装しようとしていますが、現在、すべてのコードが HMACSHA1 の部分を除いて機能しており、その理由がわかりません。RFC 2202 に従って HMACSHA を実装し、その結果を他の多数の HMACSHA1 ジェネレーターと比較しました。これらはすべて一致しました。
次に、HOTP 用に RFC 4226 の実装を開始しましたが、RFC の下部にあるサンプル データ ( https://www.ietf.org/rfc/rfc4226.txt ) と比較して、HMACSHA1 の中間結果が間違っていることに驚きました。 )。
RFC のテスト ベクトルを次に示します。
次のテスト データでは、シークレットに ASCII 文字列 "12345678901234567890" が使用されます。
シークレット = 0x3132333435363738393031323334353637383930
表 1 は、各カウントの詳細、中間 HMAC 値です。
カウント 16 進数 HMAC-SHA-1(secret, count)
0 cc93cf18508d94934c64b65d8ba7667fb7cde4b0
ただし、以下に示すように HMACSHA1 関数を使用します。
私は試みます:
そして私の答えは次のように返されます
948d4b44f3e0aac05904d6fd82ab7b8bbe761a4c
これは、以下にリンクされているオンラインジェネレーターと同じです
http://www.freeformatter.com/hmac-generator.html#ad-output
それで、私は何を間違っていますか?
arrays - HMAC SHA-1 トランケート HOTP ロジック
HOTP の手動 HMAC SHA-1 切り捨てをカウントしようとしていますが、ソース コードでカウントした場合と同じ結果が返されません。たとえば、HMAC SHA-1 を次のように生成するコードがあります。
$hash = hash_hmac('sha1','375317186160478973','test');
それは私に HMAC = c359e469b8ef0939f83e79a300b20a6ef4b53a05 を与えるでしょう
[19] 個の配列に分割すると、次のようになります。
c3 59 e4 69 b8 ef 09 39 f8 3e 79 a3 00 b2 0a 6e f4 b5 3a 05
最後の配列から 05 (バイナリで 101) を取得し、その後 101 & 0xf = 5 を実行します
だから私は5番目の配列から数えます ef (11101111) 09 (1001) 39 (111001) f8 (11111000)
その後、 (((11101111) & 0x7f) << 24) | を実行します。(((1001) & 0xff) << 16) | (((111001) & 0xff) << 8) | ((11111000) & 0xff)) % pow (10,6)
次のような結果が得られます:56024
しかし、このコードを使用すると:
次のような結果が得られます:599808
配列からの値として 2 進値または 10 進値を書き込むと、同じ異なる結果が表示されます。誰かが私の過ちを説明するのを手伝ってくれるので、マニュアルとソースコードを数えて、HOTP の同じ値を得ることができます。ありがとうございました