11

scryptでハッシュされたパスワードをデータベースに保存したいと思います。期待できる最大の長さはどれくらいですか?

4

2 に答える 2

10

https://github.com/wg/scryptによると、出力形式は$s0$params$salt$key次のとおりです。

  • s0は、128 ビットのソルトと 256 ビットの派生キーを使用して、形式のバージョン 0 を示します。
  • paramslog2(N) (16 ビット)、r (8 ビット)、および p (8 ビット) を含む 32 ビットの 16 進整数です。
  • saltbase64 でエンコードされたソルトです。
  • keybase64 でエンコードされた派生キーです。

https://stackoverflow.com/a/13378842/14731によると、base64 でエンコードされた文字列の長さは、エンコードされているバイト数を示します4*ceil(n/3)n

これを分解してみましょう:

  • ドル記号は 4 文字を構成します。
  • バージョン番号は 2 文字で構成されます。
  • 各 16 進文字は 4 ビット( log2(16) = 4 )を表すため、paramsフィールドは (32 ビット / 4 ビット) = 8 文字になります。
  • 128 ビットのソルトは 16 バイトに相当します。base64 でエンコードされた形式は、(4 * ceil(16 / 3))24 文字で構成されます。
  • 256 ビットの派生キーは 32 バイトに相当します。base64 でエンコードされた形式は、(4 * ceil(32 / 3))44 文字を構成します。

すべてをまとめると、次のようになります。4 + 2 + 8 + 24 + 44= 82 文字.

于 2014-06-01T23:31:17.337 に答える
2

Colin Percival 自身の実装では、tarsnap scrypt ヘッダーは 96 バイトです。これには以下が含まれます。

  • 6バイト「暗号」
  • 10 バイト N、r、p パラメータ
  • 32 バイトのソルト
  • バイト 0 ~ 47 の 16 バイト SHA256 チェックサム
  • バイト 0 ~ 63 の 32 バイト HMAC ハッシュ (キーとして scrypt ハッシュを使用)

これは、 node-scryptで使用される形式でもあります。チェックサムと HMAC ハッシュの背後にある理論的根拠の説明がstackexchangeにあります。

base64 でエンコードされた文字列として、これは 128 文字になります。

于 2016-11-12T00:57:19.253 に答える