Post-Quantum Algorithm Zoo — зоопарк постквантовых алгоритмов: размеры и скорость 100+ алгоритмов
Все 103 алгоритма из поставки liboqs, от стандартов NIST до кандидатов дополнительного отбора схем подписи: фильтруйте, сортируйте по размеру и выберите алгоритм для замера. Бенчмарк использует liboqs, скомпилированную в WebAssembly, работает в фоновом Web Worker на вашем устройстве и сравнивает результат с ECDSA P-256, Ed25519 или X25519, измеренными тем же способом.
100 % локально — код алгоритмов загружается с этого сайта, только когда вы запускаете замер, и выполняется в браузере; никакие сведения о вашем устройстве и результатах никуда не отправляются
103 алгоритма из liboqs 0.15.1: 38 механизмов инкапсуляции ключа и 65 схем подписи в 15 семействах.
ML-KEM-768
Размеры в сравнении с классическими алгоритмами
| Алгоритм | Открытый ключ |
|---|---|
| ML-KEM-768 | 1 184 Б |
| X25519 | 32 Б |
| Алгоритм | Подпись / шифртекст |
|---|---|
| ML-KEM-768 | 1 088 Б |
| X25519 | 32 Б |
Открытый ключ вместе с шифртекстом: в 35,5 раза больше, чем у X25519. Размеры классических алгоритмов указаны для необработанных кодировок: несжатые точки эллиптических кривых, r‖s для ECDSA, ключ PKCS #1 для RSA-2048.
- Стандартизован в FIPS 203 (август 2024 года). Именно этот KEM стоит внедрять: в TLS, SSH и HPKE уже определено, как его использовать.
Замер на этом устройстве
Замер выполняет генерацию ключей и инкапсуляцию и декапсуляцию в фоновом Web Worker, примерно до 3 секунд на каждую операцию, а для сравнения — те же операции для X25519. Каждый результат проверяется, поэтому неисправная сборка не сможет выдать быстрое, но неверное значение.
103 алгоритма из 103
| Алгоритм | Семейство | Статус | Уровень | Открытый ключ | Закрытый ключ | Подпись / шифртекст | Ключ + результат (логарифмическая шкала) |
|---|---|---|---|---|---|---|---|
| SLH-DSA | Стандарт NIST | 1 | 32 Б | 64 Б | 17 088 Б | ||
| SLH-DSA | Стандарт NIST | 1 | 32 Б | 64 Б | 7 856 Б | ||
| SLH-DSA | Стандарт NIST | 1 | 32 Б | 64 Б | 17 088 Б | ||
| SLH-DSA | Стандарт NIST | 1 | 32 Б | 64 Б | 7 856 Б | ||
| SLH-DSA | Стандарт NIST | 3 | 48 Б | 96 Б | 35 664 Б | ||
| SLH-DSA | Стандарт NIST | 3 | 48 Б | 96 Б | 16 224 Б | ||
| SLH-DSA | Стандарт NIST | 3 | 48 Б | 96 Б | 35 664 Б | ||
| SLH-DSA | Стандарт NIST | 3 | 48 Б | 96 Б | 16 224 Б | ||
| CROSS | Кандидат NIST | 1 | 54 Б | 32 Б | 9 120 Б | ||
| CROSS | Кандидат NIST | 1 | 54 Б | 32 Б | 11 980 Б | ||
| CROSS | Кандидат NIST | 1 | 54 Б | 32 Б | 8 960 Б | ||
| SLH-DSA | Стандарт NIST | 5 | 64 Б | 128 Б | 49 856 Б | ||
| SLH-DSA | Стандарт NIST | 5 | 64 Б | 128 Б | 29 792 Б | ||
| SLH-DSA | Стандарт NIST | 5 | 64 Б | 128 Б | 49 856 Б | ||
| SLH-DSA | Стандарт NIST | 5 | 64 Б | 128 Б | 29 792 Б | ||
| CROSS | Кандидат NIST | 1 | 77 Б | 32 Б | 13 152 Б | ||
| CROSS | Кандидат NIST | 1 | 77 Б | 32 Б | 18 432 Б | ||
| CROSS | Кандидат NIST | 1 | 77 Б | 32 Б | 12 432 Б | ||
| CROSS | Кандидат NIST | 3 | 83 Б | 48 Б | 22 464 Б | ||
| CROSS | Кандидат NIST | 3 | 83 Б | 48 Б | 26 772 Б | ||
| CROSS | Кандидат NIST | 3 | 83 Б | 48 Б | 20 452 Б | ||
| CROSS | Кандидат NIST | 5 | 106 Б | 64 Б | 40 100 Б | ||
| CROSS | Кандидат NIST | 5 | 106 Б | 64 Б | 48 102 Б | ||
| CROSS | Кандидат NIST | 5 | 106 Б | 64 Б | 36 454 Б | ||
| CROSS | Кандидат NIST | 3 | 115 Б | 48 Б | 29 853 Б | ||
| CROSS | Кандидат NIST | 3 | 115 Б | 48 Б | 41 406 Б | ||
| CROSS | Кандидат NIST | 3 | 115 Б | 48 Б | 28 391 Б | ||
| CROSS | Кандидат NIST | 5 | 153 Б | 64 Б | 53 527 Б | ||
| CROSS | Кандидат NIST | 5 | 153 Б | 64 Б | 74 590 Б | ||
| CROSS | Кандидат NIST | 5 | 153 Б | 64 Б | 50 818 Б | ||
| NTRU | Не выбран NIST | 1 | 699 Б | 935 Б | 699 Б | ||
| CRYSTALS-Kyber | Заменён | 1 | 800 Б | 1 632 Б | 768 Б | ||
| ML-KEM | Стандарт NIST | 1 | 800 Б | 1 632 Б | 768 Б | ||
| Falcon | Выбран NIST, стандарт в разработке | 1 | 897 Б | 1 281 Б | ≤ 752 Б | ||
| Falcon | Выбран NIST, стандарт в разработке | 1 | 897 Б | 1 281 Б | 666 Б | ||
| NTRU | Не выбран NIST | 3 | 930 Б | 1 234 Б | 930 Б | ||
| SNOVA | Кандидат NIST | 1 | 1 016 Б | 48 Б | 248 Б | ||
| SNOVA | Кандидат NIST | 1 | 1 016 Б | 48 Б | 248 Б | ||
| SNOVA | Кандидат NIST | 1 | 1 016 Б | 36 848 Б | 248 Б | ||
| SNOVA | Кандидат NIST | 1 | 1 016 Б | 36 848 Б | 248 Б | ||
| NTRU | Не выбран NIST | 3 | 1 138 Б | 1 450 Б | 1 138 Б | ||
| Streamlined NTRU Prime | Не выбран NIST | 3 | 1 158 Б | 1 763 Б | 1 039 Б | ||
| CRYSTALS-Kyber | Заменён | 3 | 1 184 Б | 2 400 Б | 1 088 Б | ||
| ML-KEM | Стандарт NIST | 3 | 1 184 Б | 2 400 Б | 1 088 Б | ||
| NTRU | Не выбран NIST | 5 | 1 230 Б | 1 590 Б | 1 230 Б | ||
| ML-DSA | Стандарт NIST | 2 | 1 312 Б | 2 560 Б | 2 420 Б | ||
| MAYO | Кандидат NIST | 1 | 1 420 Б | 24 Б | 454 Б | ||
| CRYSTALS-Kyber | Заменён | 5 | 1 568 Б | 3 168 Б | 1 568 Б | ||
| ML-KEM | Стандарт NIST | 5 | 1 568 Б | 3 168 Б | 1 568 Б | ||
| SNOVA | Кандидат NIST | 1 | 1 579 Б | 48 Б | 379 Б | ||
| Falcon | Выбран NIST, стандарт в разработке | 5 | 1 793 Б | 2 305 Б | ≤ 1 462 Б | ||
| Falcon | Выбран NIST, стандарт в разработке | 5 | 1 793 Б | 2 305 Б | 1 280 Б | ||
| NTRU | Не выбран NIST | 5 | 1 842 Б | 2 366 Б | 1 842 Б | ||
| ML-DSA | Стандарт NIST | 3 | 1 952 Б | 4 032 Б | 3 309 Б | ||
| HQC | Выбран NIST, стандарт в разработке | 1 | 2 249 Б | 2 305 Б | 4 433 Б | ||
| SNOVA | Кандидат NIST | 1 | 2 320 Б | 48 Б | 165 Б | ||
| NTRU | Не выбран NIST | 5 | 2 401 Б | 2 983 Б | 2 401 Б | ||
| ML-DSA | Стандарт NIST | 5 | 2 592 Б | 4 896 Б | 4 627 Б | ||
| SNOVA | Кандидат NIST | 3 | 2 716 Б | 48 Б | 454 Б | ||
| MAYO | Кандидат NIST | 3 | 2 986 Б | 32 Б | 681 Б | ||
| SNOVA | Кандидат NIST | 3 | 4 112 Б | 48 Б | 376 Б | ||
| HQC | Выбран NIST, стандарт в разработке | 3 | 4 522 Б | 4 586 Б | 8 978 Б | ||
| MAYO | Кандидат NIST | 1 | 4 912 Б | 24 Б | 186 Б | ||
| MAYO | Кандидат NIST | 5 | 5 554 Б | 40 Б | 964 Б | ||
| SNOVA | Кандидат NIST | 5 | 6 006 Б | 48 Б | 286 Б | ||
| HQC | Выбран NIST, стандарт в разработке | 5 | 7 245 Б | 7 317 Б | 14 421 Б | ||
| SNOVA | Кандидат NIST | 5 | 8 016 Б | 48 Б | 576 Б | ||
| FrodoKEM | Не выбран NIST | 1 | 9 616 Б | 19 888 Б | 9 752 Б | ||
| FrodoKEM | Не выбран NIST | 1 | 9 616 Б | 19 888 Б | 9 752 Б | ||
| eFrodoKEM | Не выбран NIST | 1 | 9 616 Б | 19 888 Б | 9 720 Б | ||
| eFrodoKEM | Не выбран NIST | 1 | 9 616 Б | 19 888 Б | 9 720 Б | ||
| SNOVA | Кандидат NIST | 3 | 9 842 Б | 48 Б | 124 Б | ||
| FrodoKEM | Не выбран NIST | 3 | 15 632 Б | 31 296 Б | 15 792 Б | ||
| FrodoKEM | Не выбран NIST | 3 | 15 632 Б | 31 296 Б | 15 792 Б | ||
| eFrodoKEM | Не выбран NIST | 3 | 15 632 Б | 31 296 Б | 15 744 Б | ||
| eFrodoKEM | Не выбран NIST | 3 | 15 632 Б | 31 296 Б | 15 744 Б | ||
| FrodoKEM | Не выбран NIST | 5 | 21 520 Б | 43 088 Б | 21 696 Б | ||
| FrodoKEM | Не выбран NIST | 5 | 21 520 Б | 43 088 Б | 21 696 Б | ||
| eFrodoKEM | Не выбран NIST | 5 | 21 520 Б | 43 088 Б | 21 632 Б | ||
| eFrodoKEM | Не выбран NIST | 5 | 21 520 Б | 43 088 Б | 21 632 Б | ||
| SNOVA | Кандидат NIST | 5 | 31 266 Б | 48 Б | 178 Б | ||
| UOV | Кандидат NIST | 1 | 43 576 Б | 237 896 Б | 128 Б | ||
| UOV | Кандидат NIST | 1 | 43 576 Б | 32 Б | 128 Б | ||
| UOV | Кандидат NIST | 1 | 66 576 Б | 348 704 Б | 96 Б | ||
| UOV | Кандидат NIST | 1 | 66 576 Б | 32 Б | 96 Б | ||
| UOV | Кандидат NIST | 3 | 189 232 Б | 1 044 320 Б | 200 Б | ||
| UOV | Кандидат NIST | 3 | 189 232 Б | 32 Б | 200 Б | ||
| Classic McEliece | Не выбран NIST | 1 | 261 120 Б | 6 492 Б | 96 Б | ||
| Classic McEliece | Не выбран NIST | 1 | 261 120 Б | 6 492 Б | 96 Б | ||
| UOV | Кандидат NIST | 1 | 278 432 Б | 237 896 Б | 128 Б | ||
| UOV | Кандидат NIST | 1 | 412 160 Б | 348 704 Б | 96 Б | ||
| UOV | Кандидат NIST | 5 | 446 992 Б | 2 436 704 Б | 260 Б | ||
| UOV | Кандидат NIST | 5 | 446 992 Б | 32 Б | 260 Б | ||
| Classic McEliece | Не выбран NIST | 3 | 524 160 Б | 13 608 Б | 156 Б | ||
| Classic McEliece | Не выбран NIST | 3 | 524 160 Б | 13 608 Б | 156 Б | ||
| Classic McEliece | Не выбран NIST | 5 | 1 044 992 Б | 13 932 Б | 208 Б | ||
| Classic McEliece | Не выбран NIST | 5 | 1 044 992 Б | 13 932 Б | 208 Б | ||
| Classic McEliece | Не выбран NIST | 5 | 1 047 319 Б | 13 948 Б | 194 Б | ||
| Classic McEliece | Не выбран NIST | 5 | 1 047 319 Б | 13 948 Б | 194 Б | ||
| UOV | Кандидат NIST | 3 | 1 225 440 Б | 1 044 320 Б | 200 Б | ||
| Classic McEliece | Не выбран NIST | 5 | 1 357 824 Б | 14 120 Б | 208 Б | ||
| Classic McEliece | Не выбран NIST | 5 | 1 357 824 Б | 14 120 Б | 208 Б | ||
| UOV | Кандидат NIST | 5 | 2 869 440 Б | 2 436 704 Б | 260 Б |
What is in the zoo
The zoo lists every key encapsulation mechanism and signature scheme of
liboqs 0.15.1, the C library of the Open Quantum Safe project, as packaged for the web by
@oqs/liboqs-js: 103 parameter sets in 15 families. For each one you see the sizes that decide whether it fits
a protocol — public key, private key, signature or ciphertext — its NIST security level, the hard problem it
rests on, and how far it has come in standardization. Pick any of them and the lab measures it on your own device
against the classical algorithm it would replace.
Where each family stands
The status column follows NIST's post-quantum project as of 20 October 2026:
- Standards. ML-KEM (FIPS 203), ML-DSA (FIPS 204) and SLH-DSA (FIPS 205), final since August 2024. These are the algorithms to deploy, and the ones TLS, X.509, JOSE and HPKE now define.
- Selected, standard in preparation. Falcon, which NIST is turning into FN-DSA (FIPS 206, not final yet; liboqs still ships round-3 Falcon, which FN-DSA will not match byte for byte), and HQC, the code-based KEM NIST picked in March 2025 (NIST IR 8545) as a backup resting on a different problem than ML-KEM.
- Candidates. MAYO, UOV, SNOVA and CROSS are in NIST's process for additional signatures, which looks for schemes with short signatures or assumptions other than lattices. None is a standard; their parameters may still change.
- Not selected. Classic McEliece, FrodoKEM, NTRU and Streamlined NTRU Prime were evaluated and not
chosen by NIST. That is not a verdict of insecurity: Germany's BSI recommends FrodoKEM and Classic McEliece for
conservative deployments, both are part of an ISO/IEC 18033-2 amendment, and OpenSSH used
sntrup761x25519-sha512before it moved to ML-KEM. - Superseded. CRYSTALS-Kyber as submitted to round 3. FIPS 203 changed it, so Kyber and ML-KEM do not interoperate; liboqs keeps it for existing deployments.
Sizes first
For most systems the bytes matter more than the microseconds. A TLS handshake with X25519MLKEM768 carries 2,336 bytes for the key exchange instead of 64; an ML-DSA-65 signature is 3,309 bytes against 64 for Ed25519. The families spread over four orders of magnitude: UOV signatures start at 96 bytes, with public keys of up to 2.8 MB, Classic McEliece ciphertexts are under 210 bytes with public keys of up to 1.3 MB, and SLH-DSA keys are 32 to 64 bytes with signatures of up to 49,856. The table's last column puts public key plus signature or ciphertext on a logarithmic scale, the only one on which all of them fit. Sort by it to find the smallest exchange of each kind.
How the benchmark measures
Measuring downloads one liboqs module from this site — JavaScript with the WebAssembly embedded, about 18 to 55 KB
when compressed — and runs it in a Web Worker, so the page stays responsive even while Classic McEliece generates a
megabyte-sized key. For each operation the runner first calibrates a batch: how many operations it takes to
last at least 5 milliseconds, because browsers coarsen performance.now() to 0.1 ms on pages that are not
cross-origin isolated. It then times eleven batches and reports the median per operation, within a budget of
three seconds per operation, so the slowest sets report fewer samples and say so.
Every result is checked while it is measured: each signature must verify, a tampered signature must not, and each decapsulation must recover the encapsulated secret. A miscompiled module cannot report a fast but wrong number. The sizes the module produces are compared with the registry too.
The classical baselines run the same way, through WebCrypto (the browser's native implementation) or through
the @noble/curves JavaScript library: ECDSA P-256 and Ed25519 for signatures, X25519 for key
encapsulation, used as a KEM by sending a fresh ephemeral public key. Where the browser's WebCrypto lacks Ed25519
or X25519, the JavaScript version stands in and the page says so.
What stays local
The zoo takes no input of yours: keys are generated inside the worker for the measurement and discarded. The modules come from this site, and neither your device's details nor the results are sent anywhere. A share link records only the selected algorithm and the filters.
From the zoo to the standards
To use the standardized algorithms rather than time them, the post-quantum signature lab signs and verifies ML-DSA, SLH-DSA and Falcon with every FIPS option, and the ML-KEM lab runs the TLS hybrids. FN-DSA vs ML-DSA and ML-DSA vs SLH-DSA weigh the signature families against each other, and Post-quantum migration in 2026 explains which deadlines apply.