Практический выбор алгоритма шифрования

Недавно озадачился проблемой шифрования данных на hdd. Много искал по инету, но в итоге нашел совсем мало, а бенчмарков производительности нет совсем. Решил спросить совета тут. Итак используемая платформа: ноутбук Intel Core i3-370, 6 Gb RAM, обычный HDD (не ssd), OS Linux Debian 7 х64.
Думаю шифровать вместе с системой, использовать dm-crypt, в нем есть алгоритмы AES, Blowfish, Twofish и Serpent (при установке предлагает только их). Но вот что из них выбрать? какой будет работать быстрее на данном железе? большая ли будет разница в производительности межу х64 и х86 ?
как можно оценить скорость их работы, может есть какой тест ?


Комментарии
— unknown (10/03/2012 15:25, исправлен 10/03/2012 15:25)   

Core i3 неподдерживает инструкции AES-NI (который в стабильном Debian, впрочем, временно выкинули), так что почти без разницы. Если всё-таки выжимать максимум по скорости, лучше всё-равно выбрать AES, Twofish будет сравним. X-64 должно быть лучше, но не сказать насколько. Blowfish — это 64-битный шифр по размеру блока, его использование для шифрования современных больших дисков и с современными режимами дискового шифрования нежелательно (некритично конечно, но устарелое решение).

Гость (10/03/2012 17:15)   
unknown
AES, его хорошо пиарят и впаривают во все что только можно ...
Моя паранойя в него не верит, есть в штатах такое понятие как ограничение технологий на экспорт, часто то одно, то другое не дают вывозить или юзать, а тут целый алгоритм идеального шифрования на раздаче всем подряд :)
Хочется чего то другого
— sentaus (10/03/2012 17:17, исправлен 10/03/2012 17:17)   
есть в штатах такое понятие как ограничение технологий на экспорт,

А тот факт, что сей алгоритм разработан в Бельгии, шаблон не сильно рвёт? :)

Гость (10/03/2012 18:08)   
не, не рвет. Но мы отошли от главной темы — технические характеристики этих шифров, а именно скорости их работы.
вроде читал что в виндовой версии трукрипт есть бенч алгоритмов, может кто его тестил ?
— unknown (10/03/2012 18:09)   

которое давно благополучно умерло в отношении почти всех криптотехнологий, по крайней мере не только самого AES, но и других блочных шифров. Можете выбрать исконно американские Blowfish/Twofish или условно английско-датско-израильский Serpent. Если быстродействие решает, то за вычетом AES выбор Twofish вполне адекватен.
Гость (10/03/2012 18:39)   
Я не хочу ни кого обидеть, но хочется видеть конкретику. все говорят абстрактно: этот быстрее, а тот медленнее, но никто не говорит в цифрах.
Гость (10/03/2012 18:39)   

Это очень давно было.


Это от незнания матчасти. Это ж результат открытого конкурса НИСТ. Вам не нравится Rijndael (AES)? Предложите свой шифр, который будет лучше. Обсуждалось много раз, в т.ч. в /comment3301[link1] и /comment32619[link2].


Не говорите ему, что Keccak — очень вероятный следующий финалист[link3], тоже разработан в Бельгии.


Тоже много раз обсуждалось, + нагуглить более, чем реально. Общие идеи можно уловить с /comment39601[link4], /comment17615[link5] и отсюда[link6].
Гость (10/03/2012 18:47)   

На форуме был результат бенчмарков в картинках, но найти его будет затруднительно. А может и самой картинки уже нет в том посте. Есть тулзы (название не помню), которые делают такой бенчмарк под Linux — можно всегда всё проверить самому и на конкретном железе.
— unknown (10/03/2012 19:05, исправлен 10/03/2012 19:09)   

http://blog.wpkg.org/2009/04/2.....k-for-dm-crypt-luks/[link7]
+все комменты к тому блогпосту гляньте.


