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

StackOverflow https://stackoverflow.com/questions/118463

Вопрос

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

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

Это было полезно?

Решение

Да, чисто асимметричное шифрование намного медленнее, чем симметричные шифры (такие как 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 вынуждает вас проходить через множество сертификатов.Блокируйте криптоалгоритмы, подобные AES делай от этой проблемы тоже страдают, но без PKI AES не менее безопасен, чем RSA.

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

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

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

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

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

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

Используйте 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

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

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

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

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

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

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

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

Спасибо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top