AES против Blowfish для шифрования файлов


107

Я хочу зашифровать двоичный файл. Моя цель - предотвратить чтение файла кем-либо, у кого нет пароля.

Какое решение лучше, AES или Blowfish с той же длиной ключа? Можно предположить, что у злоумышленника есть большие ресурсы (программное обеспечение, знания, деньги) для взлома файла.


4
Blowfish больше десяти лет, я думаю, вы имеете в виду aes vs twofish ...
ладья

Вы правы, я мог бы спросить об этом. К счастью, Джерри отлично подытожил эту тему.
mimrock

@Rook Чем старше, тем лучше - это эмпирическое правило алгоритмов безопасности. Новые алгоритмы предназначены для людей, которых больше заботит производительность, чем безопасность.
ceven 06

Ответы:


188

Наверное, AES. Blowfish был прямым предшественником Twofish. Twofish был участником конкурса Брюса Шнайера, который произвел AES. Он был признан более низким по сравнению с записью под названием Rijndael, которая и стала AES.

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

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

В конце концов, я не вижу в этом большого преимущества. Я обычно рекомендую AES. Моим следующим выбором, вероятно, были бы Serpent, MARS и Twofish в таком порядке. Blowfish придет где-то после них (хотя есть пара других, которые я, вероятно, порекомендовал бы перед Blowfish).


11
Я думаю, что другие алгоритмы считались более безопасными, чем Rijndael, но он предлагал очень хорошую производительность, в то время как его безопасность была признана достаточно хорошей. Разработка алгоритма шифрования - это всегда компромисс между безопасностью и производительностью.
CodesInChaos

10
@CodeInChaos: В зависимости от вашей точки зрения, это, по крайней мере, отчасти правда - Serpent, вероятно, был самым консервативным дизайном. В частности, они посчитали, что будет достаточно 16-раундового варианта, поэтому удвоили его до 32 раундов. Лучшая из известных на данный момент атак эффективна только против 11 раундов. Если бы исходный вопрос не ограничивал выбор только AES и Blowfish, а просто запрашивал наиболее безопасный, достаточно известный шифр, я бы, вероятно, сказал, что Serpent ...
Джерри Коффин

Кроме того, это «помимо интересного» возникло в нескольких вопросах и источниках при подготовке к экзамену CompTIA Security +. В конце концов, мелочи могут оказаться не такими уж и бесполезными!
Everlight

Blowfishсамый быстрый
user924 02

23

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

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

С другой стороны, AES имеет размер блока 128 бит. Уже одно это соображение является оправданием для использования AES вместо Blowfish.


2
Преимущество 64-битного размера блока заключается в том, что он упрощает перенос нового алгоритма в старое приложение в качестве замены (3-) DES.
dajames 02

Размер блока - интересный аргумент. Несколько месяцев назад я написал статью, в которой теоретизируется, что размер блока любого симметричного шифра может быть увеличен до любой длины: cubicspot.blogspot.com/2013/02/…
CubicleSoft 05

16

Что касается самих алгоритмов, я бы выбрал AES по той простой причине, что он принят NIST и будет подвергаться рецензированию и криптоанализу в течение многих лет. Однако я бы предположил, что в практических приложениях, если вы не храните какой-либо файл, который правительство хочет сохранить в секрете (в этом случае АНБ, вероятно, предоставит вам лучший алгоритм, чем AES и Blowfish), использование любого из этих алгоритмов выиграет не имеет большого значения. Вся безопасность должна быть в ключе, и оба этих алгоритма устойчивы к атакам грубой силы. Blowfish показал свою слабость только на реализациях, которые не используют полные 16 раундов. И хотя AES новее, этот факт должен заставить вас больше склоняться к BlowFish (если бы вы учитывали только возраст). Подумайте об этом так,

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


