Использование AES для проверки целостности файлов, замена MD5 - PullRequest
6 голосов
/ 08 января 2011

Прежде всего: я знаю, что AES - это блочный шифр, а не функция хеширования.Тем не менее, я застрял с микроконтроллером с очень небольшим количеством ОЗУ и флэш-памятью, и AES-128 уже реализован на нем и используется по своему прямому назначению - шифрованию.

К сожалению, мне также придетсяреализовать функцию хеширования для проверки целостности файла на том же микроконтроллере.Учитывая ограниченные ресурсы, мне было интересно, можно ли будет использовать существующий алгоритм AES вместо MD5 для хеширования.Это можно сделать следующим образом:

  1. Зашифровать первый блок файла с помощью фиктивного ключа (как, например, все нули)
  2. Зашифровать следующий блок с помощью предыдущего зашифрованного блокав качестве ключа
  3. Продолжайте до тех пор, пока все данные в файле не будут обработаны
  4. Используйте последний зашифрованный блок в качестве хеша

Теоретически я думаю, что этодолжно сработать.Если в файле есть поврежденные данные, это приведет к различиям во всех последующих блоках.

Теперь большой вопрос: насколько хорошо этот метод будет работать с точки зрения столкновений?Или, говоря иначе: насколько хорошо будет распространяться окончательный «хэш»?

Ответы [ 3 ]

5 голосов
/ 08 января 2011

Похоже, вы хотите использовать AES-CMAC , алгоритм аутентификации, основанный на AES.

1 голос
/ 12 января 2011

Наиболее точно да вы можете сделать хеш-функцию из AES. На самом деле, ряд заявок на участие в конкурсе NIST SHA3, который определит следующую хэш-функцию, одобренную правительством США, делают именно то, что .

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

Вы, конечно, можете создать из нее правильную хеш-функцию, но если все, что вам нужно, это целостность файла, и поэтому не нужно, чтобы она имела сопротивление прообразу, сопротивление столкновению или все те другие свойства, которые криптографические хеши имеют против злонамеренных злоумышленников, тогда вы, вероятно, даже можете просто перевести свою микросхему AES в любой режим цепочки, в котором она находится, передать файл в качестве сообщения и использовать последний блок в качестве хэша. (Просто выберите фиксированные значения, которые будут использоваться для ключа и IV. Ничто в моем наборе номеров , которые выглядят случайными, но не являются, вероятно, хорошим выбором, как первые 128 бит после десятичной точки в e и pi. )

0 голосов
/ 12 января 2011

Ваш предложенный алгоритм не имеет второго сопротивления перед изображением (что также подразумевает, что он также не имеет сопротивления столкновению), поэтому он не является криптографически сильным хэшем.

Если у меня есть сообщение P0 P1 P2, которое хэшируется в H, тогда я могу легко создать второе сообщение Q0 Q1 Q2 QX, которое также хэшируется в H - я выбираю Q0 Q1 Q2 произвольно, а затем вычисляю QX по расшифровка H с соответствующим ключом (шифрование Q2).

...