Files
BackOne/backone-quantum-fork-research.md
T
dedysutanto 7cf826c6b6 feat: PQ hybrid groundwork — liboqs vendored, PQHybrid, KDF wiring
- ext/liboqs: vendored (ML-KEM/ML-DSA ready), -isystem ext/liboqs/include
- node/PQHybrid.*: KDF over X25519 agree + ML-KEM-768 encaps scaffold
- wire into IncomingPacket/Node/Bond/selftest/OneService paths
- zeroidc ext.rs: URL param parser unit tests
- SPEC.md: BackOne quantum-safe task table (T1–T23)
- research doc: hybrid PQ fork plan (ML-KEM+X25519, ML-DSA+Ed25519)
2026-09-30 15:08:25 +07:00

9.1 KiB
Raw Blame History

Deep Research: Fork ZeroTier 1.14.1 dengan Enkripsi Quantum-Resistant

Tanggal: 29 September 2026 Target: Fork ZeroTier One 1.14.1 (C++), tambahkan Post-Quantum Cryptography (PQC)


1. Ringkasan Eksekutif

ZeroTier 1.14.1 memakai kriptografi klasik: Curve25519/Ed25519 (key agreement + signature), Salsa20 (stream cipher), Poly1305 (MAC). Semua ini rusak oleh komputer kuantum (Shor's algorithm untuk ECC, Grover untuk symmetric — Salsa20 256-bit masih aman dari Grover, tapi kunci yang bocor dari ECDH membuatnya ikut rusak).

Catatan penting: ZeroTier, Inc. sudah merilis "ZeroTier Quantum" (Maret 2026) — produk komersial terpisah berbasis Rust, dengan skema ML-KEM-1024 (FIPS 203) + ML-DSA-87 (FIPS 204) + P-384 hybrid + AES-256-GCM, sesuai NSA CNSA 2.0. Produk itu bukan fork dari kode 1.14.1 dan tidak open-source di repo yang sama. Jadi fork 1.14.1 dengan PQC tetap pekerjaan yang valid — kita pakai prinsip desain yang sama (hybrid PQC) tapi di atas kode C++ yang ada.

Rekomendasi inti: Hybrid PQC — jalankan ML-KEM (Kyber) paralel dengan X25519, dan ML-DSA (Dilithium) paralel dengan Ed25519, lalu gabungkan output-nya. Keamanan tetap terjaga jika salah satu keluarga algoritma ternyata lemah.


2. Arsitektur Kriptografi ZeroTier 1.14.1 (Baseline)

Sumber: docs.zerotier.com/protocol, repo github.com/zerotier/ZeroTierOne

2.1 Titik-Titik Kriptografi di Kode

Komponen File Fungsi
Identity (X25519/Ed25519 keypair) node/Identity.hpp/.cpp 40-bit ZT address diturunkan dari public key; PoW anti-collision
ECDH key agreement node/C25519.* Ephemeral key exchange antar peer
Signature (Ed25519) node/Salsa20.cpp area / Ed25519 impl Signing credential, certificate of membership
Packet encryption node/Salsa20.*, NaCl-style box Salsa20 encrypt-then-MAC Poly1305
MAC node/Poly1305.* Autentikasi pesan
Credential signing node/CertificateOfMembership.*, controller Controller sign membership pakai secret key

2.2 Alur Koneksi Peer (yang perlu dimodifikasi)

  1. Node A kirim HELLO berisi identity public key (X25519 + Ed25519) — 40-bit address diturunkan dari hash public key.
  2. Handshake ECDH menghasilkan shared secret → derive key Salsa20+Poly1305.
  3. Semua payload VL1 di-encrypt end-to-end dengan kunci tsb.
  4. Credential (certificate of membership, dll) ditandatangani Ed25519.

2.3 Batasan Penting

  • Tidak ada forward secrecy (by design — lihat issue #204 GitHub).
  • Salsa20/Poly1305 komposisi = NaCl reference (crypto_box).
  • Trusted paths bisa skip enkripsi (jangan disentuh).

3. Standar Post-Quantum (NIST + NSA CNSA 2.0)

3.1 FIPS Final (Agustus 2024)

Standar Nama lama Fungsi Parameter relevan
FIPS 203 — ML-KEM CRYSTALS-Kyber Key Encapsulation (ganti ECDH) ML-KEM-512/768/1024
FIPS 204 — ML-DSA CRYSTALS-Dilithium Digital signature (ganti Ed25519) ML-DSA-44/65/87
FIPS 205 — SLH-DSA SPHINCS+ Signature hash-based (backup) SLH-DSA-128s/192s/256s

3.2 CNSA 2.0 (NSA) — target yang dipakai ZeroTier Quantum

  • Key exchange: ML-KEM-1024
  • Signature: ML-DSA-87
  • Symmetric: AES-256-GCM, HMAC-SHA-512
  • Classical hybrid: P-384 (opsional tapi disarankan)
  • Timeline: transisi wajib sampai 2033; untuk data "harvest now, decrypt later" mulai sekarang.

3.3 Ukuran Parameter (penting untuk protocol overhead)

Algoritma Public key Ciphertext/Signature
ML-KEM-768 1184 B 1088 B
ML-KEM-1024 1568 B 1568 B
ML-DSA-65 1952 B 3293 B
ML-DSA-87 2592 B 4627 B
X25519 (baseline) 32 B 32 B
Ed25519 (baseline) 32 B 64 B

Implikasi: HELLO/identity packet harus diperbesar ~2-4 KB. Perlu cek MTU/fragmentasi packet VL1. Hybrid mode = gabung klasik+PQC (mis. XOR/KDF kedua shared secret).


4. Strategi Integrasi (untuk fork 1.14.1 C++)

4.1 Library PQC

Pilihan utama: liboqs (Open Quantum Safe project)

  • Implementasi C, portable, sudah di-review luas
  • Sediakan oqs_kem_encaps/decaps (ML-KEM) dan oqs_sig_sign/verify (ML-DSA)
  • License: Apache-2.0 (kompatibel fork)
  • Alternatif: pqcrypto (Rust, perlu FFI), implementasi reference NIST (C, FIPS-exact tapi lebih mentah)

Build: tambah liboqs sebagai git submodule / static lib di make-linux.sh / CMake.

4.2 Patch Per Titik Integrasi

A. Handshake Key Agreement (Wajib)

Handshake Lama:  shared = X25519(my_eph_priv, their_eph_pub)
Handshake Baru:  shared = KDF( X25519(...)  ‖  ML-KEM-768/1024_encaps(...) )
  • Tambah field baru di packet HELLO/KEY: kem_public_key (1184–1568 B) + kem_ciphertext.
  • Hybrid: derive final key dari kedua shared secret via BLAKE2b/KDF — aman jika salah satu pecah.
  • Mockup kode:
// node/PQHybrid.hpp
#include <oqs/oqs.h>

struct HybridShared {
  uint8_t classical[32];   // X25519
  uint8_t pq[KEM_LEN];     // ML-KEM shared secret
};

void hybrid_kem(const uint8_t* peer_kem_pk,
                const uint8_t* my_eph_sk, const uint8_t* peer_eph_pk,
                HybridShared& out, uint8_t* kem_ct) {
  // classical
  crypto_scalarmult(out.classical, my_eph_sk, peer_eph_pk);
  // pq
  OQS_KEM* kem = OQS_KEM_new("ML-KEM-768");
  kem->encaps(out.pq, kem_ct, peer_kem_pk);
  OQS_KEM_free(kem);
}
// final key = KDF(classical ‖ pq)  -> masuk ke Salsa20/ChaCha20 key schedule

B. Identity & Signature (Wajib)

  • Identity saat ini: X25519 + Ed25519, address 40-bit diturunkan dari hash public key.
  • Tambah ML-DSA-87 keypair ke identity (field baru di Identity serialize).
  • Tantangan: ukuran identity membengkak (2592 B pk + 4627 B sig per sign). Serialisasi identity.public di file dan di wire harus diperbesar — pakai versioned format (byte versi baru = identity v2, fallback ke v1 untuk backward compat).
  • Signing credential controller: verify kedua signature (Ed25519 DAN ML-DSA) selama transisi (double-sign).

C. Packet Encryption (Opsional, rendah risiko)

  • Salsa20 256-bit: Grover butuh ~2^128 — masih aman selama key-nya tidak bocor.
  • Setelah A & B selesai, enkripsi data tidak wajib diganti. Tapi jika mau ikut CNSA 2.0: ganti ke AES-256-GCM (liboqs/OpenSSL sudah ada) — buang Poly1305. Ini pekerjaan terpisah, lakukan terakhir.

4.3 Versioning & Kompatibilitas

  • Tambah capability bit di handshake: bit "PQC_SUPPORTED".
  • Peer lawas (v1.14.1 vanilla) → fallback mode klasik saja.
  • Peer baru → mode hybrid / pure-PQC, bisa dikonfigurasi via local.conf:
{
  "settings": {
    "pqcMode": "hybrid",        // "off" | "hybrid" | "pqconly"
    "kem": "ML-KEM-768",
    "sig": "ML-DSA-65"
  }
}

(Preset: hybrid = disarankan; pqconly = CNSA 2.0 strict dengan ML-KEM-1024/ML-DSA-87)


5. Roadmap Implementasi

Fase Item Estimasi
1 Fork repo, tag v1.14.1-pqc, integrate liboqs, build pipeline 1-2 hari
2 Patch handshake: hybrid X25519+ML-KEM, wire format v2 3-5 hari
3 Patch identity/signature: ML-DSA-87 double-sign, versioned serialize 3-5 hari
4 Credential (COM) controller double-sign + verify 2-3 hari
5 Config flag + negotiation + backward compat test 2 hari
6 Test matrix: 2 node hybrid↔hybrid, hybrid↔vanilla, soak test throughput 3-5 hari
7 (Opsional) AES-256-GCM ganti Salsa20 untuk CNSA penuh 3-5 hari

Total realistis: 3-4 minggu untuk 1 developer familiar dengan codebase.

Risiko

  1. Ukuran packet — identity/HELLO +~4 KB; cek fragmentasi MTU 1280/1500 dan L2 frame VL2.
  2. CPU overhead — ML-KEM keygen ~2-3 ms (sekali per handshake, bukan per-packet); ML-DSA sign ~5-10 ms. Dampak kecil karena handshake jarang. Verifikasi dengan benchmark.
  3. Identity collision/derivation — address 40-bit diturunkan dari public key; format baru harus tetap menjaga PoW.
  4. Audit kripto — jangan deploy produksi tanpa review. liboqs = implementasi standard, tapi pemakaian (KDF hybrid, wire format) harus di-audit.
  5. Lisensi — ZeroTier One: BSL 1.1 (Business Source License, Open Source Edition). Fork untuk pemakaian internal/non-komersial OK; cek klausa sebelum distribusi komersial.

6. Referensi

  1. ZeroTier Protocol Docs — https://docs.zerotier.com/protocol/
  2. ZeroTier Quantum (produk resmi) — https://www.zerotier.com/quantum/
  3. Research Notes on 2.x Cryptography — https://www.zerotier.com/news/research-notes-on-2-x-cryptography/
  4. ZeroTierOne source — https://github.com/zerotier/ZeroTierOne
  5. NIST FIPS 203/204/205 (ML-KEM, ML-DSA, SLH-DSA) — Aug 2024
  6. NSA CNSA 2.0 FAQ — https://media.defense.gov/2022/Sep/07/2003071834/-1/-1/0/CSA_CNSA_2.0_ALGORITHMS_.PDF
  7. liboqs (Open Quantum Safe) — https://github.com/open-quantum-safe/liboqs
  8. ZeroTier blog: "Defusing the Q-Bomb" — ML-KEM untuk key establishment, ML-DSA untuk signature
  9. ZeroTier blog: "NIST FIPS 203 Explained for Defense and Government Network Architects"
  10. IETF hybrid KEM design — draft-ietf-tls-hybrid-design; NIST IR 8547 (migration guidance)

Disusun oleh Luci (OpenClaw) — 29 Sep 2026