4

暗号化における鍵の長さの要件を理解するのに少し苦労しています。私は現在、56ビットであると信じているDESを使用しています...現在、8文字のパスワードをbyte[]私の暗号化に変換することで機能します。7桁のパスワードを使用すると、そうではありません。

間違っていたらすみませんが、それは ASCII 文字が 7 ビットなので、8 * 7 = 56 ビットなのでしょうか?

それは私には正しくないようです。鍵を使用したい場合、秘密鍵のソルトハッシュ、つまり MD5 ハッシュを渡すことができないのはなぜですか?

これは非常に単純なことだと思いますが、何が起こっているのかを明確に理解することはできません。

4

7 に答える 7

12

DES は 56 ビット キーを使用します。各バイトの 1 ビットがパリティ ビットである 8 バイトです。

ただし、一般的には、アルゴリズムに関係なく、テキスト パスワードを対称暗号鍵に変換するために、受け入れられたよく知られた鍵導出アルゴリズムを使用することをお勧めします。

PKCS #5 ( RFC 2898 ) で説明されている PBKDF2 アルゴリズムは、任意の長さのキーを生成できる、広く使用されているキー派生関数です。PBKDF2 は、ハッシュ関数を介してソルトとパスワードを組み合わせ、実際のキーを生成します。ハッシュは何度も繰り返されるため、攻撃者が最も一般的なパスワードの「辞書」の各エントリを試すのは費用がかかり、時間がかかります。

古いバージョンの PBKDF1 は DES 暗号化用のキーを生成できますが、DES と PBKDF1 は新しいアプリケーションには推奨されません。

暗号化をサポートするほとんどのプラットフォームには、API に PKCS #5 キー導出アルゴリズムが含まれています。

于 2009-06-08T16:27:12.790 に答える
7

各アルゴリズムは、特定のキーの長さを受け入れるように設計されています。キーはアルゴリズムの一部として使用されるため、あなたの心が望むものにはなりません。

一般的な鍵のサイズは次のとおりです。

  • DES: 56bit キー
  • AES: 128-256bit キー (一般的に使用される値は 128、192、および 256)
  • RSA (非対称暗号化): 1024、2048、4096 ビット キー

などの数値1234567は、4 バイトの変数のみです。"1234567"キーは(C では暗黙的に変換可能) または `{ '1', '2', '3', '4', '5', '6', '7'などのバイト配列であることが期待されます}。

ソルトされたキーの MD5 ハッシュを DES に渡したい場合は、何らかのキー圧縮技術を使用する必要があります。たとえば、上位 7 バイトを取得する (やや望ましくない) か、(既知の定数キーを使用して) MD5 ハッシュで DES 暗号化を実行し、最後のバイトを除くすべてを DES 操作のキーとして取得することができます。

編集: ここで話している DES は、NIST によってリリースされた標準に基づく実装です。(上記のように) 特定の API がキーの長さに関するさまざまな要件を想定し、そこから最終的な 7 バイトのキーを導出する可能性があります。

于 2009-06-08T15:42:54.430 に答える
6

キーのサイズは 64 ビットである必要がありますが、キーから使用されるのは 56 ビットのみです。残りの 8 ビットはパリティ ビット (内部使用) です。

ASCII 文字のサイズは 8 ビットです。

于 2009-06-08T15:42:19.983 に答える
0

この問題を回避し、実装の全体的なセキュリティを向上させるために、通常、キー自体ではなく、キーのハッシュ化されたバリアントを暗号関数に渡します。

また、実行中の操作に固有で変更されない値 (内部ユーザー ID など) でハッシュを「ソルト」することをお勧めします。これにより、キーの任意の 2 つのインスタンスについて、結果の has が異なることが保証されます。

派生キーを取得したら、特定の暗号化機能で必要とされるように、その最初の n バイトを引き出すことができます。

于 2009-06-08T16:37:34.063 に答える
0

DES には 64 ビット キーが必要です。データは 56 ビット、パリティは 8 ビットです。各バイトには、最後のインデックスにパリティ ビットが含まれています。このビットは、発生した可能性のあるエラーをチェックするために使用されます。7 つのデータ ビットの合計が偶数になる場合、正しいパリティ ビットは 0 で、奇数の場合は 1 です。

ASCII 文字には 8 ビットが含まれており、エラー訂正が必要ない場合は 8 文字をキーとして使用できます。EC が必要な場合は、7 文字を使用し、インデックス(0 ベース) 7、15、23、31、39、47、55、63 にパリティ ビットを挿入します。

ソース: ウィキペディア: https://en.m.wikipedia.org/wiki/Data_Encryption_Standard

「キーは表向きは 64 ビットで構成されています。ただし、これらのうち実際にアルゴリズムで使用されるのは 56 個だけです。8 ビットはパリティ チェックのみに使用され、その後は破棄されます。したがって、有効な鍵の長さは 56 ビットです。」</p>

「キーは通常、それぞれが奇数パリティを持つ 8 バイトとして保存または送信されます。ANSI X3.92-1981 (現在は ANSI INCITS 92-1981 として知られています) によると、セクション 3.5:

KEY の各 8 ビット バイトの 1 ビットは、キーの生成、配布、および保存におけるエラー検出に使用できます。ビット 8、16、...、64 は、各バイトが奇数パリティであることを確認するために使用されます。」</p>

于 2019-01-15T02:04:42.233 に答える