AES vs Blowfish для шифрування файлів


106

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

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


4
Blowfish більше десяти років, я думаю, ви маєте на увазі айс проти двох рибок ...
грак

Ви маєте рацію, я міг би це запитати. На щастя Джеррі підвів підсумки для мене чудово.
мімрок

@Rook Чим старше, тим краще правилом для алгоритмів безпеки. Нові алгоритми призначені для людей, яких більше хвилює продуктивність, ніж безпека.
припинення

Відповіді:


187

Ймовірно, AES. Blowfish був прямим попередником Twofish. Дві рибки - це вступ Брюса Шнайєра в змагання, що виробляли AES. Він був оцінений як неповноцінний для запису під назвою Рінддейл, який став AES.

Цікавий бік: в один момент змагань усіх учасників попросили висловити свою думку про те, як класифікуються шифри. Напевно, не дивно, що кожна команда обрала власний запис як найкращий - але кожна інша команда обрала Рінддейла другою найкращою.

Однак, у основних цілях Blowfish vs. AES є деякі основні відмінності, які можуть (певно) сприяти Blowfish з точки зору абсолютної безпеки. Зокрема, Blowfish намагається ускладнити атаку грубої сили (виснаження ключів), зробивши початкове налаштування ключа досить повільним. Для звичайного користувача це мало наслідків (це все-таки менше мілісекунди), але якщо ви намагаєтеся виправити мільйони клавіш за секунду, щоб зламати його, різниця досить значна.

Зрештою, я не вважаю це головною перевагою. Я зазвичай рекомендую AES. Наступним моїм вибором, ймовірно, будуть Змій, МАРС та Дві рибки в такому порядку. Blowfish прийде десь після цих (хоча є кілька інших, які я, мабуть, порекомендував би перед Blowfish).


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

10
@CodeInChaos: Залежно від вашої точки зору, це принаймні така правда - Змій був, мабуть, найбільш консервативним дизайном. Зокрема, вони вважали, що 16-ти кругла версія буде достатньою - тому вони подвоїли її на 32 раунди. Найкраща атака, яка зараз відома, діє лише у 11 раундах. Якби оригінальне запитання не обмежило вибір лише AES та Blowfish, а просто попросило найбезпечніший, досить відомий шифр, я, певно, сказав би Змій ...
Джеррі Коффін

Крім того, що "Цікавий бік" з'явився в декількох питаннях і джерелах, коли я навчався на моєму іспиті CompTIA Security +. Маленькі речі можуть бути не такими марними після цього!
Everlight

Blowfishнайшвидший
user924

22

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

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

AES, з іншого боку, має розмір блоку 128 біт. Такий розгляд є виправданням використання AES замість Blowfish.


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

Розмір блоку - цікавий аргумент. Я писав, кілька місяців тому, статтю, в якій теоретизується, що розмір блоку будь-якого симетричного шифру можна збільшити
CubicleSoft

16

З точки зору самих алгоритмів, я б погодився з AES, з тієї простої причини, що це було прийнято NIST, і він буде перевірятися та криптоаналізуватися роками. Однак я б запропонував, щоб у практичних програмах, якщо ви не зберігаєте якийсь файл, який уряд хоче зберегти в таємниці (у такому випадку АНБ, ймовірно, надасть вам кращий алгоритм, ніж AES та Blowfish), використовуючи будь-який з цих алгоритмів, виграних Я не буду занадто сильно змінюватись. Вся безпека повинна бути в ключі, і обидва ці алгоритми стійкі до грубої атаки. Blowfish виявився слабким лише в реалізації, яка не використовує повних 16 раундів. І хоча AES новіший, цей факт повинен змусити вас більше схилятися до BlowFish (якщо ви брали до уваги лише вік). Думай про це так,

