2011-09-27 3 views
1

Для обеспечения целостности байтового потока можно концептуально использовать симметричную криптографию (например, HMAC с SHA-1) или асимметричную криптографию (например, цифровую подпись с RSA). Здравый смысл заключается в том, что асимметричная криптография намного дороже, чем использование симметричной криптографии. Тем не менее, я хотел бы иметь жесткие цифры и хотел бы знать, существуют ли эталоны набора для существующих криптографических библиотек (например, openssl), чтобы получить некоторые результаты измерений для симметричных и асимметричных алгоритмов криптографии. Число, которое я получаю от встроенного приложения «speedsl speed», может, к сожалению, не сравниваться друг с другом.Бенчмаркинг симметричной и асимметричной криптографии

Возможно, кто-то уже реализовал небольшой набор для сравнения?

Спасибо, Martin

+0

Я не знаю стандартный набор тестов, но основная работа для HMAC - это хеширование всего сообщения/потока, и это тоже нужно сделать для подписи. (Стоимость зависит линейно от размера сообщения/потока.) Кроме того, у вас есть модульное возведение в степень, что является дорогостоящей частью подписи (в зависимости от размера ключа). Таким образом, «насколько больше стоимость RSA, чем HMAC», будет зависеть от размера вашего сообщения. –

+0

Почему цифры 'openssl speed' не могут сравниваться друг с другом? Я использую их все время. –

+0

Я думаю, что они не могут сравниться с различными выходами симметричных и асимметричных операций. Для симметричных выходов выводятся в байтах в секунду, например: 'type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes' ' sha1 40851.46k 115649.56k 246194.34k 340589.23k 387393.93k' Но для асимметричного криптографического вывода заданные в знаках или проверках в секунду, например: 'знак подтверждения/s проверка/s' ' rsa 512 bits 0.000120s 0.000011s 8349.2 90190.5' Поэтому я даже не знаю, сколько байтов данных подписано. – taocp

ответ

1

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

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

Одним словом, вы не должны выбирать структуру своей криптосистемы на основе незначительных различий в производительности.

+0

Спасибо за ваш комментарий. Ну, я знаю об основных отличиях обоих прецедентов. Но, отбросив проблемы безопасного распространения ключей, у вас есть все эти два метода целостности - защитите сообщение: HMAC или цифровую подпись. В протоколе, который я использую, имеются блоки данных протокола длиной приблизительно 124 байта, и маршрутизатор должен иметь возможность обрабатывать тысячи сообщений одновременно. Я хочу использовать дешевую защиту целостности на основе HMAC, но я хотел бы поддержать предположение, что цифровая подпись намного дороже из-за сопоставимых измерений. – taocp

+0

@taocp Похоже, ваше приложение по своей сути лучше подходит для HMAC, чем цифровая подпись. Как я уже сказал в ответе, довольно тривиально продемонстрировать, что HMAC будет дешевле - модульное возведение в экспансию является _expensive_. –

2

Все алгоритмы цифровой подписи (RSA, DSA, ECDSA ...) начинаются с хеширования исходного потока с помощью хэш-функции; после этого используется только хэш-выход. Таким образом, асимптотическая стоимость подписи длинного потока данных такая же, как и асимптотическая стоимость хеширования того же потока. HMAC аналогичен в этом отношении: сначала вы вводите в хэш-функцию небольшой заголовок фиксированного размера, затем поток данных; и у вас есть дополнительная хэш-операция в конце, которая работает на небольшом входе фиксированного размера. Таким образом, асимптотическая стоимость HMACing длинного потока данных такая же, как и асимптотическая стоимость хэширования одного и того же потока.

Подводя итог, для достаточно длинного потока данных цифровая подпись и HMAC будут иметь одинаковую стоимость ЦП. Разница в скорости не будет заметной (сложная часть в конце цифровой подписи равна дороже, чем у HMAC, но простой ПК все равно сможет сделать это менее чем за миллисекунду).

Хеш-функция сама по себе может иметь значение, хотя, по крайней мере, если вы можете получить данные с высокой пропускной способностью. На типичном ПК вы можете надеяться на хэш-данные со скоростью до 300 МБ/с с SHA-1, но «только» 150 Мбайт/с с SHA-256. С другой стороны, хороший механический жесткий диск или гигабитный Ethernet вряд ли превысят скорость чтения 100 Мбайт/с, поэтому SHA-256 не будет узким местом здесь.

Смежные вопросы