Практический выбор алгоритма шифрования
Недавно озадачился проблемой шифрования данных на hdd. Много искал по инету, но в итоге нашел совсем мало, а бенчмарков производительности нет совсем. Решил спросить совета тут. Итак используемая платформа: ноутбук Intel Core i3-370, 6 Gb RAM, обычный HDD (не ssd), OS Linux Debian 7 х64.Думаю шифровать вместе с системой, использовать dm-crypt, в нем есть алгоритмы AES, Blowfish, Twofish и Serpent (при установке предлагает только их). Но вот что из них выбрать? какой будет работать быстрее на данном железе? большая ли будет разница в производительности межу х64 и х86 ?
как можно оценить скорость их работы, может есть какой тест ?
Ссылки
[link1] https://www.pgpru.com/comment3301
[link2] https://www.pgpru.com/comment32619
[link3] https://www.pgpru.com/comment48068
[link4] https://www.pgpru.com/comment39601
[link5] https://www.pgpru.com/comment17615
[link6] https://www.pgpru.com/forum/prakticheskajabezopasnostj/skorostjshifrovanijawdereshenijj
[link7] http://blog.wpkg.org/2009/04/23/cipher-benchmark-for-dm-crypt-luks/
[link8] https://www.pgpru.com/comment8736
[link9] https://www.pgpru.com/comment7811
[link10] https://ru.wikipedia.org/wiki/DiskCryptor
[link11] https://upload.wikimedia.org/wikipedia/commons/5/5a/DiskCryptor_vs_TrueCrypt_Encryption_Benchmark_(Core_i5).png
Core i3 неподдерживает инструкции AES-NI (который в стабильном Debian, впрочем, временно выкинули), так что почти без разницы. Если всё-таки выжимать максимум по скорости, лучше всё-равно выбрать AES, Twofish будет сравним. X-64 должно быть лучше, но не сказать насколько. Blowfish — это 64-битный шифр по размеру блока, его использование для шифрования современных больших дисков и с современными режимами дискового шифрования нежелательно (некритично конечно, но устарелое решение).
unknown
AES, его хорошо пиарят и впаривают во все что только можно ...
Моя паранойя в него не верит, есть в штатах такое понятие как ограничение технологий на экспорт, часто то одно, то другое не дают вывозить или юзать, а тут целый алгоритм идеального шифрования на раздаче всем подряд :)
Хочется чего то другого
А тот факт, что сей алгоритм разработан в Бельгии, шаблон не сильно рвёт? :)
не, не рвет. Но мы отошли от главной темы — технические характеристики этих шифров, а именно скорости их работы.
вроде читал что в виндовой версии трукрипт есть бенч алгоритмов, может кто его тестил ?
которое давно благополучно умерло в отношении почти всех криптотехнологий, по крайней мере не только самого AES, но и других блочных шифров. Можете выбрать исконно американские Blowfish/Twofish или условно английско-датско-израильский Serpent. Если быстродействие решает, то за вычетом AES выбор Twofish вполне адекватен.
Я не хочу ни кого обидеть, но хочется видеть конкретику. все говорят абстрактно: этот быстрее, а тот медленнее, но никто не говорит в цифрах.
Это очень давно было.
Это от незнания матчасти. Это ж результат открытого конкурса НИСТ. Вам не нравится Rijndael (AES)? Предложите свой шифр, который будет лучше. Обсуждалось много раз, в т.ч. в /comment3301[link1] и /comment32619[link2].
Не говорите ему, что Keccak — очень вероятный следующий финалист[link3], тоже разработан в Бельгии.
Тоже много раз обсуждалось, + нагуглить более, чем реально. Общие идеи можно уловить с /comment39601[link4], /comment17615[link5] и отсюда[link6].
На форуме был результат бенчмарков в картинках, но найти его будет затруднительно. А может и самой картинки уже нет в том посте. Есть тулзы (название не помню), которые делают такой бенчмарк под Linux — можно всегда всё проверить самому и на конкретном железе.
http://blog.wpkg.org/2009/04/2.....k-for-dm-crypt-luks/[link7]
+все комменты к тому блогпосту гляньте.
unknown
Большое спасибо, это и искал. Теперь осталась только непонятка с архитектурой -стоит ли переходить на х64 или нет ?
Читал как то одну интересную статейку (ссылку сейчас не найду, да и всех подробностей ее не помню) на тему сравнения винды хр, висты и семеры в х86 и х64 редакциях на ноуте, на тему кто больше протянет на батарее. так в х86 жилось по дольше на хр до 30мин, на висте разница меньше, а семера шла почти вровень. Интересно как с этим дело в линуксе.
По быстродействию стоит. Из-за не очень гладкой поддержки ACPI в ноутах Linux может проигрывать винде по экономичности работы от батареи, это должно влиять больше, чем разрядность. Но это уже вопрос за пределы тематики форума, чисто по криптоалгоритмам влияние на быстродействие должно быть (кроме, возможно, старых, таких как blowfish).
unknown
решил все таки проверить сам, использовал скрипт Heikki Salokanto из блогпоста что ты дал. Debian testing x64, ядро 3.2. Вот что получилось:
1. На RAM диске:
2. На реальном разделе hdd:
делал по 3 прохода, цифры записи немного различались, чтение почти стабильно. Как интерпретировать полученные результаты ?
Почему скорость записи намного больше скорости чтения ?
Почему на hdd все так сильно просело и старый добрый blowfish всех порвал? Может скрипт работает криво или я что делал не так ?
Это интересный вопрос, надо бы для начала сам скрипт посмотреть, но у меня он почему-то с той странифки не грузится.
А здесь собственно диск стал узким местом,различия в скорости незначительны. Победа blowfish странна, думаю, надо искать что-то вроде неверно сброшенного кэша, т.е. опять скрипт смотреть.
У AES конечно есть небольшая особенность: скорость расшифрования меньше скорости зашифрования (проявляется естественно не во всех режимах шифрования). Но это не должно проявляться столь значительно и для фишей такого быть не должно. Подозреваю, что гиг на запись вполне себе способен кэшироваться при современных размерах памяти.
проверялось именно на разделе или записывалось в файл поверх файловой системы на разделе?
именно на разделе, как раз был пустой, просто указав в скрипте BLOCKDEV=/dev/sda4 .
Так как все таки правильно провести эксперимент ?
Там в скрипте сделан сброс кэша. Единственное, было бы правильно sleep небольшой после этого поставить, операция-то вроде несинхронная.
Вообще, соотношение скоростей чтения/записи от теста к тесту гуляет довольно сильно, а после сброса кэша можно увидеть повышенный iowait. Неужто проклятый 12309? По хорошему надо поприбивать все сколько-нибудь активно читающие/пишущие процессы на время теста.
sentaus
так что именно отредактировать? пжл приведи корректный скрипт.
Еще есть предложение чтоб сперва шел бенч НЕ шифрованного раздела, а потом уже замеры по алгоритмам. Так проще ориентироваться в происходящем. Сам в скриптах не силен, мне это не поднять.
У меня от теста к тесту плавала только скорость записи, чтение шло почти стабильно.
например? у меня чистая система, только поставил. запускал из под терминала в xfce, параллельно ничего не было.
1)Добавьте sleep 5 после строчки "echo 3 >/proc/sys/vm/drop_caches":
2) Отключите swap совсем
3) иксы для теста тоже лучше бы потушить, хоть и xfce не страдает прожорливостью
sentaus
выполнил все три пункта, вот результаты:
1-го прогона
3-го прогона
еще могу признаться что при установке для пробы зашифровал корневой раздел в блоуфиш, просто экспериментировал, но это другой раздел – sda5. Также имеются временные фс (я их не делал):
Какие есть еще предложения ?
Немного поиграл со скриптом на тему размера записываемого файла на диск, по умолчанию 1Гб, ставил 2,4 и 8 Гб — результаты теже, затем поменял размер блока был 1Мб, ставил 512Кб и 256Кб — картина таже, без изменений, blowfish рвет всех как тузик грелку. Что скажите ?
Какие есть недостатки у блоуфиш? длины ключа 256 хватит или надо больше ? (кстати пробовал задать в параметрах теста 448, скорость так и не просела ..)
Сам по себе этой стойкий шифр. Но по размеру блока он относится к 64-битным шифрам, что нехорошо при шифровании разделов большого размера.
Кое-что упоминалось здесь[link8], и здесь[link9] вторая часть ответа в коментарии.
Наконец, новые, улучшенные режимы XTS-PLAIN и XTS-BENBI гарантированно правильно работают только с AES. С другими шифрами они работать тоже будут, но нет никакой гарантии, что когда-нибудь после обновления вы сможете расшифровать данные на новой системе или что их реализация проверялась с другими шифрами (будет выдано сообщение, что тестовый вектор для такого сочетания шифра и режима неизвестен). Поэтому, в принципе XTS-PLAIN и XTS-BENBI использовать не рекомендуется пока они не устоялись (из них XTS-PLAIN уже устарел) или только для временных данных (шифрованный своп). CBC-ESSIV будет работать со всеми шифрами и это устоявшийся режим, его уязвимости некритичны.
Это похоже на реальные особенности ключеого расписания блуфиша — ключ не разворачивается для каждого раунда на лету, а получается заполнением массива путём исполнения раундовой функции над ключом за фиксированное число итераций, независимо от длины ключа. Это медленное и очень стойкое ключевое расписание, сейчас таких не проектируют (пытаются добиться стойкости не в ущерб производительности и затратам ресурсов при распараллеливании).
Мда, тогда из них остается туфиш.
Ну неужели нет чего нибудь по быстрее (и совместимого с luks)?
Это и так оптимальные по скорости и стойкости шифры. Если данные нужно хранить, то лучше не искать каких-то экзотических вариантов у которых может вообще не оказаться поддержки в будущем. Нормальные шифры по скорости не так уж сильно различаются. Может что-то в железе поменять, чем рисковать безопасностью ради незначительных софтовых оптимизаций?
Вот оно[link11].