Если процессор поддерживает AES, а PHP — нет, то, как вы сказали, зачем платить больше? Уж лучше использовать внешний модуль, а не зацикливаться на переносимости для шаред-хостингов и пр…
Процессор то AES поддерживает, но как и любые специальные инструкции, нужно чтобы еще библиотеки эти инструкции поддерживали (сами по себе они работать не будут). Чесно говоря при беглом гуглении, не нашел инфы поддерживает ли mcrypt эти самые AES-NI иснтрукции. Может объявится обладатель сервера на Sandy Bridge и протестит.
Ну то TrueCrypt, который более того в 8 потоков работает. Как бы никто и не сомневается, что эти инструкции ускоряют работу (иначе в них бы смысла не было). А вот в том, что mcrypt оптимизирован под эти инструкции я сильно сомневаюсь, учитывая, что libmcrypt 2.5.8 зарелизен в феврале 2007 года, а инструкции AES-NI представлены в марте 2008.
Не совсем понял причем тут дешифрация? Её я не тестировал. Возможно стоит дополнить (просто меня именно шифрование больше интересовало, так как значительно чаще делается бэкап, чем восстановление из него). В данном случае значит, что алгоритм Twofish почти в 11 раз быстрее шифрует данные, чем TripleDES.
при все уважении к проделанной раоте я думаю, чт у вас проблемы с результатами её отображения — дае на самом житеском уровне большее знвчкение скорости означает, чтоскрипт должен быть быстрее. А как любое значение скорости может быть на 1100 процентов ментше «оригинала» вообе не понять
Мне показалось, что в таком виде наиболее наглядно будет значительное различие в скорости работы. Возможно подпись графика сбивает с толку, если не читать что именно отображено на графике.
Да, еще для сравнения можно взять результаты по openssl: $ time openssl aes-128-ecb ./my-test-file
На серверах с FreeBSD openssl md5 на больших файлах (гигабайты), запущенный через банальный exec, работает в разы, если не порядки быстрее реализаций в самом php.
А в чем несерьезность, это блочные шифры, шифруют блоками по 128 бит. Да и я написал что скрипт немного упрощенный, далеко не у всех в конфиге выставлено 256 МБ для выполнения скриптами. Также я тестил на файлах по 700 МБайт, результаты аналогичные.
Время непосредственной работы алгоритма может быть сопоставима с оверхедом на вызов.
На большом объеме данных, это влияние нивелируется.
Если бы в скрипте сразу было Nмб — я бы ничего не сказал.
Я тестил набором данных 32 и 64 МБ, тупо файл загружался в память и потом вскармливался алгоритму. Также тестил шифрование при чтении небольшими файла частями около 60КБ, с большими строками уже сам PHP начинал тупить. Но поскольку результаты особо не отличались выложил упрощенную версию. Но в ней легко можно увеличить объем данных.
Ну так теоретически. И это в том случае, если теоретик не допустил ошибку в своей теории. На практике если же Пентагон доверяет AES'у свои файлы, то думаю и свои бэкапы мы можем доверить. Тем более что, спокойно можно выбрать шифрование с ключом 256 бит, он всё равно быстрее, чем на 128 или 192.
Привожу цитату из статьи:
«We thank Joan Daemen and Vincent Rijmen for their helpful feedback.»
Это разработчики Rijndael, который был прототипом AES. Они прочитали и сказали, что атака действительно работает.
>>> Пентагон доверяет AES'у свои файлы, то думаю и свои бэкапы мы можем доверить.
Во всех документах пишется, что рекомендуется использовать, но это не говорит, что они это делают. Плюс есть ещё такое ведомство как NSA. Вот оно-то и даёт вердикт (я так думаю) о том можно ли его использовать или нет. И как не странно у них свои алгоритмы, отличные от общепринятых.
Тут как бы другая ситуация, ведь проверка алгоритма задача весьма затратная по времени и ресурсам. А потратить деньги на эту проверку, а потом пользоваться непроверенным алгоритмами несколько глупо, даже если там были привычные для нас роспилы.
Ещё не согласен с другой составляющей названий графиков. Это не скорости (а как становится ясно всё же обратная величина) алгоритмов, а скорости (см. предыдущее замечанеи) просто шифрования. Покрайней мере это применимо к последнему графику.
Почти у всех шифров есть фаза предварительной обработки ключа (scheduling) — она исполняется один раз при установке (замене) ключа, а при шифровании каждого нового блока не производится. У некоторых шифров scheduling медленнее основного цикла в сотни раз.
Попробуйте сделать следующий разрез: шифрование 16 байт, 200.000 байт, 2.000.000 байт.
И картинки будут серьезно меняться.
Я в начале статьи писал, что меня в первую очередь интересовало шифрование файлов, причем файлов бэкапов, в данном случае инициализация идет именно вначале файла. Но в принципе, могу расширить тестирование, если это будет интересно многим.
Ну как бы все тесты проводятся применительно к библиотеке mcrypt встроенной в PHP. Сами тестовые файлы на PHP. Так как в данном случае для меня лично важна была практическая скорость с которой сможет работать скрипт, а не теоретические рассуждения о скорости алгоритмов шифрования. Вполне возможно, что во всех других языках использующих mcrypt соотношения будут похожи, но без соответствующего тестирования я это утверждать не могу.
Тестирование скорости алгоритмов шифрования в PHP