Найти тему
Николай Пакулин

RSA vs Elliptic Curves: кто быстрее

Оглавление

Говорят, RSA - это вчерашний день, говорят, пользоваться нужно только эллиптическими кривыми. Но так ли плох алгоритм RSA, и в чём он может превосходить криптографию на эллиптических кривых?

Эллиптическая кривая над конечным полем
Эллиптическая кривая над конечным полем

Даже профессионалы согласны с тезисами о переходе на эллиптические кривые. Например, разработчики OpenSSL 1.1 в своей реализации TLS 1.3 поддерживают согласование ключей по схеме Диффи-Хеллмана только в группах точек эллиптических кривых.

В этой статье сравниваются скорости цифровой подписи RSA и в криптографии на эллиптических кривых. В сравнении участвовали RSA с разными размерами ключей, эллиптические кривые NIST и крученая кривая Эдвардса Ed25519. 256-битная кривая NIST - это prime256v1, 384-битная кривая - это secp384r1. Оказалось, что эллиптические кривые, несмотря на все ухищрения, заметно проигрывают RSA по производительности.

Команда для измерения скорости работы алгоритмов в OpenSSL v1.1.1:

openssl speed -seconds 5 -multi 12 ecdsap384 ecdsap256 ed25519 rsa2048 rsa3072 rsa4096

Ключ -multi 12 означает, что тест распараллеливается по 12 процессам.

Тест выполнялся на сервере с двумя процессорами Intel Core i7-6900K, всего 16 ядер или 32 потока.

Результат:

___________________sign______verify______sign/s___verify/s

rsa 2048 bits 0.000074s 0.000002s 13565.2 491119.6

rsa 3072 bits 0.000211s 0.000004s 4749.4 241443.6

rsa 4096 bits 0.000474s 0.000007s 2107.9 142365.4

_________________________________sign______verify___sign/s___verify/s

256 bits ecdsa (nistp256) 0.0000s 0.0000s 367450.0 124632.8

384 bits ecdsa (nistp384) 0.0001s 0.0001s 8689.6 11658.6

_________________________________sign______verify__sign/s_verify/s

253 bits EdDSA (Ed25519) infs 0.0000s 0.0 199860.0

В след за экспертами NIST авторы Википедии считают, что RSA с ключом 3078 бит соответствует эллиптической кривой над полем с характеристикой размером 256 бит: for example, a 256-bit elliptic curve public key should provide comparable security to a 3072-bit RSA public key.

Получается, RSA в два раза быстрее вычислений над эллиптической кривой. Вычисления над кривой Эдвардса более чем на 60% производительнее вычислений над эллиптической кривой, но всё равно не дотягивает до RSA.

Сравнение скорости вычислений над эллиптическими кривыми

Кривая NIST-P256 - оптимизирована для вычислений. Не столь оптимизированные кривые демонстрируют гораздо худшую производительность.

openssl speed -seconds 5 -multi 12 ecdsa

__________________________________sign_______verify___sign/s___verify/s

160 bits ecdsa (secp160r1) 0.0000s 0.0000s 37670.6 45366.0

192 bits ecdsa (nistp192) 0.0000s 0.0000s 31810.4 37388.2

224 bits ecdsa (nistp224) 0.0000s 0.0000s 144377.8 62316.2

256 bits ecdsa (nistp256) 0.0000s 0.0000s 371687.4 126473.8

384 bits ecdsa (nistp384) 0.0001s 0.0001s 8642.3 11592.7

521 bits ecdsa (nistp521) 0.0000s 0.0001s 26159.1 13212.0

163 bits ecdsa (nistk163) 0.0000s 0.0001s 35190.0 17787.6

233 bits ecdsa (nistk233) 0.0000s 0.0001s 25686.3 13051.2

283 bits ecdsa (nistk283) 0.0001s 0.0001s 15281.8 7771.4

409 bits ecdsa (nistk409) 0.0001s 0.0002s 9063.4 4639.9

571 bits ecdsa (nistk571) 0.0002s 0.0005s 4107.1 2100.7

163 bits ecdsa (nistb163) 0.0000s 0.0001s 33715.8 17045.4

233 bits ecdsa (nistb233) 0.0000s 0.0001s 24724.2 12527.3

283 bits ecdsa (nistb283) 0.0001s 0.0001s 14346.6 7357.8

409 bits ecdsa (nistb409) 0.0001s 0.0002s 8610.4 4385.6

571 bits ecdsa (nistb571) 0.0003s 0.0005s 3825.4 1955.1

256 bits ecdsa (brainpoolP256r1) 0.0000s 0.0000s 20270.2 23109.2

256 bits ecdsa (brainpoolP256t1) 0.0000s 0.0000s 20204.4 23975.8

384 bits ecdsa (brainpoolP384r1) 0.0001s 0.0001s 8629.0 10935.8

384 bits ecdsa (brainpoolP384t1) 0.0001s 0.0001s 8725.6 11745.3

512 bits ecdsa (brainpoolP512r1) 0.0002s 0.0001s 5925.0 7736.6

512 bits ecdsa (brainpoolP512t1) 0.0002s 0.0001s 6023.0 8170.6

Выводы

По производительности алгоритм RSA укладывает на обе лопатки алгоритмы цифровой подписи со сревнимой стойкостью.