Для AES128 с использованием CCCrypt() ключ может быть длиннее 128 бит?

Я использую CCCrypt метод.

Могу ли я использовать более длинный ключ, чем 128 бит? Может ли он быть произвольно длинным? Или, возможно, кратно 128?

Если да, то как бы я это сделал?

Я не думал, что это возможно, но нашел этот текст: здесь

Некоторые алгоритмы, такие как AES и RSA, позволяют использовать ключи разной длины, но другие являются фиксированными, например DES и 3DES. Шифрование с использованием более длинного ключа обычно предполагает большую устойчивость к восстановлению сообщения. Как обычно, существует компромисс между безопасностью и временем, поэтому выбирайте длину ключа соответствующим образом.

Как AES допускает разную длину, игнорирует ли он биты выше 128?

Я рву на себе волосы из-за этого.


person Robert    schedule 14.10.2011    source источник
comment
Он не игнорирует их, а объединяет в ключ нужного размера.   -  person Louis Ricci    schedule 14.10.2011


Ответы (2)


AES (Расширенный стандарт шифрования) на самом деле представляет собой набор из трех связанных алгоритмов блочного шифрования (или пар алгоритмы, если считать шифрование и дешифрование по отдельности). Все они работают со 128-битными блоками (16 байт).

Наиболее часто используется AES-128, который использует 128-битный ключ (т. е. 16 байт). AES-192 использует 192-битный ключ (24 байта), AES-256 использует 256-битный ключ (32 байта).

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

Тем не менее, я, к сожалению, понятия не имею, поддерживает ли библиотека CommonCrypto все варианты AES, и если да (то, что я предполагаю), то как выбрать правильный.

person Paŭlo Ebermann    schedule 14.10.2011
comment
Я знаю, что это старо, но для тех, кто ищет, я использую CommonCrypto для AES128 с 256-байтовыми ключами, а также использовал 128-байтовые ключи. Поэтому я предполагаю, что 192-байтовые ключи также будут работать. - person slycrel; 06.08.2013
comment
@slycrel Я не знаю, что вы сделали (или что делает CommonCrypto-API), но AES-128 принимает только 128-битные ключи. Версия с 256-битными ключами называется AES-256, версия со 192-битными ключами — AES-192. - person Paŭlo Ebermann; 07.08.2013
comment
Может быть, я что-то неправильно понимаю или неправильно формулирую... Я думал, что AES всегда был 128-битным с разными размерами ключей. Не мой первоисточник, но это хорошая статья об этом: blog.agilebits.com/2013/03/09/ Так что, вероятно, дело в терминологии. Если это так, мои извинения. - person slycrel; 07.08.2013
comment
Размер блока AES всегда 128 бит, поэтому это число не является частью имени. Цифра в названии — это размер ключа. - person Paŭlo Ebermann; 20.04.2017

Пауло объяснение превосходно! и намного лучше, чем документация Apple по этому вопросу ;-)

Теперь, чтобы поместить это знание в контекст iOS... вам нужно знать, что cccrypt (как и его имя на справочных страницах) часто называется CommonCrypto (что может облегчить вам поиск) в другом месте веб-сайта.

Тем не менее, вы не найдете многого, пока не поймете, что эта часть представляет собой программное обеспечение с открытым исходным кодом и действительно не имеет документации.

Но как только вы найдете это, вы можете выполнить поиск по исходному коду, чтобы найти CommonCrypto.h и узнайте перечисления, которые вы можете использовать, в том числе: kCCKeySizeAES128, kCCKeySizeAES192 и kCCKeySizeAES256. strong> - поэтому ДА вы можете использовать 256-битные ключи с AES на iOS.

person poupou    schedule 15.10.2011