Pull to refresh

Comments

Статья об ошибках учит плохому. mcrypt не обновлялся более десяти лет и не планирует. Авторы его забросили. В нём есть серьёзные недоработки. Мы в Yii от него ушли в сторону OpenSSL и я бы никому не советовал его использовать.
Блин, да сколько ж можно, когда я уже перестану быть таким опасно некомпетентным! )
Подскажите, пожалуйтса, где почитать разъяснения про недоработки в Mcrypt? Я просмотрел офф. сайты — не нашел подобного, кроме их багтрекера.
Разберусь и вставлю тогда в начало статьи ссылку на это замечание.
Да, например, то что в Mcrypt криво сделан вектор инициализации для AES-192/256 (из-за этого пишут что типа AES-256 != Rijndael-256). Вектор инициализации должен равняться длине блока, т.е. в случае AES это 128 бит/16 байт (независимо от длины ключа), а в Mcrypt Rijndael-192/256 вектор инициализации равен размеру ключа. В итоге никто кроме mcrypt такого шифротекста не понимает. В то время, как в других шифрах Mcrypt (Twofish, CAST-256, Serpent и т.п.) вектор инициализации равен размеру блока.

Также OpenSSL банально в 2 раза быстрее, даже на процах не поддерживающих AES-NI (на процах поддерживающих новые инструкции OpenSSL уже на порядок быстрее), в то время, как Mcrypt об этих новых инструкциях ничего не знает.
Пардон, там не только вектор инициализации, но и размер блока меняется, хотя в случае AES 192/256 размер блока и вектор инициализации должен быть равен 128 бит. В таком случае будет совместимость со всеми другими программами, хоть OpenSSL, хоть Crypto-JS…
Ну да, поэтому и неравенство AES-256 != Rijndael-256 справедливо.
AES-N — N = длина ключа.
Rijndael-M — M = длина блока.

AES это Rijndael-128, с вариациями длины ключа.
Тут вопрос в том, зачем нужен такой шифр который везде реализован по другому? При том, что AES это вообще стандарт, а Rijndael можно сказать черновик этого стандарта. И самое фиговое, что в PHP и шифрующие фильтры сделаны на mcrypt.
Кроме того в Mcrypt используются Zero padding, и приходится самому обрабатывать текст, чтобы добавлять PKCS7.
В общем имхо лучше бы сделали Mcrypt deprecated, а вместо него прикрутили бы еще какую-то современную библиотеку шифрования на пару к OpenSSL.
Тут вопрос в том, зачем нужен такой шифр который везде реализован по другому?
Простите, не понял, что вы имеете ввиду? Какой шифр и где реализован по-другому?
Да, именно это я и смотрел. Но чтоб там разобраться надо больше знаний.
Я вот и думал вы наведете на какую-нибудь статью, в которой в более доступной форме рассказано про недостатки Mcrypt. Спасибо, изучу внимательно.

Кстати, после беглого чтения статьи, я так понял что OpenSSL не поддерживает режим AES CTR.
Когда переводил статью для поста дополнительно гуглил тему «CBC vs CTR», и много где рекомендуют именно CTR.
Начиная с OpenSSL v1.0.1 поддерживается AES-CTR-256. Проверить, какой у вас сейчас, можно при помощи php -r "echo OPENSSL_VERSION_TEXT;.
Добавил апдейт по вашим комментариям.
Перевод править, пожалуй, нехорошо, все же перевод, а не моя статья.
Sign up to leave a comment.

Articles