Ось, що я б поставив вам ... замість того, щоб дивитись на ці два алгоритми і намагатися вибирати між алгоритмом, чому б ви не подивилися на свою схему генерації ключів. Потенційний зловмисник, який хоче розшифрувати ваш файл, не збирається сидіти там і придумати теоретичний набір ключів, який можна використовувати, а потім здійснити грубу атаку, яка може зайняти місяці. Натомість він збирається експлуатувати щось інше, наприклад, атакувати апаратне забезпечення вашого сервера, реверсувати інженерію вашої збірки, щоб побачити ключ, намагається знайти якийсь конфігураційний файл, у якому є ключ, або, можливо, шантажує вашого друга, щоб скопіювати файл з вашого комп’ютера . Вони збираються там, де ви найбільш уразливі, а не алгоритм.


4
Нещодавно AES було додано до списку "розбитих шифрів" у Вікіпедії, але найгірша атака проти Blowfish - проти чотири чотири раунди і явно відсутня у списку зламаних шифрів. Коментар Брюса про те, що він здивований, що люди все ще використовують Blowfish - це те, що відганяє реалізаторів. Однак він не зламаний, має підтримку змінних розмірів ключів, підтримує більші розміри клавіш, ніж AES, і, з точки зору програмування, легко здійснити порівняно з більшістю інших симетричних блок-шифрів. Сипуха пережила випробування часом, що становить найбільшу загрозу для будь-якого симетричного шифру.
CubicleSoft

Я згоден, що AES ніде не порушений. Однак у найближчі 10 років нам знадобиться новий стандарт. Також будь-який із фіналістів AES був фантастичними шифрами. Змій насправді багато хто вважає найскладнішим для зламу, але AES був найелегантнішим. (І так, якщо ви подивитеся, як ви
шифруєте

8

AES.

(Я також припускаю, що ви маєте на увазі двійку, а не набагато старшу і слабку метелику)

Обидва (AES & twofish) - хороші алгоритми. Однак навіть якби вони були рівними або дві рибки були злегка попереду технічних достоїнств, я б все-таки обрав AES.

Чому? Розголос. AES є стандартом для шифрування уряду, тому мільйони інших організацій також використовують його. Талановитий криптоаналітик просто отримує більше "удару за долар", виявляючи недоліки в AES, тоді це робить для набагато менше знаючих і використовуваних двох рибок.

Непрозорість не забезпечує захисту при шифруванні. Більше органів, які шукають, вивчають, досліджують, атакують алгоритм, завжди краще. Ви хочете максимально "перевірений" алгоритм, який зараз є AES. Якщо алгоритм не підлягає інтенсивному та постійному пильному контролю, ви повинні впевнитись у його міцності. Впевнені, що дві рибки не були порушені. Це через силу шифру чи просто тому, що недостатньо людей уважно придивились ..... І все-таки


5

Вибір алгоритму, мабуть, не так важливий. Я б використовував AES, оскільки це було краще досліджено. Що набагато важливіше - це вибрати правильний режим роботи та функцію виведення ключів .

Для натхнення ви можете поглянути на специфікацію формату TrueCrypt, якщо ви хочете швидкого випадкового доступу. Якщо вам не потрібен випадковий доступ, ніж XTS не є оптимальним режимом, оскільки у нього є слабкі місця, інші режими не мають. І ви також можете додати певну перевірку цілісності (або код автентифікації повідомлення).


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

3

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


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

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

2
Ось чому я сказав "найбільш добре оцінені алгоритми". Якщо ви вважаєте, що Blowfish 128bit поступається AES 128bit, вам доведеться погодитися, що Blowfish 256bit витягає AES 128bit з води. Не менш важливим є також генерація та управління ключами. Якщо ваш ключ "пароль", це насправді не має значення, яким алгоритмом ви користуєтесь. Я говорю, що ОП, мабуть, дивиться на неправильну річ.
Майк Джонс

2
У запитанні зазначено, що ключі будуть виведені з паролів. Зламати систему грубою формою пароля, ймовірно, буде набагато простіше, ніж атакувати будь-який з алгоритмів, згаданих тут. Коли ключ отриманий від пароля, значення Keyle майже повністю не відповідає.
dajames

Ви відзначаєте мою відповідь вниз, незважаючи на те, що ви говорите абсолютно те саме, що я зробив? Я сказав, що довжина ключа, і виберіть дійсно хороший ключ. За яким визначенням "добро" ви вважали б ключовим добро, якби воно не заповнювало всі біти ключа?
Майк Джонс

3

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.