Какой шифр PHP mcrypt наиболее безопасен? - PullRequest
27 голосов
/ 11 мая 2010

Итак, ребята, есть много разных шифров, но какой из них самый безопасный для использования в настоящее время?

Список: http://www.php.net/manual/en/mcrypt.ciphers.php

Ответы [ 7 ]

46 голосов
/ 11 мая 2010

Если вы не уверены, используйте AES (также известный как «Rijndael») со 128-битным ключом. Если у вас появился какой-то фетиш о размере ключа, вы можете выполнить свои иррациональные проблемы, выбрав ключ большего размера, например, 192 или 256 бит; дополнительные затраты невелики (+ 40% к рабочей нагрузке для AES-256 по сравнению с AES-128, и для того, чтобы реально наблюдать эту разницу, требуется очень очень быстрая сеть).

Помните, что независимо от выбранного размера ключа правильный шифр mcrypt для 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 или чего-то еще.

5 голосов
/ 21 февраля 2012

В дополнение к замечательному ответу Томаса Порнина, вы также должны учитывать то, что вы пытаетесь достичь с точки зрения «безопасности» (конфиденциальность / целостность / подлинность / доступность).

В каждом случае вам нужно ответить на несколько вопросов, например ... К кому это относится? Где и почему он используется (что вы защищаете)? Как долго это должно длиться? и т.д.

Например, вероятно, нет смысла действительно шифровать данные сеанса с полной последовательностью 256-битных операций, когда данные действительно должны длиться, скажем, 20-30 минут. Безопасный 128-битный алгоритм будет почти вдвое быстрее или, по крайней мере, будет использовать нагрузку меньше тактов и будет таким же (если не больше) безопасным.

Также нет смысла шифровать что-то, что рассчитано на длительное время (например, конфиденциальный документ или файл, закрытый ключ и т. Д.), Используя метод слабого короткого ключа. Время от времени вам потребуется несколько алгоритмов с некоторой аутентификацией и правильным использованием отступов. Я регулярно шифровал и подписывал контент по запросу клиентов, используя несколько алгоритмов (в основном, twofish, AES, RSA).

И чтобы не забыть (как указывал Томас), вы можете небезопасно реализовать безопасный метод (или методы). С огромным количеством вариантов каждой формулы и тому подобным может быть сложно реализовать что-то «безопасное».

Как правило, что-то так же безопасно, как ключ, чтобы разблокировать его. Если я оставлю ключи от машины в машине с разблокированной машиной, ключи не будут в безопасности, и они будут открыты для взятия каждым, кто проходит мимо. Blowfish с хорошо распределенным ключом из 32 символов будет таким же безопасным, как и все остальное сегодня. Однако 3-символьная клавиша может быть сломана в мгновение ока.

3 голосов
/ 20 января 2011

«Самый сильный шифр - AES-256»

Из подробностей на веб-сайте Брюса Шнайера AES-256 может быть, по иронии судьбы, наименее защищенным из трех размеров ключей 128, 192 и 256. Есть проблемы с генерацией ключей в 256-битном варианте.

2 голосов
/ 30 марта 2012

Согласно документу NIST, RJINDAEL имел низкий запас по сравнению с MARS, twofish или змеем. Если вам действительно нужен самый надежный шифр, выберите один из них.

http://csrc.nist.gov/archive/aes/round2/r2report.pdf

Цитировать: «MARS, похоже, имеет высокий запас безопасности. Точная характеристика MARS сложно из-за того, что MARS использует два разных вида раундов. МАРС получил некоторую критику в связи с его сложностью, которая, возможно, препятствовала его анализ безопасности во время процесса разработки AES.

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

Змей обладает высоким запасом безопасности. Змей также имеет простую структуру, что могло облегчить его анализ безопасности в течение указанного периода времени Процесс разработки AES.

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

2 голосов
/ 11 мая 2010

Некоторые алгоритмы лучше других в разных вещах - не уверен, каков твой критерий для "самого безопасного".

Вы, конечно, не должны использовать какие-либо алгоритмы на основе DES в наши дни (если у вас есть свободный выбор). AES (Rijndael) является действующим стандартом для NIST и других органов.

В целом, больше битов для конкретного алгоритма означает более безопасный, но убедитесь, что вы используете вектор инициализации и НЕ используете ECB.

НТН

С

1 голос
/ 11 мая 2010

Если вы хотите посмотреть на детали, есть статья, в основном мной, о блочных шифрах на http://en.citizendium.org/wiki/Block_cipher

Чтобы соответствовать действующим стандартам США, используйте AES, ранее Rijndael. Любой из других финалистов соревнований AES - Serpent, MARS, Twofish или RC-6 - тоже подойдет. Я думаю, что вам нужна лицензия для RC6, хотя.

0 голосов
/ 11 мая 2010

Я обычно использую AES-128, поскольку AES одобрен FIPS. Самый сильный шифр - AES-256 (MCRYPT_RIJNDAEL_256).

mcrypt имеет модульную конструкцию и легко может быть добавлен новый шифр.

...