| Internet-Draft | PQ-SecTunnel | August 2026 |
| Fan, et al. | Expires 14 February 2027 | [Page] |
This document specifies the PQ-SecTunnel protocol, a UDP-based quantum-resistant IP tunnel derived from the WireGuard architecture. Session keys are established by a three-message Noise_IKpsk1kem handshake that replaces Diffie-Hellman with dual Key Encapsulation Mechanism (KEM) operations (static and ephemeral). Authentication is implicit: peers prove possession of long-term KEM private keys through interlocking encapsulations rather than signing the transcript. The protocol is organized as a multi-suite framework. Implementations MAY select ML-KEM-512 or ML-KEM-768 independently for the static and ephemeral KEM roles. This document RECOMMENDS the profile static=ML-KEM-512, ephemeral=ML-KEM-768, AEAD=SM4-GCM, Hash=SM3 (denoted mlkem512-mlkem768-sm4gcm-sm3). Other ML-KEM combinations with the same AEAD/Hash, and additional KEM families such as Aigis-enc (integration ongoing), are optional profiles.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 14 February 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
Traditional IP-layer security protocols such as IPsec commonly rely on classical public-key primitives (RSA, ECDH) for key exchange and authentication. Advances in large-scale quantum computing threaten those constructions. PQ-SecTunnel provides a quantum-resistant tunnel for IP traffic over UDP.¶
The protocol has two phases:¶
Key Agreement Protocol: A 3-message handshake that performs mutual implicit authentication and establishes shared symmetric session keys. This handshake is based on post-quantum Key Encapsulation Mechanisms (KEMs).¶
Data Transport Protocol: The use of the derived session keys with an AEAD cipher to encrypt, authenticate, and transport the encapsulated IP packets over UDP.¶
PQ-SecTunnel is specified as a suite framework. Algorithm identifiers are fixed at build or deployment time for a given peer pair; there is no in-band suite negotiation in the current design. Peers MUST use identical suite parameters.¶
This revision aligns the handshake description with the project handshake specification (Noise_IKpsk1kem chaining), documents little-endian field encoding as implemented, defines Cookie reply messages and application-layer fragmentation for oversized handshake datagrams, and adopts SM4-GCM / SM3 for the recommended Chinese national cryptography profile.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
Additional terms used in this document:¶
AEAD: Authenticated Encryption with Associated Data.¶
Initiator: The party that sends Handshake Initiation.¶
Responder: The peer that receives Handshake Initiation and sends Handshake Response.¶
Static KEM: Long-term KEM used for ct_1 and ct_3.¶
Ephemeral KEM: Per-handshake KEM used for E_i key generation and ct_2.¶
KDF: HKDF-style extract-and-expand keyed by the chaining key (Section 4.5).¶
shk: Shared secret produced by a KEM encapsulation/decapsulation.¶
sid_i / sid_r: 32-bit sender indices allocated from the peer index table.¶
TK_i / TK_r: Unidirectional transport keys (Initiator-to-Responder / Responder-to-Initiator).¶
MAC: Keyed BLAKE2s [RFC7693] used for mac1/mac2 DoS cookies (independent of the suite Hash).¶
Unless otherwise stated, multi-byte integer fields in PQ-SecTunnel messages are encoded in little-endian byte order (WireGuard-compatible). This includes the message type word, sender/receiver indices, data-packet counters, and fragment header integer fields. Cryptographic octet strings (public keys, ciphertexts, MACs, AEAD outputs) are opaque sequences in the order produced by the primitive.¶
Logical components:¶
Certificate / key provisioning: loads long-term KEM public keys (raw configuration or X.509).¶
Key agreement: three-message Noise_IKpsk1kem handshake.¶
Data plane: AEAD encapsulation of inner IP packets over UDP.¶
Virtual network interface: injects/captures plaintext IP for the host stack.¶
Optional application-layer fragmentation: splits oversized handshake UDP payloads.¶
An application emits an inner IP packet.¶
Routing directs the packet to the PQ-SecTunnel virtual interface.¶
The data plane looks up the peer session, assigns a counter, and AEAD-encrypts the inner packet.¶
The outer packet is UDP to the peer endpoint.¶
On receipt, the peer decrypts, anti-replay checks the counter, and injects the inner IP packet.¶
The PQ-SecTunnel protocol is designed to resist the following:¶
Confidentiality and integrity of tunnelled IP traffic against classical and quantum eavesdroppers (within the limits of the chosen suite).¶
MitM resistance given authentic pre-distributed long-term KEM public keys.¶
Forward secrecy for past sessions after ephemeral private key destruction.¶
DoS mitigation via mac1/mac2 and Cookie replies before expensive KEM operations.¶
The protocol does not provide transport reliability. Handshake messages that exceed the path MTU MUST use application-layer fragmentation (Section 6) or otherwise ensure delivery; relying solely on IP fragmentation is NOT RECOMMENDED.¶
A suite is the 4-tuple (Static_KEM, Ephemeral_KEM, AEAD, Hash). Static_KEM and Ephemeral_KEM MAY differ. For ML-KEM, any combination of ML-KEM-512 and ML-KEM-768 in the two roles is permitted.¶
RECOMMENDED profile for this document: mlkem512-mlkem768-sm4gcm-sm3 (Static=ML-KEM-512, Ephemeral=ML-KEM-768, AEAD=SM4-GCM, Hash=SM3).¶
Other ML-KEM combinations with SM4-GCM/SM3 (for example mlkem512-mlkem512-sm4gcm-sm3 or mlkem768-mlkem768-sm4gcm-sm3) are OPTIONAL (MAY).¶
Aigis-enc parameter sets are envisioned as additional optional KEM choices in the same handshake framework. Normative sizes, OIDs, and interoperability requirements for Aigis-enc are left for a future revision; current implementations MAY experiment but MUST NOT claim conformance to an Aigis profile until specified.¶
Messages: Handshake Initiation (Initiator), Handshake Response (Responder), Key Confirmation (Initiator). Optional Cookie Reply (Responder) may be sent under load. After Key Confirmation verification, both sides derive TK_i and TK_r.¶
mac1/mac2 are computed over the wire encoding of each handshake message and are verified on receipt before KEM/AEAD processing. They do not enter the C/H chaining state.¶
Before the handshake can be initiated, several prerequisites MUST be met:¶
1.Long-term Static KEM key pairs: Initiator (S_i^pub, S_i^priv), Responder (S_r^pub, S_rpriv).¶
2.Each peer MUST possess an authentic copy of the peer's long-term public key before handshake (out-of-band; certificates MAY be used, Section 8).¶
All handshake and data messages begin with a 32-bit little-endian type field whose low 8 bits carry the message type and whose upper 24 bits MUST be zero (WireGuard-compatible packing).¶
Message types (see also Section 10):¶
| Type | Name |
| 1 | Handshake Initiation |
| 2 | Handshake Response |
| 3 | Key Confirmation |
| 4 | Cookie Reply |
| 5 | Transport Data |
This message is sent by the Initiator to begin the handshake.¶
message HandshakeInitiation {¶
u8 type;¶
u8 reserved_zero[3];¶
u32 sid_i;¶
u8 E_i_pub[Ne];¶
u8 ct_1[Ns_ct];¶
u8 static[HashLen+Tag];¶
u8 time[12+Tag];¶
u8 mac1[16];¶
u8 mac2[16];¶
}¶
Ne / Ns_ct depend on Ephemeral_KEM / Static_KEM. For the recommended profile: Ne = 1184 (ML-KEM-768 public key), Ns_ct = 768 (ML-KEM-512 ciphertext). HashLen = 32 (SM3). Tag = 16 (SM4-GCM).¶
This message is sent by the Responder after validating the Handshake Initiation message.¶
message HandshakeResponse {¶
u8 type;¶
u8 reserved_zero[3];¶
u32 sid_r;¶
u32 sid_i;¶
u8 ct_2[Ne_ct];¶
u8 ct_3[Ns_ct];¶
u8 empty[Tag];¶
u8 mac1[16];¶
u8 mac2[16];¶
}¶
For the recommended profile: Ne_ct = 1088 (ML-KEM-768 ciphertext).¶
Notation follows the project handshake specification. Hash is the suite hash (SM3). KDF is HKDF-HMAC-Hash (Section 4.5). AEAD.Enc(key, nonce, plaintext, AAD) uses nonce = 12 zero octets for all handshake AEAD operations; AAD is the current transcript hash H before encryption; after encryption, H is updated as H := Hash(H || ciphertext_with_tag).¶
KEM.Enc(pk) denotes standard encapsulation producing (ct, shk). KEM.Dec(sk, ct) produces shk. For static-KEM ciphertexts ct_1 and ct_3, after obtaining shk the implementation MUST replace the value mixed into the chain with Hash(ct) (same length as the KEM shared-secret buffer used by mix_kem_ss). For ephemeral ct_2, the raw shk_2 MUST be mixed (not Hash(ct_2)).¶
sid_i <- allocate sender_index¶
C_0 = Hash(label_1)¶
H_0 = Hash(C_0 || label_2)¶
H_1 = Hash(H_0 || S_r^pub); C_1 = KDF(C_0, S_rpub)¶
(E_i^priv, E_i^pub) = EphemeralKEM.Gen()¶
H_2 = Hash(H_1 || E_i^pub); C_2 = KDF(C_1, E_ipub)¶
(ct_1, shk_1) = StaticKEM.Enc(S_rpub)¶
H_3 = Hash(H_2 || ct_1)¶
ss = Hash(ct_1); (C_3, K_1) = KDF(C_2, ss)¶
static = AEAD.Enc(K_1, 0, Hash(S_i^pub), H_3)¶
H_4 = Hash(H_3 || static)¶
C_4 = KDF(C_3, S_ipub)¶
(C_5, Htmp, K_2) = KDF(C_4, H_4 || PSK); H_5 = Hash(H_4 || Htmp)¶
time = AEAD.Enc(K_2, 0, t_now, H_5)¶
H_6 = Hash(H_5 || time)¶
mac1 / mac2 as in Section 4.6¶
Send HandshakeInitiation¶
label_1 is the protocol name string for the suite (RECOMMENDED example: "Noise_IKpsk1kem_SM4GCM_SM3_EphemMLKEM768"). label_2 is the identifier string (example: "PQWireGuard v2 zx2c4 Jason@zx2c4.com"). Both include the terminating NUL octet when hashed, matching the reference implementation.¶
Verify mac1/mac2; on failure silently drop¶
Recompute C_0..H_6 through decryption of static and time as Initiation inverse¶
sid_r <- allocate sender_index¶
(ct_2, shk_2) = EphemeralKEM.Enc(E_ipub)¶
H_7 = Hash(H_6 || ct_2); C_6 = KDF(C_5, ct_2)¶
C_7 = KDF(C_6, shk_2)¶
(ct_3, shk_3) = StaticKEM.Enc(S_ipub)¶
H_8 = Hash(H_7 || ct_3)¶
ss = Hash(ct_3); C_8 = KDF(C_7, ss)¶
(C_9, Htmp, K_3) = KDF(C_8, H_8 || PSK); H_9 = Hash(H_8 || Htmp)¶
empty = AEAD.Enc(K_3, 0, empty, H_9)¶
H_10 = Hash(H_9 || empty)¶
(C_10, K_4) = KDF(C_9, empty)¶
mac1/mac2; send HandshakeResponse¶
Verify mac1/mac2; on failure abort¶
shk_2 = EphemeralKEM.Dec(E_i^priv, ct_2); destroy E_ipriv¶
H_7 = Hash(H_6 || ct_2); C_6 = KDF(C_5, ct_2)¶
C_7 = KDF(C_6, shk_2)¶
shk_3 = StaticKEM.Dec(S_i^priv, ct_3)¶
H_8 = Hash(H_7 || ct_3)¶
ss = Hash(ct_3); C_8 = KDF(C_7, ss)¶
(C_9, Htmp, K_3) = KDF(C_8, H_8 || PSK); H_9 = Hash(H_8 || Htmp)¶
AEAD.Dec(K_3, 0, empty, H_9); require empty plaintext¶
H_10 = Hash(H_9 || empty)¶
(C_10, K_4) = KDF(C_9, empty)¶
conf = AEAD.Enc(K_4, 0, empty, H_10)¶
mac1/mac2; send KeyConfirmation¶
(TK_i, TK_r) = KDF(C_10, empty_input)¶
KDF is Hugo Krawczyk's HKDF using HMAC with the suite Hash (HMAC-SM3 for the recommended profile) [RFC5869]. Let CK be the chaining key. KDF(CK, input) producing n outputs means: PRK = HMAC(CK, input); then Expand with counters 0x01, 0x02, ... as in Noise/WireGuard. When this document writes (C', K) = KDF(C, ss), the first output updates the chaining key and the second is an AEAD key of AEAD-key length.¶
mix_psk(C, H, PSK) computes KDF outputs (C', Htmp, K) from input (H || PSK), then sets H' = Hash(H || Htmp). The AEAD key K is used for the subsequent encrypted field (time or empty).¶
Table 1: Informative chaining summary (Initiation through transport keys)¶
| Step | Hash update | Chain-key update |
| 0 | H_0 = Hash(C_0 || label_2) | C_0 = Hash(label_1) |
| 1 | H_1 = Hash(H_0 || S_rpub) | C_1 = KDF(C_0, S_rpub) |
| 2 | H_2 = Hash(H_1 || E_ipub) | C_2 = KDF(C_1, E_ipub) |
| 3 | H_3 = Hash(H_2 || ct_1) | (C_3,K_1)=KDF(C_2, Hash(ct_1)) |
| 4 | H_4 = Hash(H_3 || static) | C_4 = KDF(C_3, S_i^pub); then mix_psk -> C_5,H_5,K_2 |
| 5 | H_6 = Hash(H_5 || time) | (after time AEAD) |
| 6 | H_7 = Hash(H_6 || ct_2) | C_6 = KDF(C_5, ct_2); C_7 = KDF(C_6, shk_2) |
| 7 | H_8 = Hash(H_7 || ct_3) | C_8 = KDF(C_7, Hash(ct_3)); mix_psk -> C_9,H_9,K_3 |
| 8 | H_10 = Hash(H_9 || empty) | (C_10,K_4)=KDF(C_9, empty) |
| 9 | (transport) | (TK_i,TK_r)=KDF(C_10, "") |
The Initiator proves knowledge bound to S_i by producing static = AEAD(Hash(S_i^pub)) under a key derived from ct_1 encapsulated to S_r. The Responder proves possession of S_r^priv by decapsulating ct_1 and later producing ct_3 to S_i^pub. Successful completion binds both long-term identities into TK_i/TK_r without transcript signatures.¶
message TransportData {¶
u8 type;¶
u8 reserved_zero[3];¶
u32 key_idx;¶
u64 counter;¶
u8 ciphertext[];¶
}¶
On the wire the UDP payload is exactly this structure. The outer UDP/IP headers are ordinary Internet headers toward the peer endpoint.¶
When the virtual network interface captures a plaintext IP packet (Inner IP Packet) for transmission:¶
Select the sending key (TK_i on Initiator, TK_r on Responder) and remote key_idx.¶
Let counter be the next 64-bit sending counter (MUST NOT reuse under the same key).¶
For SM4-GCM: form a 12-octet IV as four zero octets followed by the eight little-endian octets of counter (IV bytes 4..11).¶
Encrypt with AEAD key = transport key, nonce/IV as above, plaintext = inner IP packet, AAD length = 0 (empty AAD).¶
Emit TransportData with ciphertext||tag.¶
When a handshake message (after mac1/mac2 are attached) exceeds the maximum fragment payload size, implementations MUST fragment at the application layer rather than relying on IP fragmentation.¶
Fragment header (8 octets, little-endian where noted):¶
struct PqcFragHdr {¶
u16 magic;¶
u16 msg_id;¶
u8 frag_index;¶
u8 frag_total;¶
u16 frag_len;¶
};¶
The magic field MUST be 0x5051 (ASCII "PQ"), encoded little-endian. msg_id is a random reassembly identifier. frag_index is zero-based; frag_total is the number of fragments; frag_len is the number of payload octets in this fragment.¶
Maximum fragment payload size is 1400 octets. The receiver reassembles fragments sharing (endpoint, msg_id) and passes the completed handshake buffer to the normal handshake parser (without the fragment header).¶
Control encoding: frag_total = 0xFF and frag_index = 0xFF denotes a fragment ACK used by the sender for retransmission. Implementations SHOULD retransmit unacknowledged fragments with bounded retries.¶
Fragmentation MUST be applied after mac1/mac2 computation so that MACs cover the original handshake message. Receivers MUST accept fragmented handshake messages for suites whose initiation or response exceeds typical path MTU (including the recommended mlkem512-mlkem768-sm4gcm-sm3 profile).¶
Implementations of this specification's ML-KEM profiles MUST implement ML-KEM as specified in [FIPS203]. Support for both ML-KEM-512 and ML-KEM-768 as Static_KEM and as Ephemeral_KEM is RECOMMENDED so that operators MAY choose any pairing. The profile mlkem512-mlkem768-sm4gcm-sm3 is RECOMMENDED.¶
Digital signatures for out-of-band X.509 certificates: implementations that use the certificate path MUST support a quantum-resistant signature algorithm such as ML-DSA [FIPS204]. Tunnel handshake authentication itself does not use signatures.¶
Aigis-enc MAY appear in experimental builds as Static_KEM and/or Ephemeral_KEM using the same message layout and chaining rules; interoperable Aigis profiles are not yet normatively defined here.¶
For the recommended profile, AEAD MUST be SM4-GCM with 128-bit keys, 128-bit authentication tags, and 96-bit nonces, following the GCM construction as used with SM4 in national standards practice (see [GBT32907] for SM4; GCM as referenced by related TLCP guidance [GB38636]).¶
Handshake AEAD nonce is 12 zero octets. Transport AEAD nonce/IV construction is defined in Section 5.2. Handshake AAD is the current transcript hash; transport AAD is empty.¶
Suite Hash for the recommended profile MUST be SM3 [GBT32905]. KDF is HKDF with HMAC-SM3 [RFC5869].¶
mac1/mac2 and cookie key derivation use keyed BLAKE2s [RFC7693] as in Section 4.6, even when the suite Hash is SM3. This separation follows the WireGuard DoS design retained by PQ-SecTunnel and is independent of the C/H hash chain.¶
When certificates are used to distribute long-term KEM public keys, they MUST be X.509 v3 certificates.¶
The SubjectPublicKeyInfo field MUST carry the long-term PQC KEM public key. The AlgorithmIdentifier OID MUST identify the KEM algorithm (Appendix A).¶
Implementations MUST map SubjectPublicKeyInfo OIDs to the corresponding KEM implementation. Informative OID values under the Chinese national arc appear in Appendix A.¶
Certificates MUST be distributed and validated out-of-band before handshake when the certificate path is used. Implementations MUST validate the signature chain against a configured trust anchor, check validity periods, and ensure the peer identity matches local policy. Raw public-key configuration without certificates remains permitted.¶
Asymmetric handshake secrets are established with ML-KEM [FIPS203]. Symmetric security for the recommended profile uses SM4-128 and SM3-256. Operators needing higher classical margins MAY select ML-KEM-768 for both roles.¶
Implicit authentication requires authentic pre-distribution of long-term KEM public keys. Compromise or substitution of the preloaded peer public key enables MitM.¶
Session keys depend on shk_2 bound to the ephemeral private key E_i^priv, which MUST be destroyed after processing Handshake Response. Compromise of both long-term static private keys after the fact does not recover past TK_i/TK_r if E_i^priv was erased and the ephemeral KEM remains unbroken.¶
Handshake: the encrypted timestamp and transcript hash chain bind messages. Transport: the 64-bit counter with sliding-window anti-replay MUST be enforced.¶
mac1 provides a cheap filter keyed by the Responder public key. Under load, Cookie Reply enables mac2 checks before KEM decapsulation.¶
Mixing Hash(ct_1)/Hash(ct_3) instead of the raw static KEM shared secret is the current protocol rule and must be implemented for interoperability. It differs from the raw-shk rule used for ct_2. Changing this rule would be a breaking revision.¶
IANA is requested to register PQ-SecTunnel in the "Service Name and Transport Protocol Port Number Registry".¶
IANA is requested to create a registry "PQ-SecTunnel Message Types" with Specification Required registration policy. Initial values:¶
| Value | Description | Reference |
| 0 | Invalid / reserved | this document |
| 1 | Handshake Initiation | this document |
| 2 | Handshake Response | this document |
| 3 | Key Confirmation | this document |
| 4 | Cookie Reply | this document |
| 5 | Transport Data | this document |
OIDs under 1.2.156 used in Appendix A are outside IANA; no IANA action is requested.¶
Informative Object Identifiers under the Chinese national registration arc, as used by related certificate tooling. Only OIDs required by a deployment need be recognized.¶
Table 2: PQC and GM/T OID Definitions¶
| Object Identifier (OID) | Object Identifier Definition | 备注 |
| General Object Identifiers | ||
| 1.2 | International Organization for Standardization (ISO) Member Identifier | |
| 1.2.156 | China | |
| 1.2.156.197 | State Cryptography Administration (SCA) | |
| 1.2.156.10197 | Cryptography Industry Standardization Technical Committee | |
| 1.2.156.10197.1 | Cryptographic Algorithms | |
| Block Cipher Algorithm Object Identifiers | ||
| 1.2.156.10197.1.100 | Block Cipher Algorithms | |
| 1.2.156.10197.1.102 | SM1 Block Cipher Algorithm | |
| 1.2.156.10197.1.103 | SSF33 Block Cipher Algorithm | |
| 1.2.156.10197.1.104 | SM4 Block Cipher Algorithm | |
| Stream Cipher Algorithm Object Identifiers | ||
| 1.2.156.10197.1.200 | Stream Cipher Algorithms | |
| 1.2.156.10197.1.201 | Zuchongzhi Stream Cipher Algorithm | |
| Public Key Cryptographic Algorithm Object Identifiers | ||
| 1.2.156.10197.1.300 | Public Key Cryptographic Algorithms | |
| 1.2.156.10197.1.301 | SM2 Elliptic Curve Public Key Cryptographic Algorithm | |
| 1.2.156.10197.1.301.1 | SM2-1 Digital Signature Algorithm | |
| 1.2.156.10197.1.301.2 | SM2-2 Key Exchange Protocol | |
| 1.2.156.10197.1.301.3 | SM2-3 Public Key Encryption Algorithm | |
| 1.2.156.10197.1.302 | SM9 Identity-Based Cryptographic Algorithm | |
| 1.2.156.10197.1.302.1 | SM9-1 Digital Signature Algorithm | |
| 1.2.156.10197.1.302.2 | SM9-2 Key Exchange Protocol | |
| 1.2.156.10197.1.302.3 | SM9-3 Key Encapsulation Mechanism and Public Key Encryption Algorithm | |
| 1.2.156.10197.1.303 | Post-Quantum Key Encapsulation Algorithms | Post-Quantum |
| 1.2.156.10197.1.303.1 | ML-KEM-512 Key Encapsulation Algorithm | Post-Quantum |
| 1.2.156.10197.1.303.2 | ML-KEM-768 Key Encapsulation Algorithm | Post-Quantum |
| 1.2.156.10197.1.303.3 | ML-KEM-1024 Key Encapsulation Algorithm | Post-Quantum |
| 1.2.156.10197.1.304 | Post-Quantum Digital Signature Algorithms | Post-Quantum |
| 1.2.156.10197.1.304.1 | ML-DSA-44 Digital Signature Algorithm | Post-Quantum |
| 1.2.156.10197.1.304.2 | ML-DSA-65 Digital Signature Algorithm | Post-Quantum |
| 1.2.156.10197.1.304.3 | ML-DSA-87 Digital Signature Algorithm | Post-Quantum |
| Hash Algorithm Object Identifiers | ||
| 1.2.156.10197.1.400 | Hash Algorithms | |
| 1.2.156.10197.1.401 | SM3 Cryptographic Hash Algorithm | |
| 1.2.156.10197.1.401.1 | SM3 Cryptographic Hash Algorithm (No Key Used) | |
| 1.2.156.10197.1.401.2 | SM3 Cryptographic Hash Algorithm (Key Used) | |
| Combined Operation Algorithm Object Identifiers | ||
| 1.2.156.10197.1.500 | Combined Operation Mechanisms | |
| 1.2.156.10197.1.501 | Signature Based on SM2 Algorithm and SM3 Algorithm | |
| 1.2.156.10197.1.504 | Signature Based on RSA Algorithm and SM3 Algorithm | |
| 1.2.156.10197.1.505 | Signature Based on ML-DSA Algorithm and SM3 Algorithm | Post-Quantum |
| 1.2.156.10197.1.505.1 | ML-DSA-44-with-SM3 | Post-Quantum |
| 1.2.156.10197.1.505.2 | ML-DSA-65-with-SM3 | Post-Quantum |
| 1.2.156.10197.1.505.3 | ML-DSA-87-with-SM3 | Post-Quantum |
| 1.2.156.10197.1.506 | Signature Based on SM2, ML-DSA Algorithms and SM3 Algorithm | Post-Quantum |
| 1.2.156.10197.1.506.1 | ML-DSA-44-SM2-with-SM3 | Post-Quantum |
| 1.2.156.10197.1.506.2 | ML-DSA-65-SM2-with-SM3 | Post-Quantum |
| 1.2.156.10197.1.506.3 | ML-DSA-87-SM2-with-SM3 | Post-Quantum |
| 1.2.156.10197.1.507 | Based on SM2 and ML-KEM Algorithms | Post-Quantum |
| 1.2.156.10197.1.507.1 | ML-KEM-512-SM2 | Post-Quantum |
| 1.2.156.10197.1.507.2 | ML-KEM-768-SM2 | Post-Quantum |
| 1.2.156.10197.1.507.3 | ML-KEM-1024-SM2 | Post-Quantum |
| 1.2.156.10197.1.508 | Based on SM2 and ML-DSA Algorithms | Post-Quantum |
| 1.2.156.10197.1.508.1 | ML-DSA-44-SM2 | Post-Quantum |
| 1.2.156.10197.1.508.2 | ML-DSA-65-SM2 | Post-Quantum |
| 1.2.156.10197.1.508.3 | ML-DSA-87-SM2 | Post-Quantum |
The authors thank contributors to the PQ-SecTunnel implementation and reviewers of earlier drafts. The handshake design builds on the Noise protocol framework and the WireGuard construction [WIREGUARD]. Aigis-enc (and related lattice KEMs developed in the Chinese research community) are acknowledged as candidate additional KEM modules for the same tunnel framework; detailed Aigis profiles are deferred until implementation and interoperability work is complete. The designers of Kyber/ML-KEM and Dilithium/ML-DSA are likewise acknowledged.¶