yakmesh 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +637 -0
  2. package/CONTRIBUTING.md +42 -0
  3. package/Caddyfile +77 -0
  4. package/README.md +119 -29
  5. package/adapters/adapter-mlv-bible/README.md +124 -0
  6. package/adapters/adapter-mlv-bible/index.js +400 -0
  7. package/adapters/chat-mod-adapter.js +532 -0
  8. package/adapters/content-adapter.js +273 -0
  9. package/content/api.js +50 -41
  10. package/content/index.js +2 -2
  11. package/content/store.js +355 -173
  12. package/dashboard/index.html +19 -3
  13. package/database/replication.js +117 -37
  14. package/docs/CRYPTO-AGILITY.md +204 -0
  15. package/docs/MTLS-RESEARCH.md +367 -0
  16. package/docs/NAMCHE-SPEC.md +681 -0
  17. package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
  18. package/docs/PRECISION-DISCLOSURE.md +96 -0
  19. package/docs/README.md +76 -0
  20. package/docs/ROADMAP-2.4.0.md +447 -0
  21. package/docs/ROADMAP-2.5.0.md +244 -0
  22. package/docs/SECURITY-AUDIT-REPORT.md +306 -0
  23. package/docs/SST-INTEGRATION.md +712 -0
  24. package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
  25. package/docs/TERNARY-AUDIT-REPORT.md +247 -0
  26. package/docs/TME-FAQ.md +221 -0
  27. package/docs/WHITEPAPER.md +623 -0
  28. package/docs/adapters.html +1001 -0
  29. package/docs/advanced-systems.html +1045 -0
  30. package/docs/annex.html +1046 -0
  31. package/docs/api.html +970 -0
  32. package/docs/business/response-templates.md +160 -0
  33. package/docs/c2c.html +1225 -0
  34. package/docs/cli.html +1332 -0
  35. package/docs/configuration.html +1248 -0
  36. package/docs/darshan.html +1085 -0
  37. package/docs/dharma.html +966 -0
  38. package/docs/docs-bundle.html +1075 -0
  39. package/docs/docs.css +3120 -0
  40. package/docs/docs.js +556 -0
  41. package/docs/doko.html +969 -0
  42. package/docs/geo-proof.html +858 -0
  43. package/docs/getting-started.html +840 -0
  44. package/docs/gumba-tutorial.html +1144 -0
  45. package/docs/gumba.html +1098 -0
  46. package/docs/index.html +914 -0
  47. package/docs/jhilke.html +1312 -0
  48. package/docs/karma.html +1100 -0
  49. package/docs/katha.html +1037 -0
  50. package/docs/lama.html +978 -0
  51. package/docs/mandala.html +1067 -0
  52. package/docs/mani.html +964 -0
  53. package/docs/mantra.html +967 -0
  54. package/docs/mesh.html +1409 -0
  55. package/docs/nakpak.html +869 -0
  56. package/docs/namche.html +928 -0
  57. package/docs/nav-order.json +53 -0
  58. package/docs/prahari.html +1043 -0
  59. package/docs/prism-bash.min.js +1 -0
  60. package/docs/prism-javascript.min.js +1 -0
  61. package/docs/prism-json.min.js +1 -0
  62. package/docs/prism-tomorrow.min.css +1 -0
  63. package/docs/prism.min.js +1 -0
  64. package/docs/privacy.html +699 -0
  65. package/docs/quick-reference.html +1181 -0
  66. package/docs/sakshi.html +1402 -0
  67. package/docs/sandboxing.md +386 -0
  68. package/docs/seva.html +911 -0
  69. package/docs/sherpa.html +871 -0
  70. package/docs/studio.html +860 -0
  71. package/docs/stupa.html +995 -0
  72. package/docs/tailwind.min.css +2 -0
  73. package/docs/tattva.html +1332 -0
  74. package/docs/terms.html +686 -0
  75. package/docs/time-server-deployment.md +166 -0
  76. package/docs/time-sources.html +1392 -0
  77. package/docs/tivra.html +1127 -0
  78. package/docs/trademark-policy.html +686 -0
  79. package/docs/tribhuj.html +1183 -0
  80. package/docs/trust-security.html +1029 -0
  81. package/docs/tutorials/backup-recovery.html +654 -0
  82. package/docs/tutorials/dashboard.html +604 -0
  83. package/docs/tutorials/domain-setup.html +605 -0
  84. package/docs/tutorials/host-website.html +456 -0
  85. package/docs/tutorials/mesh-network.html +505 -0
  86. package/docs/tutorials/mobile-access.html +445 -0
  87. package/docs/tutorials/privacy.html +467 -0
  88. package/docs/tutorials/raspberry-pi.html +600 -0
  89. package/docs/tutorials/security-basics.html +539 -0
  90. package/docs/tutorials/share-files.html +431 -0
  91. package/docs/tutorials/troubleshooting.html +637 -0
  92. package/docs/tutorials/trust-karma.html +419 -0
  93. package/docs/tutorials/yak-protocol.html +456 -0
  94. package/docs/tutorials.html +1034 -0
  95. package/docs/vani.html +1270 -0
  96. package/docs/webserver.html +809 -0
  97. package/docs/yak-protocol.html +940 -0
  98. package/docs/yak-timeserver-design.md +475 -0
  99. package/docs/yakapp.html +1015 -0
  100. package/docs/ypc27.html +1069 -0
  101. package/docs/yurt.html +1344 -0
  102. package/embedded-docs/bundle.js +334 -74
  103. package/gossip/protocol.js +247 -27
  104. package/identity/key-resolver.js +262 -0
  105. package/identity/machine-seed.js +632 -0
  106. package/identity/node-key.js +669 -368
  107. package/identity/tribhuj-ratchet.js +506 -0
  108. package/knowledge-base.js +37 -8
  109. package/launcher/yakmesh.bat +62 -0
  110. package/launcher/yakmesh.sh +70 -0
  111. package/mesh/annex.js +462 -108
  112. package/mesh/beacon-broadcast.js +113 -1
  113. package/mesh/darshan.js +1718 -0
  114. package/mesh/gumba.js +1567 -0
  115. package/mesh/jhilke.js +651 -0
  116. package/mesh/katha.js +1012 -0
  117. package/mesh/nakpak-routing.js +8 -5
  118. package/mesh/network.js +724 -34
  119. package/mesh/pulse-sync.js +4 -1
  120. package/mesh/rate-limiter.js +127 -15
  121. package/mesh/seva.js +526 -0
  122. package/mesh/sherpa-discovery.js +89 -8
  123. package/mesh/sybil-defense.js +19 -5
  124. package/mesh/temporal-encoder.js +4 -3
  125. package/mesh/vani.js +1364 -0
  126. package/mesh/yurt.js +1340 -0
  127. package/models/entropy-sentinel.onnx +0 -0
  128. package/models/karma-trust.onnx +0 -0
  129. package/models/manifest.json +43 -0
  130. package/models/sakshi-anomaly.onnx +0 -0
  131. package/oracle/code-proof-protocol.js +7 -6
  132. package/oracle/codebase-lock.js +257 -28
  133. package/oracle/index.js +74 -15
  134. package/oracle/ma902-snmp.js +678 -0
  135. package/oracle/module-sealer.js +5 -3
  136. package/oracle/network-identity.js +16 -0
  137. package/oracle/packet-checksum.js +201 -0
  138. package/oracle/sst.js +579 -0
  139. package/oracle/ternary-144t.js +714 -0
  140. package/oracle/ternary-ml.js +481 -0
  141. package/oracle/time-api.js +239 -0
  142. package/oracle/time-source.js +137 -47
  143. package/oracle/validation-oracle-hardened.js +1111 -1071
  144. package/oracle/validation-oracle.js +4 -2
  145. package/oracle/ypc27.js +211 -0
  146. package/package.json +20 -3
  147. package/protocol/yak-handler.js +35 -9
  148. package/protocol/yak-protocol.js +28 -13
  149. package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
  150. package/reference/cpp/yakmesh_ypc27.cpp +179 -0
  151. package/sbom.json +87 -0
  152. package/scripts/security-audit.mjs +264 -0
  153. package/scripts/update-docs-nav.js +194 -0
  154. package/scripts/update-docs-sidebar.cjs +164 -0
  155. package/security/crypto-config.js +4 -3
  156. package/security/dharma-moderation.js +517 -0
  157. package/security/doko-identity.js +193 -143
  158. package/security/domain-consensus.js +86 -85
  159. package/security/fs-hardening.js +620 -0
  160. package/security/hardware-attestation.js +5 -3
  161. package/security/hybrid-trust.js +227 -87
  162. package/security/karma-rate-limiter.js +692 -0
  163. package/security/khata-protocol.js +22 -21
  164. package/security/khata-trust-integration.js +277 -150
  165. package/security/memory-safety.js +635 -0
  166. package/security/mesh-auth.js +11 -10
  167. package/security/mesh-revocation.js +373 -5
  168. package/security/namche-gateway.js +298 -69
  169. package/security/sakshi.js +460 -3
  170. package/security/sangha.js +770 -0
  171. package/security/secure-config.js +473 -0
  172. package/security/silicon-parity.js +13 -10
  173. package/security/steadywatch.js +1142 -0
  174. package/security/strike-system.js +32 -3
  175. package/security/temporal-signing.js +488 -0
  176. package/security/trit-commitment.js +464 -0
  177. package/server/crypto/annex.js +247 -0
  178. package/server/darshan-api.js +343 -0
  179. package/server/index.js +3259 -362
  180. package/server/komm-api.js +668 -0
  181. package/utils/accel.js +2273 -0
  182. package/utils/ternary-id.js +79 -0
  183. package/utils/verify-worker.js +57 -0
  184. package/webserver/index.js +95 -5
  185. package/assets/yakmesh-logo.png +0 -0
  186. package/assets/yakmesh-logo.svg +0 -80
  187. package/assets/yakmesh-logo2.png +0 -0
  188. package/assets/yakmesh-logo2sm.png +0 -0
  189. package/assets/ymsm.png +0 -0
  190. package/website/assets/silhouettes/adapters.svg +0 -107
  191. package/website/assets/silhouettes/api-endpoints.svg +0 -115
  192. package/website/assets/silhouettes/atomic-clock.svg +0 -83
  193. package/website/assets/silhouettes/base-camp.svg +0 -81
  194. package/website/assets/silhouettes/bridge.svg +0 -69
  195. package/website/assets/silhouettes/docs-bundle.svg +0 -113
  196. package/website/assets/silhouettes/doko-basket.svg +0 -70
  197. package/website/assets/silhouettes/fortress.svg +0 -93
  198. package/website/assets/silhouettes/gateway.svg +0 -54
  199. package/website/assets/silhouettes/gears.svg +0 -93
  200. package/website/assets/silhouettes/globe-satellite.svg +0 -67
  201. package/website/assets/silhouettes/karma-wheel.svg +0 -137
  202. package/website/assets/silhouettes/lama-council.svg +0 -141
  203. package/website/assets/silhouettes/mandala-network.svg +0 -169
  204. package/website/assets/silhouettes/mani-stones.svg +0 -149
  205. package/website/assets/silhouettes/mantra-wheel.svg +0 -116
  206. package/website/assets/silhouettes/mesh-nodes.svg +0 -113
  207. package/website/assets/silhouettes/nakpak.svg +0 -56
  208. package/website/assets/silhouettes/peak-lightning.svg +0 -73
  209. package/website/assets/silhouettes/sherpa.svg +0 -69
  210. package/website/assets/silhouettes/stupa-tower.svg +0 -119
  211. package/website/assets/silhouettes/tattva-eye.svg +0 -78
  212. package/website/assets/silhouettes/terminal.svg +0 -74
  213. package/website/assets/silhouettes/webserver.svg +0 -145
  214. package/website/assets/silhouettes/yak.svg +0 -78
  215. package/website/assets/yakmesh-logo.png +0 -0
  216. package/website/assets/yakmesh-logo.webp +0 -0
  217. package/website/assets/yakmesh-logo128x140.webp +0 -0
  218. package/website/assets/yakmesh-logo2.png +0 -0
  219. package/website/assets/yakmesh-logo2.svg +0 -51
  220. package/website/assets/yakmesh-logo40x44.webp +0 -0
  221. package/website/assets/yakmesh.gif +0 -0
  222. package/website/assets/yakmesh.ico +0 -0
  223. package/website/assets/yakmesh.jpg +0 -0
  224. package/website/assets/yakmesh.pdf +0 -0
  225. package/website/assets/yakmesh.png +0 -0
  226. package/website/assets/yakmesh.svg +0 -70
  227. package/website/assets/yakmesh128.webp +0 -0
  228. package/website/assets/yakmesh32.png +0 -0
  229. package/website/assets/yakmesh32.svg +0 -65
  230. package/website/assets/yakmesh32o.ico +0 -2
  231. package/website/assets/yakmesh32o.svg +0 -65
  232. package/website/assets/yakmesh32o.svgz +0 -0
