Лучший способ обработки блочных шифров в C ++? (Crypto ++) - PullRequest
2 голосов
/ 26 сентября 2008

Я довольно плохо знаком с шифрованием C ++ и блочным шифром, и в настоящее время я нахожусь в процессе написания функции расшифровки для AES (16-байтовые начальные / 16-байтовые блоки). Все идет хорошо, но мой общий размер данных не всегда кратен размеру моего блока. Мне интересно, как лучше всего обрабатывать оставшиеся данные в конце моих данных.

Я использую Crypto ++ для библиотеки AES.

Функция ProcessBlock() принимает массив символов ввода и вывода. Я предполагаю, что они ожидают, что они будут достаточно большими, как размер блока.

Как лучше всего обработать все 16-байтовые блоки в блочном шифре, а затем обработать оставшиеся данные?

Ответы [ 3 ]

1 голос
/ 27 сентября 2008

Это больше, чем просто заполнение - вам нужен режим работы. Блог Good Math, Bad Math пишет отличную серию о том, что они из себя представляют и как их использовать здесь . Также см. запись в Википедии . Одна вещь, которая действительно, очень важна: никогда, никогда не используйте режим ECB (Электронная кодовая книга) - где вы шифруете каждый блок независимо. Это очевидный способ сделать это, но он обеспечивает ужасно низкую безопасность.

В идеале, однако, вам даже не нужно делать это самостоятельно. Ваша крипто библиотека должна предоставить это. Если этого не произойдет, я бы предложил перейти на что-то другое. как OpenSSL.

0 голосов
/ 26 сентября 2008

Существует стандарт PKCS для так называемого "заполнения"

См. Страницу википедии , но она равняется заполнению одним из:

 01
 02 02
 03 03 03
 04 04 04 04
 05 05 05 05 05

Таким образом, вы узнаете во время расшифровки, где заканчивается исходное сообщение ...

0 голосов
/ 26 сентября 2008

То, что вы хотите, это система заполнения.

Ознакомьтесь с этой статьей CodeProject на Crypto ++ :

Когда сообщение не кратно размер блока шифра, ECB или CBC Сообщения режима должны быть дополнены. Метод и значения отступа являются источник проблемы в отношении совместимость между криптографией библиотеки и API. Как Гарт Ланкастер указывает, если вы не знаете о подробности заполнения, используйте StreamTransformationFilter. В этом В этом случае фильтр Crypto ++ будет дополнен вы.

...