ウェブサイトとそれに対応するヘルパープログラム(ユーザコンピュータにインストールされている)を開発しようとしています。ウェブサイトとプログラムはお互い(AJAXを中心に)コミュニケーションをとりますが、他のウェブページがプログラムにリクエストを送ることができれば大きなセキュリティ上のリスクになります。私は、私のプログラム(ユーザーのコンピュータにインストールされている)に詐欺の要求を注入することを非常に困難にする解決策を考え出したいと思います。私の考えはワンタイムパスワードを使用しようとしていますが、私はセキュリティに関する知識が限られているので、あなたの考えを尋ねます。ワンタイムパスワードアルゴリズム(matematical、time based、action based)
私はこのワンタイムパスワードアルゴリズム(擬似)を思い付いています
function otp(seed, counter, unix_timestamp, action)
{
for(i = 0; i < counter; ++i)
{
seed = sha256(seed + i);
}
str = seed;
str = sha256(str + unix_timestamp/60);
str = sha256(str + action);
otp = substr(str,0,4); //Convert the first for bytes to an int.
return (int)otp;
}
をそれは、次のプロパティが必要です。
- は一度だけ使用することができ、(すべてのOTPで世代は "カウンター"を増やす=>新しいシード)
- 毎分変更されます(時間によって異なります)。
- アクション(ログイン、...)にバインドされている場合、アクションに依存します。
- 簡単に別々に生成し、後で同期させることができます。
すべてのリクエストにOTPコードとカウンタ値が含まれている場合、これは安全ですか?これを達成するためのヒントは何ですか?私は本当に上記のすべてのプロパティが欲しいです。
ありがとうございます。
[ハッシュチェーン](http://en.wikipedia.org/wiki/hash_chain)や他の標準的な[ワンタイムパスワード](http://en.wikipedia)の生成方法を検討することもできます。 org/wiki/one-time_password)。 OTPを生成するための標準ライブラリをお探しの場合は、[ITセキュリティ](http://security.stackexchange.com/)でお尋ねください。 OTPを生成するために新しいライブラリを作成している場合は、[暗号化](http://crypto.stackexchange.com/)でより具体的な質問を投稿することができます。 –