В чем разница в производительности pki для симметричного шифрования?

мы ищем, чтобы сделать некоторые тяжелые требования безопасности на нашем проекте, и нам нужно сделать много шифрования, которое является высокоэффективным.

Я думаю, что знаю, что PKI намного медленнее и сложнее, чем симметричное шифрование, но я не могу найти числа, чтобы поддержать мои чувства.

6 ответов


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

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


на Macbook под управлением OS X 10.5.5 и фондовой сборки OpenSSL, "openssl speed" часы AES-128-CBC на 46,000 1024 бит блоков в секунду. В том же поле 1024 бит RSA при 169 подписях в секунду. AES-128-CBC-это алгоритм блочного шифрования "учебника", а RSA 1024-алгоритм открытого ключа "учебника". Это яблоки к апельсинам, но ответ: RSA намного, намного медленнее.

Это не то, почему вы не должны использовать шифрование с открытым ключом, однако. Вот реальные причины:

  1. криптографические операции с открытым ключом не предназначены для шифрования необработанных данных. Алгоритмы Диффи-Хеллмана и RSA были разработаны как способ обмена ключами на алгоритмы блочного шифрования. Так, например, вы бы использовали безопасный генератор случайных чисел для генерации 128-битного случайного ключа для AES и зашифровали эти 16 байтов с помощью RSA.

  2. алгоритмы, такие как RSA, намного менее "удобны для пользователя", чем AES. С помощью случайного ключа блок открытого текста, который вы передаете AES, будет случайным для всех без ключа. Это на самом деле не так с RSA, который --- больше, чем AES --- просто математическое уравнение. Таким образом, в дополнение к правильному хранению и управлению ключами, вы должны быть очень осторожны с тем, как вы форматируете блоки открытого текста RSA, или вы в конечном итоге с уязвимостями.

  3. открытый ключ не работает без управления ключами инфраструктура. Если у вас нет схемы проверки открытых ключей, злоумышленники могут заменить свои собственные пары клавиш на реальные, чтобы запустить атаки "человек в середине". Вот почему SSL заставляет вас проходить через rigamarole сертификатов. Блокируйте криптографические алгоритмы, такие как AES do страдают от этой проблемы тоже, но без PKI, AES не менее безопасен, чем RSA.

  4. криптографические операции с открытым ключом подвержены большей реализации уязвимостей, чем AES. Например, обе стороны транзакции RSA должны договориться о параметры, которые являются числами, подаваемыми в уравнение RSA. Есть злые ценности, которые злоумышленники могут заменить, чтобы молча отключить шифрование. То же самое касается Диффи Хеллмана и тем более эллиптической кривой. Другим примером является уязвимость подделки подписи RSA, которая произошла 2 года назад в нескольких высококачественных реализациях SSL.

  5. используя открытый ключ-это доказательство того, что вы делаете что-то "необычное". Необычным является именно то, что вы никогда хотите быть с криптографией; помимо только алгоритмов, crypto конструкции проверяются и проверяются в течение многих лет, прежде чем они считаются безопасными.

для наших клиентов, которые хотят использовать криптографию в своих приложениях, мы сделать две рекомендации:

  • для "данных", использовать PGP. Действительно! PGP был избит более десяти лет и считается безопасным от глупых ошибок реализации. Существуют открытые исходные и коммерческие варианты.

  • для "данных в полете" используйте TLS/SSL. Ни один протокол безопасности в мире не понимается и не тестируется лучше, чем TLS; финансовые учреждения повсюду принимают его как безопасный метод перемещения наиболее конфиденциальных данных.

здесь достойная запись [matasano.com мы с Нейтом Лоусоном, профессиональным криптографом, написали несколько лет назад. В нем эти моменты освещаются более подробно.


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

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

последний раз, когда я тестировал это, проверяя цепочку из 3 или около того сертификатов X. 509 [edit to add: и данные, которые они подписывали] занимали долю секунды на руке, работающей на 100 МГц или около того (усредненной по многим повторениям, очевидно). Не помню, насколько маленький - не ничтожный, но меньше секунды.

Извините, я не могу вспомнить точные детали, но резюме заключается в том, что, если вы не находитесь в очень ограниченной системе или не делаете много шифрования (например, если вы хотите принять как можно больше SSL-соединений в секунду), одобренное NIST асимметричное шифрование методы быстрого.


используйте OpenSSL speed команда для проверки алгоритмов и убедитесь сами.

[dave@hal9000 ~]$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 26126940 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 7160075 aes-128 cbc's in 3.00s
...
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-128 cbc     139343.68k   152748.27k   155215.70k   155745.61k   157196.29k


[dave@hal9000 ~]$ openssl speed rsa2048
Doing 2048 bit private rsa's for 10s: 9267 2048 bit private RSA's in 9.99s
Doing 2048 bit public rsa's for 10s: 299665 2048 bit public RSA's in 9.99s
...
                  sign    verify    sign/s verify/s
rsa 2048 bits 0.001078s 0.000033s    927.6  29996.5

по-видимому, это 1000x хуже. (http://windowsitpro.com/article/articleid/93787/symmetric-vs-asymmetric-ciphers.html) - ... Но если вы действительно не работаете с большим количеством данных, это не будет иметь значения. Что вы можете сделать, это использовать асимметричное шифрование для обмена симметричным ключом шифрования.


возможно, вы можете добавить некоторые детали о своем проекте, чтобы получить более качественные ответы. Что ты пытаешься обезопасить? От кого? Если бы вы могли объяснить требования вашей безопасности, вы получите гораздо лучший ответ. Производительность не имеет большого значения, если механизм шифрования не защищает то, что вы думаете.

например, сертификаты X509 являются стандартным способом защиты конечных точек клиента/сервера. PGP armoring может использоваться для защиты файлов лицензий. Для простоты цепочка блоков шифрования с Blowfish (и множеством других шифров) проста в использовании в Perl или Java, если вы контролируете обе конечные точки.

спасибо.