4
AES недавно был добавлен в список «сломанных шифров» в Википедии, но худшая атака против Blowfish проводится против жалких четырех раундов и явно отсутствует в списке сломанных шифров. Комментарий Брюса о том, что он удивлен, что люди все еще используют Blowfish, отталкивает разработчиков. Однако он не сломан, поддерживает переменные размеры ключей, поддерживает большие размеры ключей, чем AES, и с точки зрения программирования его легко реализовать по сравнению с большинством других симметричных блочных шифров. Blowfish выдержал испытание временем, которое является величайшей угрозой для любого симметричного шифра.
CubicleSoft 05

Я согласен, что AES нигде не сломан. Однако в ближайшие 10 лет нам понадобится новый стандарт. Также любой из финалистов AES был фантастическими шифровальщиками. Многие считают, что Serpent сложнее всего взломать, но AES был самым элегантным. (И да, если вы посмотрите, как вы делаете шифрование и расшифровку, это определенно элегантно.)
nerdybeardo

8

AES.

(Я также предполагаю, что вы имеете в виду две рыбы, а не намного более старую и слабую рыбу)

Оба (AES и twofish) - хорошие алгоритмы. Однако даже если бы они были равны или были бы немного впереди по техническим характеристикам, я бы ВСЕ ЕЩЕ выбрал AES.

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

Неизвестность не обеспечивает защиты при шифровании. Больше тел ищет, изучает, исследует, атакует алгоритм - всегда лучше. Вам нужен максимально проверенный алгоритм, и прямо сейчас это AES. Если алгоритм не подвергается интенсивной и постоянной проверке, вам следует меньше доверять его силе. Конечно, twofish не был скомпрометирован. Это из-за силы шифра или просто потому, что недостаточно людей внимательно посмотрели ... ЕЩЕ


5

Выбор алгоритма, наверное, не имеет большого значения. Я бы использовал AES, так как он лучше исследован. Что гораздо важнее, так это выбор правильного режима работы и функции определения ключа .

Возможно, вы захотите взглянуть на спецификацию формата TrueCrypt для вдохновения, если вам нужен быстрый произвольный доступ. Если вам не нужен произвольный доступ, то XTS не является оптимальным режимом, поскольку у него есть недостатки, которых нет в других режимах. И вы можете также добавить какую-то проверку целостности (или код аутентификации сообщения).


1
Абсолютно - критически важно использовать хорошую функцию вывода ключей, такую ​​как PBKDF2.
caf,

3

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


7
Я не могу согласиться. Шифр Люцифера IBM (предшественник DES) использовался в качестве 128-битного ключа, но DES (только с 56-битным ключом) оказался намного более безопасным после (повторного) открытия дифференциального криптоанализа.
Jerry Coffin

3
Просто посмотреть на длину ключа - очень плохой показатель.
Джеральд Дэвис

2
Вот почему я сказал «самые популярные алгоритмы». Если вы считаете, что 128-битный Blowfish уступает 128-битному AES, вы должны согласиться с тем, что 256-битный Blowfish вытесняет 128-битный AES из воды. В равной степени не менее важны генерация ключей и управление ими. Если ваш ключ - «пароль», то совершенно неважно, какой алгоритм вы используете. Я говорю, что OP, вероятно, смотрит не на то.
Майк Джонс,

2
В вопросе сказано, что ключи будут производными от паролей. Взломать систему путем подбора пароля, вероятно, будет намного проще, чем взломать любой из упомянутых здесь алгоритмов. Длина ключа практически не имеет значения, если ключ получен из пароля.
dajames 02

Вы отмечаете мой ответ, несмотря на то, что вы говорите то же самое, что и я? Я сказал длину ключа и выбрал действительно хороший ключ. По какому определению «хорошего» вы бы считали ключ хорошим, если бы он не заполнял все биты ключа?
Майк Джонс,

3

Оба алгоритма (AES и twofish) считаются очень безопасными. Это широко освещалось в других ответах.

Однако, поскольку в 2016 году AES широко используется, он был специально аппаратно ускорен на нескольких платформах, таких как ARM и x86. Хотя AES не был значительно быстрее, чем twofish до аппаратного ускорения, теперь он намного быстрее благодаря специальным инструкциям процессора.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.