AES против Blowfish для шифрования файлов - PullRequest
106 голосов
/ 10 ноября 2010

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

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

Ответы [ 7 ]

187 голосов
/ 10 ноября 2010

Вероятно AES. Blowfish был прямым предшественником Twofish. Twofish был выходом Брюса Шнайера на соревнования, которые производили AES. Это было оценено как уступающее записи под названием Rijndael, которая стала тем, что стало AES.

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

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

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

23 голосов
/ 11 ноября 2010

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

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

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

16 голосов
/ 09 сентября 2012

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

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

8 голосов
/ 18 ноября 2010

AES.

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

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

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

Obscurity не обеспечивает защиты при шифровании. Чем больше тел смотрит, изучает, исследует, атакует алгоритм, тем лучше. Вам нужен самый «проверенный» алгоритм из возможных, и сейчас это AES. Если алгоритм не подлежит тщательному и постоянному анализу, вам следует меньше доверять его силе. Конечно, два не было скомпрометировано. Это из-за силы шифра или просто из-за того, что недостаточно людей присмотрелись ..... ДА

5 голосов
/ 10 ноября 2010

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

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

3 голосов
/ 16 мая 2016

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

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

3 голосов
/ 10 ноября 2010

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

...