13

いくつかのcryptogtaphyのものを歩いていると、RNGCryptoServiceProvider2つの方法があることがわかりました:

リンク

RNGCryptoServiceProvider.GetNonZeroBytes

RNGCryptoServiceProvider.GetBytes 

そして、私は尋ねます:

一部 (0 以上)がゼロ である暗号学的に強力なランダム値のシーケンスでバイト配列を埋めることの何が奇妙ですか? (これはランダムな値であり、明らかに多くのゼロはありませんが、それでもゼロは通常の数値です)

なぜ彼らは区別を作成したのですか?

4

1 に答える 1

16

.NET フレームワーク内では、セパレータとして使用する RSA 暗号化の PKCS#1 パディングを生成するときに、GetNonZeroBytes(byte[])が使用されます0x00

Reflector のようなツールを使用すると、RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(byte[])でRFC 2313のセクション 8.1.2に従ってパディングを実装するために使用されていることがわかります ( RFC 3218には、バイト レイアウトをより明確に示す優れた ASCII アートがあります)。

GetNonZeroBytes(byte[])を使用してソルトを生成することもできます。Cryptography StackExchange サイトには同様の質問があり、回避すること0x00は、ソルトをゼロで終わる文字列として扱う可能性のあるライブラリと API を支援することであり、誤ってソルトを切り捨ててしまうことを示唆しています。ただし、P/Invokeを使用していない限り、これが .NET で問題になることはほとんどありません。

于 2012-10-03T08:29:30.927 に答える