問題タブ [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.

0 投票する
1 に答える
413 参照

hmac - hmac ベースのワンタイム パスワードの実装で、カウンターのクライアントとサーバー間のカウンター同期を保証するにはどうすればよいですか?

API を介してユーザーを認証するために、hmac ベースのワンタイム パスワード プロトコルを実装しようとしています。

アイデアは、ユーザーの一意の識別子 (uid) を秘密鍵とインクリメンタル カウンターに対して暗号化することです。次に、次の呼び出しのためにカウンターをインクリメントします。

次に、サーバー側で、秘密鍵とカウンターを使用して復号化し、ユーザー識別子 (uid) を取得します。

これはうまくいきます。カウンターがあるため、各呼び出しは完全に一意 (1 回) です。

しかし、カウンターの同期をどのように処理するのでしょうか? クライアントがリクエストを生成し、次の呼び出しのためにカウンターをインクリメントしてリクエストを送信したが、サーバーがオフラインでリクエストを受信しない場合、またはインターネット接続の問題がありリクエストが通過しない場合はどうなりますか?クライアントは互いのカウンターと同期していません。

これは「リクエストが送信されたかどうかを知る必要がある」というケースですか? つまり、サーバーからの応答ヘッダーを追加して、カウンターがインクリメントされたかどうかを示し、インクリメントされた場合にのみ、アプリのカウンターもインクリメントできます...しかし、逆の場合も同じことが言えます-送信できますリクエスト、サーバーはそれを受け取り、独自のカウンターをインクリメントして応答を送信しますが、サーバーがリクエストを処理している間にインターネット接続が中断され、アプリは応答を受信せず、カウンターをインクリメントしないため、2つが外れています再度同期します。

あなたが私に与えることができる洞察をありがとう。

0 投票する
1 に答える
9077 参照

c - Cでhmac sha1を実装する

Hmac-sha1 を生成する小さなコードを試しています。SHA1 計算用の OpenSSL ライブラリを使用して hmac 実装を自分でコーディングするように依頼されました。アルゴリズムの 'wiki'ing の後、ここに私が持っているものがあります.RFC 2246 で指定されたテスト値で入力を使用しました:

RFC2104 の例を使用して行った以下のコードでは、必要に応じて COUNTER = 0 の値を取得していますが、上記のように COUNTER 値が 2、3 などの他の値に設定されている場合、HMAC SHA1 は上記の値と一致しません。また、別の問題は、bzero または bcopy の代わりに memcpy および memset を使用すると、コードが COUNTER = 0 値と一致しない異なる (間違った) Hmac Sha1 値を示すことです。この奇妙な振る舞いの理由を説明してください。

0 投票する
1 に答える
945 参照

javascript - JavaScript での TOTP のライブラリ

私は現在、いくつかのクライアント - サーバーアプリに取り組んでいます。認証プロセスをより安全にする必要があるため、TOTP を使用したいと考えています。クライアント アプリは phonegab で記述されているため、javascript 用の安定した信頼性の高いライブラリが必要です。github や jBoss Community の aerogear-otp-js でいくつか見つけました。

Aerogear-otp-js は良さそうに見えますが、最初のリリースだけなので、本番環境で使用するのは得策ではないと思います。また、キー間の間隔を設定する必要がありますが、それはエアロギアのオプションではありません。いいライブラリを教えてください。

0 投票する
1 に答える
1553 参照

java - 32 ビット長の 16 進数を 6 桁の数値 OTP に変換します

次の 32 ビット HEX を 6 桁の 10 進数に変換するにはどうすればよいですか?

MD5: 9d10f0693b9d8e6c32c33d1e9be377b5

上記を取得するために特定のフィールドをハッシュしました。ただし、6 桁の PIN を生成する必要があります。

0 投票する
1 に答える
948 参照

node.js - NodeJS を使用した Gemalto OTP トークン

Gemalto IDProve 100 OTP トークンに対して認証できる NodeJS モジュールはありますか? 私は Amazon からこれらの 1 つを持っています。このデバイスの優れた点は、サーバーに接続する必要がないことだと思いました。2 つの連続するコードを独自のカスタム サーバーに入力するだけで、アルゴリズムはそれに対して継続的に認証できます。デバイス: http://www.gemalto.com/products/easy_otp_token/#

NodeJS モジュールがない場合、これら 2 つの値を読み取り、将来のコードを検証できるアルゴリズムを持つ .NET または他の言語の例はありますか?

ありがとう!

0 投票する
2 に答える
409 参照

c# - SecurID のような Web サービス認証

Azure で実行されている非常に小さな ASP.NET ASHX Web サービスに取り組んでおり、保護したいと考えています。ユーザーの操作なしで機能する必要があるため、暗号化された秘密鍵をリクエストに渡すことを考えていました。しかし、念のため、そのキーを常に変更する必要があると思いました。

これまでのところ、私の考えは、クライアントとサーバーの両方で 60 秒ごとに同じ方法でキーを生成し、それをハッシュして、それをキーとして使用することです。

しかし、対処方法がわからないことに遭遇しました。60 秒ごとに変更され、クライアントが 59 秒でキーを生成し、サーバーがリクエストに応答するのに 1 秒以上かかる場合、キーは変わらず、リクエストは拒否されます。

このケースを処理する良い方法はありますか...おそらくキーは60秒ごとに変更されますが、変更後の数秒間は問題ありませんか?

サービスを保護する方法はおそらく他にもあると思いますが、クライアント側の証明書などはいくつかの理由で既に除外しました。変更しないパスワードよりもシンプルにしたかっただけです。

考え?

0 投票する
1 に答える
1448 参照

php - PHPワンタイムパスワード?

HOTP ( Android Google認証用のカウンターベースのHOTPコード)の学習に苦労しています。サーバーとクライアント間で秘密鍵を共有する機能を持つこのコードを見つけました ( Mobile APP )。

これは次を出力します-

今私の問題は、上記のコードがクライアント側とサーバー側の両方で適切に動作するように管理できないことです。同じ秘密鍵を使用しましたprint $i."\t".($a=oath_hotp("**mysecretvalue**",$i));出力は完全に異なります。これはカウンターベースであるため、TOTPのような時刻同期がないことに注意してください。

Androidフォンとサーバー側でシークレットコードを再確認しました。何が間違っている可能性がありますか?私はPHPのセキュリティにあまり詳しくないことに注意してください。したがって、上記が Google の認証で機能しない場合は、開始する場所を教えてください。

ありがとうございました