web-dev-qa-db-ja.com

基本的な暗号化の質問

いくつかのデータを生成するために、通常のパスワードをscryptに投入するとします。 Scryptを使用すると、出力データの大きさを指定できます。

私の質問は、極端な場合、scryptから1 GBのデータを要求した場合、最初のバイトからこの出力の最後のバイトを生成することはどういうわけか迅速に可能でしょうか?

言い換えれば、「おそらくscryptにxバイト以上を要求すべきではない」というしきい値「xバイト」はありますか?

更新:別の言い方をすると、scryptに1 GBのデータを生成するように指示した場合、結果の最初のxバイトを公開し、最後の48バイトを(キーとして)使用します。 IV)AES-256-CBCを使用して機密データを暗号化する場合、問題がありますか? scryptを使うという目的を破ったという意味で、問題はありますか?答えはxに依存しますか?

3
cryptonamus

scryptから必要以上の出力を要求しないでください。 scryptハッシュのCPU /メモリコストは、出力サイズではなく、セットアッププロセス( Wikipediaのアルゴリズムの説明 、値 "N"(CPU /メモリコスト)および「p」(並列化パラメータ))。出力は、scryptのセットアップフェーズからの値をソルトとして使用して、 PBKDF2 の1回の反復によって生成されます。

同じ理由で、部分的な出力(たとえば、最後の数バイト)の生成は、出力全体の生成よりもわずかに高速です。低コストでPBKDF2の出力の選択されたサブセットのみを生成することは可能ですが、入力全体を生成する必要があります。これを行うために利用できます。

PBKDF2は、パスワード、シード、および32ビットブロック番号を連結して繰り返しハッシュすることにより、一連のブロックとして出力を生成します。 2 ^ 32-1ブロック未満の出力(scryptで使用されるPBKDF2の場合は128GB)の場合、出力の一部を明らかにしても、残りの出力のセキュリティには影響しません。ただし、その時点以降、出力は繰り返され始めます。

3
Mark