Итак, ребята, есть много разных шифров, но какой из них самый безопасный в настоящее время?
Список: http://www.php.net/manual/en/mcrypt.ciphers.php
Если вы не уверены, используете AES (также известный как «Rijndael») с 128-битным ключом. Если вы разработали какой-то фетиш о размере ключа, вы можете выполнить свои иррациональные угрызения, выбрав более крупный ключ, например 192 или 256 бит; дополнительная стоимость невелика (+ 40% рабочей нагрузки для AES-256 по сравнению с AES-128, и для того, чтобы действительно заметить эту разницу, требуется очень быстрая сеть).
Помните, что независимо от выбранного размера ключа правильный шифр mscrypt для AES всегда MCRYPT_RIJNDAEL_128
. Это связано с тем, что стандарт AES относится к вкусу шифрования Rijndael с 128-битным размером блока. Если вы хотите AES-256, вам нужно использовать MCRYPT_RIJNDAEL_128
с 256-битным (32 байт) ключом, а не MCRYPT_RIJNDAEL_256
.
AES была опубликована в 1998 году и принята правительством США в качестве федерального стандарта в 2001 году, и в настоящее время она не показывает признаков слабости. Некоторые математические свойства были найдены позже, но они не влияют на реальную безопасность; в основном, они подчеркивают, что у нас есть относительно точные знания о том, почему AES является безопасным. Ни один другой симметричный алгоритм шифрования не получил столько внимания (тысячи талантливых криптографов), чем AES.
Большинство проблем безопасности исходят из того, как используется криптографический алгоритм, а не сам алгоритм. Используйте правильный режим цепочки, добавьте MAC-адрес, управляйте заполнением и, прежде всего, надежно управляйте ключами . Если у вас есть все это право (что намного сложнее, чем кажется), то пришло время беспокоиться о выборе Rijndael, Twofish или что-то еще.
Помимо замечательного ответа Томаса Порнина, вы также должны учитывать то, что вы пытаетесь достичь с точки зрения «безопасности» (конфиденциальность / целостность / аутентичность / доступность).
Для каждого случая вам нужно решить несколько вопросов, например … К кому это относится? Где и почему он используется (что вы защищаете)? Как долго это длится? и т.п.
Например, вероятно, нет смысла действительно шифровать данные сеанса с полномасштабной последовательностью 256-битных операций, когда данные на самом деле предназначены только для 20-30 минут. Безопасный 128-битный алгоритм будет почти в два раза быстрее или, по крайней мере, будет использовать нагрузку меньше тактовых циклов и быть таким же (если не более) безопасным.
Также нет смысла шифровать то, что должно длиться долго (например, конфиденциальный документ или файл, закрытый ключ и т. Д.) Со слабым, коротким ключом. Вы бы захотели порой использовать несколько алгоритмов с некоторой аутентификацией и правильным использованием отступов. Я регулярно зашифровывал и подписывал контент по запросу для клиентов, используя несколько алгоритмов (в основном двухфайлов, AES, RSA).
И чтобы не забыть (как указывал Томас), вы можете реализовать безопасный метод (или методы) ненадежно. С огромным количеством вариантов каждой формулы и таковой может быть сложно реализовать что-то «безопасное».
Как правило, что-то настолько же безопасно, как и ключ, чтобы разблокировать его. Если я оставлю ключи от машины в автомобиле с разблокированным автомобилем, ключи не будут безопасными, и он будет открыт для принятия кем-либо мимоходом. Blowfish с хорошо разбросанным 32-символьным ключом будет таким же безопасным, как и все остальное сегодня. 3-значный ключ, однако, может быть сломан в мгновение ока.
«Самый сильный шифр – AES-256»
Из деталей на веб-сайте Брюса Шнайера, по иронии судьбы, AES-256 может быть наименее безопасным из трех ключевых размеров 128, 192 и 256. Есть проблемы с генерацией ключей в 256-битном варианте.
Некоторые алгоритмы лучше других в разных вещах – не уверены, каковы ваши критерии для «безопасного».
В наши дни вы, конечно же, не должны использовать какие-либо алгоритмы DES (при условии, что у вас есть свободный выбор). AES (Rijndael) является действующим стандартом для NIST и других органов.
В общем, больше бит для определенного алгоритма означает более безопасное, но убедитесь, что вы используете вектор инициализации и НЕ используете ECB.
НТН
C.
Согласно бумаге NIST, RJINDAEL имел низкий запас прочности по сравнению с MARS, двумя рыбами или змеей. Если вам действительно нужен самый сильный шифр, выберите один из них.
http://csrc.nist.gov/archive/aes/round2/r2report.pdf
Цитируя: «MARS, похоже, имеет высокий запас прочности. Точная характеристика MARS затруднена из-за того, что MARS использует два разных типа раундов. MARS получила критику на основе ее сложности, что, возможно, мешало ее анализу безопасности в течение периода разработки AES.
У Rijndael, похоже, есть достаточный запас прочности. Поля безопасности немного трудно измерить, потому что количество раундов изменяется с размером ключа. Rijndael получил некоторую критику по двум причинам: ее маржа безопасности находится на низкой стороне среди финалистов и что ее математическая структура может привести к атакам. Однако его структура довольно проста, что, возможно, облегчило анализ безопасности в течение заданного периода времени процесса разработки AES.
Кажется, что у Змея высокий запас прочности. Змей также имеет простую структуру, которая, возможно, облегчила анализ безопасности в течение заданного периода времени процесса разработки AES.
Кажется, что у Twofish высокий запас прочности. Поскольку Twofish использует зависящую от ключа функцию раунда, понятие запаса безопасности может иметь меньшее значение для этого алгоритма, чем для других финалистов. Зависимость S-боксов Twofish от всего k / 2 битов энтропии в k-битном ключевом случае привела к предположению, что Twofish может быть поддающимся атаке на разделение и завоевание, хотя такая атака не найдена. Twofish получил некоторую критику за его сложность, затрудняя анализ в течение периода разработки AES ».
Если вы хотите посмотреть подробности, есть статья, в основном я, по блочным шифрам на http://en.citizendium.org/wiki/Block_cipher
Чтобы соответствовать действующим стандартам США, используйте AES, ранее Rijndael. Любой из других финалистов конкурса AES – Serpent, MARS, Twofish или RC-6 – тоже должен быть в порядке. Я думаю, вам нужна лицензия для RC6.
Обычно я использую AES-128, поскольку AES одобрен FIPS. Самый сильный шифр – AES-256 (MCRYPT_RIJNDAEL_256).
mcrypt имеет модульную конструкцию, и новый шифр можно легко добавить.