Skip to content

Latest commit

 

History

History
83 lines (64 loc) · 8.5 KB

File metadata and controls

83 lines (64 loc) · 8.5 KB

Supported Algorithms in QUBIP's Firefox Nightly

This README summarizes all the post-quantum and hybrid cryptographic algorithms currently supported by the latest QUBIP's Firefox Nightly version.

Key Encapsulation Mechanisms (KEMs)

Currently, x25519mlkem768 is natively supported in Firefox as the only PQ/T Hybrid key exchange group in the TLS handshake.

The hybrid key exchange is handled internally by NSS, with its own application-level combiner implementation to delegate the underlying operations (i.e., traditional X25519 and post-quantum ML-KEM-768) to PKCS#11 tokens.

The IANA TLS Supported Groups identifier for this group is 0x11EC (4588), and upstream Firefox already advertises this codepoint during TLS handshakes.

In terms of PKCS#11 support, ML-KEM-768 is defined in upstream Firefox (and NSS) as a vendor-defined CKM mechanism in the NSS namespace:

  • CKM_NSS_ML_KEM: 0xCE534381
  • CKM_NSS_KEY_PAIR_GEN: 0xCE534380
  • CKP_NSS_ML_KEM_768: 0xCE534352
  • CKK_NSS_ML_KEM: 0xCE534356

Digital Signatures

Algorithm OID IANA TLS SignatureScheme ID CKM_* CKM_*_KEY_PAIR_GEN CKK_* CKP_* PQ/T Hybrid Notes
ML-DSA-44 2.16.840.1.101.3.4.3.17 0x0904 (2308) 0xCE534546 0xCE534545 0xCE534544 0x00000001 ❌ Pure-PQC CKM_* and CKK_* are NISEC vendor-defined
ML-DSA-65 2.16.840.1.101.3.4.3.18 0x0905 (2309) 0xCE534546 0xCE534545 0xCE534544 0x00000002 ❌ Pure-PQC CKM_* and CKK_* are NISEC vendor-defined
ML-DSA-87 2.16.840.1.101.3.4.3.19 0x0906 (2310) 0xCE534546 0xCE534545 0xCE534544 0x00000003 ❌ Pure-PQC CKM_* and CKK_* are NISEC vendor-defined
MLDSA65-Ed25519-SHA512 1.3.6.1.5.5.7.6.48 0x090B (2315) 0xCE53454C 0xCE53454B 0xCE53454A None ✅ Composite draft-ietf-lamps-pq-composite-sigs@13 Composite, draft-13
SLH-DSA-SHAKE-128S 2.16.840.1.101.3.4.3.26 0x0917 (2327) (disabled) 0xCE534549 0xCE534548 0xCE534547 0x00000002 ❎ Exempt CKM_* and CKK_* are NISEC vendor-defined
SLH-DSA-SHAKE-128F 2.16.840.1.101.3.4.3.27 0x0918 (2328) (disabled) 0xCE534549 0xCE534548 0xCE534547 0x00000004 ❎ Exempt CKM_* and CKK_* are NISEC vendor-defined
SLH-DSA-SHAKE-192S 2.16.840.1.101.3.4.3.28 0x0919 (2329) (disabled) 0xCE534549 0xCE534548 0xCE534547 0x00000006 ❎ Exempt CKM_* and CKK_* are NISEC vendor-defined
SLH-DSA-SHAKE-192F 2.16.840.1.101.3.4.3.29 0x091A (2330) (disabled) 0xCE534549 0xCE534548 0xCE534547 0x00000008 ❎ Exempt CKM_* and CKK_* are NISEC vendor-defined
SLH-DSA-SHAKE-256S 2.16.840.1.101.3.4.3.30 0x091B (2331) (disabled) 0xCE534549 0xCE534548 0xCE534547 0x0000000A ❎ Exempt CKM_* and CKK_* are NISEC vendor-defined
SLH-DSA-SHAKE-256F 2.16.840.1.101.3.4.3.31 0x091C (2332) (disabled) 0xCE534549 0xCE534548 0xCE534547 0x0000000C ❎ Exempt CKM_* and CKK_* are NISEC vendor-defined

Note on PKCS#11 identifiers

Currently all the PKCS#11 identifiers are vendor-defined in the NISEC namespace constructed as follows:

#define CKM_VENDOR_DEFINED 0X80000000
#define NISEC_VENDOR_NSS 0x4E534543

#define CKM_NISEC (CKM_VENDOR_DEFINED | NISEC_VENDOR_NSS)
#define CKP_NISEC (CKP_VENDOR_DEFINED | NISEC_VENDOR_NSS)
#define CKK_NISEC (CKK_VENDOR_DEFINED | NISEC_VENDOR_NSS)

The CKM_* and CKK_* values for each algorithm are calculated by applying a specific offset to the vendor-defined base.

Currently, CKP_* values comply with the PKCS#11 v3.2 standard. For reference, look at security/nss/lib/util/pkcs11qubip.h.

Note on TLS enabled signature schemes

Currently only pure ML-DSA-{44, 65, 87} and composite MLDSA65-Ed25519-SHA512 signature schemes are enabled in the TLS handshake.

SLH-DSA-SHAKE-{128s, 128f, 192s, 192f, 256s, 256f} signature schemes are supported ONLY in the certificate chain validation component (mozpkix).

In the TLS component, SLH-DSA is defined as a valid signature scheme but negotiation of its variants as supported TLS sigalgs is INTENTIONALLY omitted.