Comments
Статья об ошибках учит плохому. mcrypt не обновлялся более десяти лет и не планирует. Авторы его забросили. В нём есть серьёзные недоработки. Мы в Yii от него ушли в сторону OpenSSL и я бы никому не советовал его использовать.
Блин, да сколько ж можно, когда я уже перестану быть таким опасно некомпетентным! )
Подскажите, пожалуйтса, где почитать разъяснения про недоработки в Mcrypt? Я просмотрел офф. сайты — не нашел подобного, кроме их багтрекера.
Разберусь и вставлю тогда в начало статьи ссылку на это замечание.
Подскажите, пожалуйтса, где почитать разъяснения про недоработки в 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 об этих новых инструкциях ничего не знает.
Также 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-N — N = длина ключа.
Rijndael-M — M = длина блока.
AES это Rijndael-128, с вариациями длины ключа.
Тут вопрос в том, зачем нужен такой шифр который везде реализован по другому? При том, что AES это вообще стандарт, а Rijndael можно сказать черновик этого стандарта. И самое фиговое, что в PHP и шифрующие фильтры сделаны на mcrypt.
Кроме того в Mcrypt используются Zero padding, и приходится самому обрабатывать текст, чтобы добавлять PKCS7.
В общем имхо лучше бы сделали Mcrypt deprecated, а вместо него прикрутили бы еще какую-то современную библиотеку шифрования на пару к OpenSSL.
Кроме того в Mcrypt используются Zero padding, и приходится самому обрабатывать текст, чтобы добавлять PKCS7.
В общем имхо лучше бы сделали Mcrypt deprecated, а вместо него прикрутили бы еще какую-то современную библиотеку шифрования на пару к OpenSSL.
А багтрекер не торт?
И ещё можно на тему Тома почитать: thefsb.tumblr.com
Я вот и думал вы наведете на какую-нибудь статью, в которой в более доступной форме рассказано про недостатки Mcrypt. Спасибо, изучу внимательно.
Кстати, после беглого чтения статьи, я так понял что OpenSSL не поддерживает режим AES CTR.
Когда переводил статью для поста дополнительно гуглил тему «CBC vs CTR», и много где рекомендуют именно CTR.
Кстати, после беглого чтения статьи, я так понял что OpenSSL не поддерживает режим AES CTR.
Когда переводил статью для поста дополнительно гуглил тему «CBC vs CTR», и много где рекомендуют именно CTR.
Sign up to leave a comment.
Руководство по шифрованию данных на PHP