The benchmarks were made with dd (bs=64k, 3 GB read), repeated several times; caches were dropped before each test.
Гость (10/03/2012 22:40)   
unknown
Большое спасибо, это и искал. Теперь осталась только непонятка с архитектурой -стоит ли переходить на х64 или нет ?
Читал как то одну интересную статейку (ссылку сейчас не найду, да и всех подробностей ее не помню) на тему сравнения винды хр, висты и семеры в х86 и х64 редакциях на ноуте, на тему кто больше протянет на батарее. так в х86 жилось по дольше на хр до 30мин, на висте разница меньше, а семера шла почти вровень. Интересно как с этим дело в линуксе.
— unknown (10/03/2012 23:05)   
По быстродействию стоит. Из-за не очень гладкой поддержки ACPI в ноутах Linux может проигрывать винде по экономичности работы от батареи, это должно влиять больше, чем разрядность. Но это уже вопрос за пределы тематики форума, чисто по криптоалгоритмам влияние на быстродействие должно быть (кроме, возможно, старых, таких как blowfish).
Гость (13/03/2012 12:48, исправлен 13/03/2012 14:29)   

unknown
решил все таки проверить сам, использовал скрипт Heikki Salokanto из блогпоста что ты дал. Debian testing x64, ядро 3.2. Вот что получилось:
1. На RAM диске:

2. На реальном разделе hdd:

делал по 3 прохода, цифры записи немного различались, чтение почти стабильно. Как интерпретировать полученные результаты ?
Почему скорость записи намного больше скорости чтения ?
Почему на hdd все так сильно просело и старый добрый blowfish всех порвал? Может скрипт работает криво или я что делал не так ?

— sentaus (13/03/2012 13:26, исправлен 13/03/2012 13:27)   
Почему скорость записи намного больше скорости чтения ?

Это интересный вопрос, надо бы для начала сам скрипт посмотреть, но у меня он почему-то с той странифки не грузится.


Почему на hdd все так сильно просело

А здесь собственно диск стал узким местом,различия в скорости незначительны. Победа blowfish странна, думаю, надо искать что-то вроде неверно сброшенного кэша, т.е. опять скрипт смотреть.

Гость (13/03/2012 14:19, исправлен 13/03/2012 14:29)   

— unknown (13/03/2012 14:41)   
У AES конечно есть небольшая особенность: скорость расшифрования меньше скорости зашифрования (проявляется естественно не во всех режимах шифрования). Но это не должно проявляться столь значительно и для фишей такого быть не должно. Подозреваю, что гиг на запись вполне себе способен кэшироваться при современных размерах памяти.
проверялось именно на разделе или записывалось в файл поверх файловой системы на разделе?
Гость (13/03/2012 15:20)   
именно на разделе, как раз был пустой, просто указав в скрипте BLOCKDEV=/dev/sda4 .
Так как все таки правильно провести эксперимент ?
— sentaus (13/03/2012 23:26, исправлен 13/03/2012 23:26)   
Подозреваю, что гиг на запись вполне себе способен кэшироваться при современных размерах памяти.

Там в скрипте сделан сброс кэша. Единственное, было бы правильно sleep небольшой после этого поставить, операция-то вроде несинхронная.


Вообще, соотношение скоростей чтения/записи от теста к тесту гуляет довольно сильно, а после сброса кэша можно увидеть повышенный iowait. Неужто проклятый 12309? По хорошему надо поприбивать все сколько-нибудь активно читающие/пишущие процессы на время теста.

Гость (14/03/2012 09:23)   
sentaus
было бы правильно sleep небольшой после этого поставить

так что именно отредактировать? пжл приведи корректный скрипт.
Еще есть предложение чтоб сперва шел бенч НЕ шифрованного раздела, а потом уже замеры по алгоритмам. Так проще ориентироваться в происходящем. Сам в скриптах не силен, мне это не поднять.
соотношение скоростей чтения/записи от теста к тесту гуляет довольно сильно