@@ -0,0 +1,367 @@
1
+ # mTLS Research: Node-to-Node Authentication for YAKMESH
2
+
3
+ **Date**: 2026-01-18
4
+ **Status**: Research Document
5
+ **Related**: NAMCHE Specification, Domain Consensus
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ This document explores how mutual TLS (mTLS) can enhance YAKMESH's node-to-node authentication, complementing the existing ML-DSA-65 signature-based authentication with transport-level security.
12
+
13
+ **Key Findings:**
14
+ 1. mTLS without central CA is achievable using self-signed certificates bound to node identity
15
+ 2. Post-quantum TLS 1.3 with ML-KEM is emerging as a standard
16
+ 3. YAKMESH's existing DOKO certificates can serve as the trust anchor
17
+ 4. Hybrid approach recommended: ML-DSA-65 signatures + mTLS for defense-in-depth
18
+
19
+ ---
20
+
21
+ ## 1. The Challenge
22
+
23
+ ### Current State
24
+ YAKMESH nodes currently authenticate at the **application layer**:
25
+ - Messages are signed with ML-DSA-65 (post-quantum)
26
+ - Signatures are verified by receiving nodes
27
+ - Transport (WebSocket) may or may not use TLS
28
+
29
+ ### The Gap
30
+ Without transport-layer authentication:
31
+ - Network observers can see connection metadata
32
+ - Man-in-the-middle attacks require active signature forging (hard but not impossible)
33
+ - No forward secrecy for message content
34
+
35
+ ### Goal
36
+ Add **mutual TLS** where both client and server present certificates, providing:
37
+ - Transport encryption (confidentiality)
38
+ - Endpoint authentication (both sides verified)
39
+ - Forward secrecy (ephemeral keys)
40
+ - Post-quantum security (when using ML-KEM)
41
+
42
+ ---
43
+
44
+ ## 2. mTLS Without Central CA
45
+
46
+ ### The Traditional Problem
47
+ Standard mTLS requires a Certificate Authority (CA) that both parties trust.
48
+ In a decentralized network, there is no central CA.
49
+
50
+ ### Solution: Self-Certifying Identities
51
+
52
+ YAKMESH already has the primitives:
53
+ 1. **Node Identity** = ML-DSA-65 keypair
54
+ 2. **DOKO Certificate** = Self-signed identity document
55
+ 3. **KHATA Protocol** = Certificate distribution
56
+
57
+ We can create TLS certificates that:
58
+ - Are self-signed by the node's ML-DSA-65 key
59
+ - Bind the TLS certificate to the DOKO
60
+ - Are verified against known DOKOs, not a CA
61
+
62
+ ### Certificate Chain
63
+
64
+ ```
65
+ ┌─────────────────────────────────────────┐
66
+ │ DOKO (Distributed Ownership Key Object)│
67
+ │ - Signed by node's ML-DSA-65 key │
68
+ │ - Contains nodeId, publicKey │
69
+ │ - Verified via NAMCHE 7-gate check │
70
+ └─────────────────────────────────────────┘
71
+
72
+ │ binds to
73
+
74
+ ┌─────────────────────────────────────────┐
75
+ │ TLS Certificate │
76
+ │ - X.509 format for compatibility │
77
+ │ - Subject: nodeId │
78
+ │ - Public Key: derived from DOKO │
79
+ │ - Signed by: node's private key │
80
+ │ - Extension: DOKO hash reference │
81
+ └─────────────────────────────────────────┘
82
+ ```
83
+
84
+ ### Verification Process
85
+
86
+ When Node A connects to Node B:
87
+
88
+ 1. **TLS Handshake** - Certificates exchanged
89
+ 2. **Extract nodeId** - From certificate subject
90
+ 3. **Lookup DOKO** - Via KHATA protocol or local cache
91
+ 4. **Verify Binding** - Certificate pubkey matches DOKO pubkey
92
+ 5. **NAMCHE Verify** - Run 7-gate verification on DOKO
93
+ 6. **Accept/Reject** - Based on verification result
94
+
95
+ ---
96
+
97
+ ## 3. Post-Quantum TLS
98
+
99
+ ### Current Options
100
+
101
+ | Option | Algorithm | Status | Notes |
102
+ |--------|-----------|--------|-------|
103
+ | **Hybrid TLS 1.3** | X25519 + ML-KEM-768 | Draft IETF | Best near-term option |
104
+ | **Pure ML-KEM** | ML-KEM-768/1024 | Draft IETF | Future standard |
105
+ | **ML-DSA in TLS** | ML-DSA-65/87 | Experimental | For signatures |
106
+
107
+ ### ML-KEM Integration
108
+
109
+ ML-KEM (formerly Kyber) provides post-quantum key encapsulation:
110
+
111
+ ```
112
+ TLS 1.3 Handshake with Hybrid Key Exchange:
113
+
114
+ Client Server
115
+ │ │
116
+ │──── ClientHello ───────────────────────▶│
117
+ │ + key_share: X25519 + ML-KEM-768 │
118
+ │ │
119
+ │◀─── ServerHello ────────────────────────│
120
+ │ + key_share: X25519 + ML-KEM-768 │
121
+ │ │
122
+ │ [Encrypted with hybrid shared key] │
123
+ │◀─── Certificate (ML-DSA-65 signed) ─────│
124
+ │◀─── CertificateVerify ──────────────────│
125
+ │◀─── Finished ───────────────────────────│
126
+ │ │
127
+ │──── Certificate (ML-DSA-65 signed) ────▶│
128
+ │──── CertificateVerify ─────────────────▶│
129
+ │──── Finished ──────────────────────────▶│
130
+ │ │
131
+ │ [Application Data, fully encrypted] │
132
+ ```
133
+
134
+ ### Node.js Support
135
+
136
+ As of 2026, Node.js support for post-quantum TLS is emerging:
137
+
138
+ ```javascript
139
+ // Future API (when available)
140
+ const tls = require('tls');
141
+
142
+ const options = {
143
+ // Hybrid key exchange
144
+ cipherSuites: ['TLS_AES_256_GCM_SHA384'],
145
+ groups: ['x25519_mlkem768', 'x25519'], // Hybrid, fallback to classical
146
+
147
+ // ML-DSA certificate
148
+ cert: loadMLDSACertificate(),
149
+ key: loadMLDSAPrivateKey(),
150
+
151
+ // Custom verification
152
+ requestCert: true,
153
+ rejectUnauthorized: false, // We verify manually
154
+ checkServerIdentity: verifyDoko,
155
+ };
156
+ ```
157
+
158
+ ---
159
+
160
+ ## 4. Integration with NAMCHE
161
+
162
+ ### Enhanced DOKO with TLS Binding
163
+
164
+ ```javascript
165
+ {
166
+ // ... existing DOKO fields ...
167
+
168
+ // TLS binding (optional)
169
+ "tls": {
170
+ // X.509 certificate fingerprint
171
+ "certFingerprint": "sha256:AB:CD:EF:...",
172
+
173
+ // Certificate validity
174
+ "certIssuedAt": 1737200000000,
175
+ "certExpiresAt": 1768736000000,
176
+
177
+ // Supported TLS features
178
+ "supports": {
179
+ "tls13": true,
180
+ "mlkem": true,
181
+ "hybridKeyExchange": true,
182
+ }
183
+ }
184
+ }
185
+ ```
186
+
187
+ ### Verification Flow
188
+
189
+ ```javascript
190
+ async function verifyTLSConnection(peerCert, peerDoko) {
191
+ // 1. Verify DOKO via NAMCHE gateway
192
+ const dokoResult = await namcheGateway.verify(peerDoko);
193
+ if (!dokoResult.valid) {
194
+ throw new Error(`DOKO verification failed: ${dokoResult.reason}`);
195
+ }
196
+
197
+ // 2. Verify TLS certificate binds to DOKO
198
+ const certPubKey = extractPublicKey(peerCert);
199
+ const dokoPubKey = peerDoko.publicKey;
200
+
201
+ if (certPubKey !== dokoPubKey) {
202
+ throw new Error('TLS certificate does not match DOKO public key');
203
+ }
204
+
205
+ // 3. Verify certificate fingerprint if specified in DOKO
206
+ if (peerDoko.tls?.certFingerprint) {
207
+ const actualFingerprint = computeCertFingerprint(peerCert);
208
+ if (actualFingerprint !== peerDoko.tls.certFingerprint) {
209
+ throw new Error('Certificate fingerprint mismatch');
210
+ }
211
+ }
212
+
213
+ // 4. Check certificate validity
214
+ const now = Date.now();
215
+ if (peerCert.validFrom > now || peerCert.validTo < now) {
216
+ throw new Error('Certificate expired or not yet valid');
217
+ }
218
+
219
+ return { verified: true, nodeId: peerDoko.nodeId };
220
+ }
221
+ ```
222
+
223
+ ---
224
+
225
+ ## 5. Certificate Pinning Strategy
226
+
227
+ ### Recommended Approach
228
+
229
+ For YAKMESH, we recommend **DOKO-based pinning**:
230
+
231
+ ```javascript
232
+ class DokoPinning {
233
+ constructor() {
234
+ this.pinnedDokos = new Map(); // nodeId -> DOKO
235
+ }
236
+
237
+ pin(doko) {
238
+ // Only pin after NAMCHE verification
239
+ this.pinnedDokos.set(doko.nodeId, {
240
+ publicKey: doko.publicKey,
241
+ dokoHash: computeDokoHash(doko),
242
+ pinnedAt: Date.now(),
243
+ });
244
+ }
245
+
246
+ verify(nodeId, presentedCert) {
247
+ const pinned = this.pinnedDokos.get(nodeId);
248
+ if (!pinned) {
249
+ // No pin = first contact, verify via NAMCHE
250
+ return { pinned: false };
251
+ }
252
+
253
+ // Check certificate matches pinned public key
254
+ const certPubKey = extractPublicKey(presentedCert);
255
+ if (certPubKey !== pinned.publicKey) {
256
+ throw new Error('Certificate does not match pinned identity');
257
+ }
258
+
259
+ return { pinned: true, since: pinned.pinnedAt };
260
+ }
261
+ }
262
+ ```
263
+
264
+ ### Key Rotation
265
+
266
+ When a node rotates keys:
267
+
268
+ 1. Old DOKO is revoked via KHATA
269
+ 2. New DOKO is announced
270
+ 3. Peers update their pins via KHATA messages
271
+ 4. Grace period allows both old and new to be accepted
272
+
273
+ ---
274
+
275
+ ## 6. Implementation Phases
276
+
277
+ ### Phase 1: Optional TLS (Current Compatible)
278
+ - Nodes can optionally use TLS for transport
279
+ - No mTLS requirement
280
+ - SHERPA beacon advertises TLS capability
281
+
282
+ ### Phase 2: TLS with DOKO Binding
283
+ - TLS certificates bound to DOKOs
284
+ - mTLS between consenting nodes
285
+ - Classical crypto (X25519, Ed25519 fallback)
286
+
287
+ ### Phase 3: Hybrid Post-Quantum TLS
288
+ - ML-KEM for key exchange
289
+ - ML-DSA for signatures
290
+ - Fallback to classical for compatibility
291
+
292
+ ### Phase 4: Pure Post-Quantum
293
+ - ML-KEM mandatory
294
+ - ML-DSA mandatory
295
+ - Classical algorithms deprecated
296
+
297
+ ---
298
+
299
+ ## 7. Security Considerations
300
+
301
+ ### Advantages of mTLS + DOKO
302
+
303
+ | Property | mTLS Alone | DOKO Alone | mTLS + DOKO |
304
+ |----------|------------|------------|-------------|
305
+ | Transport encryption | ✅ | ❌ | ✅ |
306
+ | Forward secrecy | ✅ | ❌ | ✅ |
307
+ | Post-quantum signatures | ❌ | ✅ | ✅ |
308
+ | Post-quantum key exchange | ⚠️ | ❌ | ✅ |
309
+ | Decentralized trust | ❌ | ✅ | ✅ |
310
+ | Message-level auth | ❌ | ✅ | ✅ |
311
+
312
+ ### Attack Mitigation
313
+
314
+ | Attack | mTLS Protection | DOKO Protection |
315
+ |--------|-----------------|-----------------|
316
+ | Passive eavesdropping | ✅ Encrypted | - |
317
+ | Active MITM | ✅ Cert verification | ✅ Signature verification |
318
+ | Replay attacks | ⚠️ Connection only | ✅ Message timestamps |
319
+ | Identity spoofing | ✅ Cert pinning | ✅ NodeID derivation |
320
+ | Key compromise | ⚠️ Single point | ✅ Revocation via KHATA |
321
+
322
+ ---
323
+
324
+ ## 8. Recommendations
325
+
326
+ ### Short Term (Now)
327
+ 1. Add TLS capability advertisement to SHERPA beacons
328
+ 2. Support optional TLS for WebSocket connections
329
+ 3. Document certificate generation for node operators
330
+
331
+ ### Medium Term (6 months)
332
+ 1. Implement DOKO-to-X.509 certificate binding
333
+ 2. Add mTLS verification in mesh connections
334
+ 3. Integrate with NAMCHE gateway
335
+
336
+ ### Long Term (12+ months)
337
+ 1. Adopt hybrid ML-KEM key exchange when Node.js supports it
338
+ 2. Phase out classical-only connections
339
+ 3. Full post-quantum mTLS
340
+
341
+ ---
342
+
343
+ ## 9. References
344
+
345
+ 1. **IETF TLS 1.3 ML-KEM**: https://datatracker.ietf.org/doc/draft-ietf-tls-mlkem
346
+ 2. **OWASP Pinning Guide**: https://cheatsheetseries.owasp.org/cheatsheets/Pinning_Cheat_Sheet.html
347
+ 3. **Themis Decentralized mTLS**: https://www.cs.ox.ac.uk/files/14894/3538969.3538983.pdf
348
+ 4. **NIST FIPS 203 (ML-KEM)**: https://csrc.nist.gov/pubs/fips/203/final
349
+ 5. **NIST FIPS 204 (ML-DSA)**: https://csrc.nist.gov/pubs/fips/204/final
350
+
351
+ ---
352
+
353
+ ## 10. Conclusion
354
+
355
+ mTLS integration with YAKMESH's existing DOKO/NAMCHE system provides defense-in-depth:
356
+
357
+ - **DOKO** proves identity mathematically
358
+ - **mTLS** protects the transport layer
359
+ - **Together** they provide comprehensive security
360
+
361
+ The decentralized nature of YAKMESH eliminates the central CA problem - DOKOs verified through NAMCHE become the trust anchor for TLS certificate verification.
362
+
363
+ Post-quantum TLS (ML-KEM + ML-DSA) is the clear path forward, and YAKMESH's existing post-quantum signature infrastructure positions it well for this transition.
364
+
365
+ ---
366
+
367
+ *"The SHERPA guides, the DOKO certifies, and the encrypted tunnel protects the journey."*