Алгоритм MD2 Message-Digest — это криптографическая хеш-функция, разработанная Рональдом Ривестом в 1989 году. [2] Алгоритм оптимизирован для 8-битных компьютеров. MD2 описан в IETF RFC 1319. [3] «MD» в MD2 означает «Message Digest».
Несмотря на то, что MD2 еще не полностью скомпрометирован, IETF в 2011 году отменил MD2 до статуса «исторического», сославшись на «признаки слабости». Он устарел в пользу SHA-256 и других сильных алгоритмов хеширования. [4]
Тем не менее, по состоянию на 2014 год [обновлять]он продолжал использоваться в инфраструктурах открытых ключей как часть сертификатов, созданных с помощью MD2 и RSA . [ необходима ссылка ]
128-битное хэш-значение любого сообщения формируется путем дополнения его до кратного длине блока (128 бит или 16 байт ) и добавления к нему 16-байтной контрольной суммы . Для фактического расчета используются 48-байтный вспомогательный блок и 256-байтная S-таблица . Константы были сгенерированы путем перетасовки целых чисел от 0 до 255 с использованием варианта алгоритма Дюрстенфельда с генератором псевдослучайных чисел на основе десятичных цифр числа π (пи) [3] [5] (см. nothing up my sleeve number ). Алгоритм проходит через цикл, в котором он переставляет каждый байт во вспомогательном блоке 18 раз для каждых 16 обработанных входных байтов. После того, как все блоки (удлиненного) сообщения были обработаны, первый частичный блок вспомогательного блока становится хэш-значением сообщения.
Значения S-таблицы в шестнадцатеричном формате:
{ 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA, 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12, 0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A, 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F, 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21, 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03, 0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1, 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6, 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1, 0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02, 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6, 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F, 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26, 0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09, 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52, 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A, 0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39, 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4, 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A, 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14 }
128-битные (16-байтовые) хэши MD2 (также называемые дайджестами сообщений ) обычно представляются как 32-значные шестнадцатеричные числа. Ниже показан 43-байтовый ввод ASCII и соответствующий хэш MD2:
MD2("Быстрая коричневая лиса перепрыгивает через ленивую собаку ") = 03d85a0d629d2c442e987525319fc471
В результате лавинного эффекта в MD2 даже небольшое изменение во входном сообщении (с подавляющей вероятностью) приведет к совершенно другому хешу. Например, изменение буквы d на c в сообщении приведет к:
MD2("Быстрая коричневая лиса перепрыгивает через ленивого лисицу ") = 6b890c9292668cdbbfda00a4ebf31f05
Хэш строки нулевой длины:
МД2("") = 8350e5a3e24c153df2275c9f80692773
Рожье и Шоуво представили в 1995 году [6] коллизии функции сжатия MD2 , хотя они не смогли расширить атаку на полный MD2. Описанные коллизии были опубликованы в 1997 году. [7]
В 2004 году было показано, что MD2 уязвим к атаке на прообраз со сложностью по времени, эквивалентной 2 104 применений функции сжатия. [8] Автор заключает: «MD2 больше нельзя считать безопасной односторонней хэш-функцией».
В 2008 году MD2 получил дальнейшие усовершенствования в атаке на прообраз со сложностью по времени 2,73 оценки функции сжатия и требованиями к памяти 2,73 блока сообщений. [9]
В 2009 году было показано, что MD2 уязвим к атаке коллизии со сложностью по времени 2 63,3 оценки функции сжатия и требованиями к памяти 2 52 хэш-значений. Это немного лучше, чем атака дня рождения , которая, как ожидается, потребует 2 65,5 оценки функции сжатия. [10]
В 2009 году были выпущены обновления безопасности, отключающие MD2 в OpenSSL , GnuTLS и Network Security Services . [11]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )