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

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

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


person stevemac    schedule 23.09.2008    source источник


Ответы (7)


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

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

person Thilo    schedule 23.09.2008

На Macbook с OS X 10.5.5 и стандартной сборкой OpenSSL «скорость openssl» синхронизирует 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] меня и Нейт Лоусон, профессиональный криптограф, написал несколько лет назад. В нем эти моменты рассматриваются более подробно.

person tqbf    schedule 23.09.2008
comment
Похоже, ваша ссылка на запись больше не работает. - person skiwi; 15.09.2016
comment
RSA 1024 не обеспечивает безопасность AES-128. Вы не должны формировать свои собственные сообщения для примитива RSA; найти библиотеку, которая делает это правильно. Я не понимаю, что вы подразумеваете под параметрами в контексте RSA. Можете ли вы привести конкретный пример злых параметров для RSA? Криптография с открытым ключом на сегодняшний день является самой обычной криптографией, используемой в каждом HTTPS-запросе. Отказ от использования гибридного шифрования является необычным, и когда такие стандарты, как CMS или TLS, поддерживают его, обычно это второстепенная мысль, которая получает меньше внимания и с меньшей вероятностью будет поддерживаться в реализациях. - person erickson; 29.08.2019

Используйте подкоманду 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
person Cristian Ciupitu    schedule 23.09.2008

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

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

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

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

person Steve Jessop    schedule 23.09.2008

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

person stimms    schedule 23.09.2008

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

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

Спасибо.

person jjohn    schedule 23.09.2008

Да, гибридное шифрование, предлагаемое стандартизированными криптографическими схемами, такими как PGP, TLS и CMS, требует фиксированных затрат на производительность для каждого сообщения или сеанса. Насколько велико это влияние, зависит от выбранных алгоритмов и того, о какой операции вы говорите.

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

В ECC, поскольку одноранговые узлы выполняют одни и те же математические операции с ключами одинакового размера, операции более сбалансированы, чем в RSA. В интегрированной схеме шифрования можно сгенерировать эфемерный ключ EC и использовать его в алгоритме согласования ключей; это требует немного дополнительной работы для отправителя сообщения. Согласование ключей ECDH намного, намного медленнее, чем шифрование RSA, но намного быстрее, чем дешифрование RSA.

С точки зрения относительных чисел, расшифровка с помощью AES может быть в 100 000 раз быстрее, чем расшифровка с помощью RSA. С точки зрения абсолютных чисел, сильно зависящих от аппаратного обеспечения, AES может занять несколько наносекунд на блок, а RSA — миллисекунду или две. И это вызывает вопрос, зачем кому-то вообще использовать асимметричные алгоритмы?

Ответ заключается в том, что эти алгоритмы используются вместе для разных целей в гибридных схемах шифрования. Быстрые симметричные алгоритмы, такие как AES, используются для защиты самого сообщения, а медленные асимметричные алгоритмы, такие как RSA, в свою очередь, используются для защиты ключей, необходимых симметричным алгоритмам. Это то, что позволяет сторонам, которые никогда ранее не делились какой-либо секретной информацией, таким как вы и ваша поисковая система, безопасно общаться друг с другом.

person erickson    schedule 29.08.2019