OpenPGP тег 18/19 описание путаницы - PullRequest
4 голосов
/ 16 мая 2011

Может кто-нибудь, пожалуйста, проясните немного MDC и шифрование данных для меня? в RFC 4880 написано:

Открытый текст данных, которые будут зашифрованный передается через SHA-1 хэш-функция, и результат Хеш добавляется в открытый текст в Модификация пакета с кодом обнаружения. Вход в хеш-функцию включает данные префикса, описанные выше; это включает в себя все открытый текст, а затем также включает в себя два октеты значений 0xD3, 0x14. Эти представляют кодировку Пакетная метка кода обнаружения модификации и длина поля 20 октетов.

сначала кажется, что mdc (без данных заголовка) просто: sha1([data]) -> hash_value

тогда второе предложение до точки с запятой выглядит так: sha1(OpenPGP_CFB_extra_data + [data]) -> hash_value

материал после точки с запятой заставляет меня думать, что я должен сделать sha1([data] + "\xd3\x14") -> hash_value. (это вообще не имеет смысла, но похоже, что написано)

что происходит?

после получения правильного MDC, что с ним делать? это собственный пакет или что-то вроде этого (согласно моему пониманию) сделано?:

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

1 Ответ

3 голосов
/ 25 мая 2011

После прочтения RFC 4880 и частей исходного кода GnuPG ( g10 / cipher.c , кажется, место, где это обрабатывается), яинтерпретировать это так:

  • 0xd3 - тег пакета MDC.
  • 0x14 - длина пакета MDC (20 байтов).

MDC-хэш вычисляется следующим образом:

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

Затем он добавляется к текстовому сообщению и шифруется:

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

При расшифровке этот хэш проверяется вычислением SHA-1 из всех, кроме последних 20 байтов и сравнения результата с последними 20 байтами, как пишет RFC 4880 ( page 50 ):

Во время дешифрования незашифрованные данные должны бытьхэшируется с SHA-1, , включая данные префикса, а также тег пакета и поле длины пакета с кодом обнаружения модификации.Тело пакета MDC после дешифрования сравнивается с результатом хэша SHA-1.

...