AES-128 или AES-256? Минутка истории и математики.
Многие из вас, скорее всего, замечали, что различный софт, использующий шифрование, как правило, использует самый распространенный и общепринятый симметричный алгоритм блочного шифрования AES с ключами в 128- и 256-бит. Наш VPN-сервис Connecto VPN использует AES с 128-битным ключом, в то время, как некоторые другие VPN-провайдеры предлагают шифрование аналогичным алгоритмом, но с 256-битным ключом. Давайте разберёмся, почему так и зачем.
AES изначально предлагает три стандартных варианта длины ключа шифрования (128, 192 и 256 бит). Многие люди, опираясь на это, убеждены, что чем больше ключ — тем безопаснее (особенно учитывая тот факт, что AES-256 примерно на 40% медленнее чем AES-128). На самом деле, для того, чтобы понять, почему у AES есть 3 варианта длины ключа, стоит обратиться к истории.
Алгоритм шифрования AES был выбран в качестве государственного, федерального алгоритма США для защиты данных правительством Соединенных Штатов, в т.ч., данных армии, ФБР и АНБ. Армия и спецслужбы США имеют довольно большую и долгую историю использования различных методов шифрования (еще до появление AES) и так сложилось исторически, что внутренние требования их ведомств предписывают иметь три уровня защиты (такие предписания появились еще до появления AES, да и вообще, компьютеров в целом).
Исходя из этих требований законодательных и иных регуляторов, NIST (Национальный Институт Стандартов и Технологий США) решили формально последовать требованиям бюрократов и сделали три варианта длины ключа шифрования, при этом, самый первый уровень, AES-128, всё равно не может быть взломан с использованием современных технологий. Просто предложить 256-битные ключи было проще, чем изменять нормативы.
Что касается нашего выбора — мы выбрали AES-128. Давайте представим, что нам удалось использовать всю доступную в атмосфере земли энергию солнца в размере 174000 TW (тераватт) и мы запитали с их помощью огромное количество NVIDIA GTX 1080, производительность которых близка к 52000 MFLOPS/W. Взяв 1000 FLOPS за стоимость одной итерации перебора ключа к AES-128 по радужной таблице (это еще я очень оптимистично смотрю на вещи) при энергоэффективности равной 10^3, мы переберем 2^128 комбинаций вариантов ключей чуть менее чем за:
(2^128/((52∗10^3∗174∗10^15)/1000))/60/60/24/365 = 1.19*10^6 = 1.2 миллиона лет
1200000 лет перебора значений при использовании актуальных сегодня технологий. Пиздец, да?
Ну и даже если предположить, что я обосрался с вычислениями (а по-любому обосрался где-то), и допустить, что я ошибся на один знак после запятой — наша планета до этого момента времени уже десять раз станет необитаемой, уже не говоря о том, что и сами вы сдохнете.
При этом, по сравнению с 256-битным ключом, выбранный нами 128-битный ключ предлагает гораздо большее быстродействие (примерно на 40% быстрее), при этом он так же предоставляет достаточный уровень защиты данных, который нельзя взломать с помощью современных средств.
Поэтому, мораль такая: хоть AES-256 сильнее, это вовсе не означает, что AES-128 не достаточно безопасен. Большинство компаний, заявляющих, что они используют AES-256 вместо AES-128, делают это исключительно из маркетинговых целей, предполагая, что пользователь не будет разбираться в вопросе детально. Практического смысла в использование 256-битного ключа до появления квантовых компьютеров нет. И после появления. Потому что один хер взломают.