4

誰かが MDC とデータ暗号化を少しクリアしてくれませんか? RFC 4880 では、次のように述べています。

暗号化されるデータの平文は SHA-1 ハッシュ関数を介して渡され、ハッシュの結果は変更検出コード パケットの平文に追加されます。ハッシュ関数への入力には、上記のプレフィックス データが含まれます。これにはすべての平文が含まれており、値 0xD3、0x14 の 2 つのオクテットも含まれています。これらは、変更検出コード パケット タグと 20 オクテットの長さフィールドのエンコードを表します。

最初は、mdc (ヘッダー データなし) は次のように見えます。sha1([data]) -> hash_value

次に、セミコロンまでの2番目の文は、次のように見えますsha1(OpenPGP_CFB_extra_data + [data]) -> hash_value

セミコロンの後のことは、私がやるべきことのように思わせますsha1([data] + "\xd3\x14") -> hash_value。(これはまったく意味がありませんが、書かれているようです)

何が起こっている?

正しい MDC を取得した後、それで何が行われますか? それは独自のパケットですか、それともこのようなものですか (私の理解によると) 完了しましたか?:

tag18_header + encrypt(plaintext + "\xd3\x14" + 20 byte hash)
4

1 に答える 1

3

RFC 4880GnuPGソース コードの一部 ( g10/cipher.cがこれが処理される場所のようです) を読んだ後、次のように解釈します。

  • 0xd3MDC パケット タグです。
  • 0x14MDC パケット長 (20 バイト) です。

MDC ハッシュは次のように計算されます。

MCD_hash = SHA-1(OpenPGP_CFB_extra_data + [plaintext] + "\xd3\x14")

次に、これがプレーンテキスト メッセージに追加され、暗号化されます。

encrypt(OpenPGP_CFB_extra_data + [plaintext] + "\xd3\x14" + MDC_hash)

RFC 4880 に書かれているように ( page 50 ) 、復号化されると、最後の 20 バイトを除くすべての SHA-1 を計算し、結果を最後の 20 バイトと比較することによって、このハッシュが検証されます。

復号化中、平文データは SHA-1 でハッシュ化する必要があります。これには、プレフィックス データ、および変更検出コード パケットのパケット タグ長さフィールドが含まれます。MDC パケットの本体は、復号化時に SHA-1 ハッシュの結果と比較されます。

于 2011-05-25T19:51:36.027 に答える