3

system.security.cryptography 名前空間を使用してこのサンプル コードを見つけることができる場所を知っている人はいますか?または開発者が従うべき指示はありますか?

目的は、asp.net Web サイトに 2 要素認証を追加することです。Web サイトで、ユーザーにパスコードの入力を求めたい (キーフォブから取得した場合と同様)。クライアント側では、正しいパスコードを生成する vb.net windows.forms プログラムを提供したいと考えています。

これを system.security.cryptography 名前空間で小規模に行いたいと考えています。デバイスをいじったり、認証サーバー アプライアンスを購入したりしたくないサンプル コードを探していました。

そこにあるアルゴリズムのほとんどは、数学の高度な学位を必要とするか、Linux や PHP などの他のプラットフォーム用です。.net に相当するものを探しています。

4

1 に答える 1

1

RFC4226(カウンターベースのOTP)またはdraft-mraihi-totp-timebased (時間ベースのOTP)の暗号化部分は比較的単純です。

  1. 共有キーとカウンター/時間に基づいてHMACを生成します
  2. 安全な方法で切り捨てます

それを複雑にするのは、通常、ユーザー管理と静的/動的同期です。

このようなものが機能するはずです:

public static int CalculateHotp(byte[] key, byte[] counter)
{
    var hmacsha1 = new HMACSHA1(key);
    byte[] hmac_result = hmacsha1.ComputeHash(counter);
    int offset = hmac_result[19] & 0x0f;
    int bin_code = (hmac_result[offset]  & 0x7f) << 24
                   | (hmac_result[offset+1] & 0xff) << 16
                   | (hmac_result[offset+2] & 0xff) <<  8
                   | (hmac_result[offset+3] & 0xff);
    int hotp = bin_code % 1000000;
    return hotp;
}
于 2010-09-13T14:05:39.847 に答える