Webサイトとそれに対応するヘルパープログラム(ユーザーのコンピューターにインストールされている)を開発しようとしています。Webサイトとプログラムは相互に通信しますが(ほとんどの場合AJAX)、他のWebページがプログラムに要求を送信できる場合はセキュリティ上の大きなリスクになります。私のプログラム(ユーザーのコンピューターにインストールされている)に不正要求を注入することを非常に困難にする解決策を考え出したいです。私の考えではワンタイムパスワードを使用しようとしていますが、セキュリティに関する知識が限られているため、ご意見をお聞かせください。
私はこのワンタイムパスワードアルゴリズム(疑似)を思いついた:
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コードとカウンター値が含まれている場合、これは安全ですか?そうでない場合、これを達成するためのヒントは何ですか?上記のすべてのプロパティが本当に必要です。
前もって感謝します。