У меня от теста к тесту плавала только скорость записи, чтение шло почти стабильно.
надо поприбивать все сколько-нибудь активно читающие/пишущие процессы на время теста

например? у меня чистая система, только поставил. запускал из под терминала в xfce, параллельно ничего не было.
— sentaus (14/03/2012 19:19)   
1)Добавьте sleep 5 после строчки "echo 3 >/proc/sys/vm/drop_caches":


2) Отключите swap совсем


3) иксы для теста тоже лучше бы потушить, хоть и xfce не страдает прожорливостью
Гость (15/03/2012 15:30)   
sentaus
выполнил все три пункта, вот результаты:
1-го прогона

3-го прогона


еще могу признаться что при установке для пробы зашифровал корневой раздел в блоуфиш, просто экспериментировал, но это другой раздел – sda5. Также имеются временные фс (я их не делал):

Какие есть еще предложения ?
Гость (16/03/2012 14:19)   
Немного поиграл со скриптом на тему размера записываемого файла на диск, по умолчанию 1Гб, ставил 2,4 и 8 Гб — результаты теже, затем поменял размер блока был 1Мб, ставил 512Кб и 256Кб — картина таже, без изменений, blowfish рвет всех как тузик грелку. Что скажите ?
Какие есть недостатки у блоуфиш? длины ключа 256 хватит или надо больше ? (кстати пробовал задать в параметрах теста 448, скорость так и не просела ..)
— unknown (16/03/2012 15:29, исправлен 16/03/2012 15:32)   

Сам по себе этой стойкий шифр. Но по размеру блока он относится к 64-битным шифрам, что нехорошо при шифровании разделов большого размера.
Кое-что упоминалось здесь[link8], и здесь[link9] вторая часть ответа в коментарии.


Наконец, новые, улучшенные режимы XTS-PLAIN и XTS-BENBI гарантированно правильно работают только с AES. С другими шифрами они работать тоже будут, но нет никакой гарантии, что когда-нибудь после обновления вы сможете расшифровать данные на новой системе или что их реализация проверялась с другими шифрами (будет выдано сообщение, что тестовый вектор для такого сочетания шифра и режима неизвестен). Поэтому, в принципе XTS-PLAIN и XTS-BENBI использовать не рекомендуется пока они не устоялись (из них XTS-PLAIN уже устарел) или только для временных данных (шифрованный своп). CBC-ESSIV будет работать со всеми шифрами и это устоявшийся режим, его уязвимости некритичны.


Это похоже на реальные особенности ключеого расписания блуфиша — ключ не разворачивается для каждого раунда на лету, а получается заполнением массива путём исполнения раундовой функции над ключом за фиксированное число итераций, независимо от длины ключа. Это медленное и очень стойкое ключевое расписание, сейчас таких не проектируют (пытаются добиться стойкости не в ущерб производительности и затратам ресурсов при распараллеливании).

Гость (16/03/2012 19:51)   
Мда, тогда из них остается туфиш.
Ну неужели нет чего нибудь по быстрее (и совместимого с luks)?
— unknown (16/03/2012 21:34, исправлен 16/03/2012 21:36)   

Это и так оптимальные по скорости и стойкости шифры. Если данные нужно хранить, то лучше не искать каких-то экзотических вариантов у которых может вообще не оказаться поддержки в будущем. Нормальные шифры по скорости не так уж сильно различаются. Может что-то в железе поменять, чем рисковать безопасностью ради незначительных софтовых оптимизаций?

Гость (17/03/2012 21:40)   

На Intel Core i5 660 скорость шифрования данных для AES составляет 3261 Мб/с против 283 Мб/с у TrueCrypt. Вероятно, столь большая разница при использовании AES достигается за счет использования инструкций AES-NI. Для сравнения — разница при использовании алгоритмов Twofish и Serpent не столь значительна [link10]


Вот оно[link11].

Ссылки
[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