@atlasauth/pca-mpc 0.1.0 → 0.3.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.
- package/LICENSE +21 -0
- package/README.md +50 -15
- package/dist/ec.d.ts +38 -18
- package/dist/ec.js +187 -18
- package/dist/ec.js.map +1 -1
- package/dist/endemic-ot.d.ts +209 -0
- package/dist/endemic-ot.js +405 -0
- package/dist/endemic-ot.js.map +1 -0
- package/dist/hybrid-ot.d.ts +153 -0
- package/dist/hybrid-ot.js +241 -0
- package/dist/hybrid-ot.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kem-ot.d.ts +167 -12
- package/dist/kem-ot.js +347 -12
- package/dist/kem-ot.js.map +1 -1
- package/package.json +31 -4
package/dist/kem-ot.js
CHANGED
|
@@ -44,30 +44,64 @@
|
|
|
44
44
|
* rests on Module-LWE (ML-KEM-768, NIST security level ~3) and a hash in the ROM — no classical
|
|
45
45
|
* discrete-log anywhere, which is the entire point of P3.
|
|
46
46
|
*
|
|
47
|
-
* ───
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
47
|
+
* ─── MALICIOUS-RECEIVER HARDENING (`kemBaseOtMal`, below) ──────────────────────────────────────────
|
|
48
|
+
* The semi-honest base OT above leaves two malicious-receiver surfaces. The committed variant
|
|
49
|
+
* `kemBaseOtMal` closes the one that CAN be closed from an opaque KEM, and documents — precisely,
|
|
50
|
+
* rather than faking a defence — the one that cannot:
|
|
51
|
+
*
|
|
52
|
+
* CLOSED (by an RO-commitment + session binding, mirroring the EC `baseOT`'s commit round):
|
|
53
|
+
* • ADAPTIVE / MALLEABLE / REPLAYED key material. The receiver first sends only a RO-commitment
|
|
54
|
+
* `com = H(rn ‖ pk_0 ‖ pk_1)` to its ordered public keys (and a receiver nonce `rn`); the sender
|
|
55
|
+
* replies with a fresh nonce `sn`; the parties set `sid = H(rn ‖ sn)`; only THEN does the receiver
|
|
56
|
+
* open `(pk_0, pk_1)` and the sender encapsulate, binding every pad to `(sid, com)`. The sender
|
|
57
|
+
* recomputes `com` from the opened keys and ABORTS on any mismatch. So the receiver must fix its
|
|
58
|
+
* keys BEFORE it learns `sn` (no adaptive/precomputed/related-key choice, no cross-session replay),
|
|
59
|
+
* and cannot open keys other than the ones it committed to — exactly the non-malleability the EC
|
|
60
|
+
* base OT gets from `R` being a single committed group element.
|
|
61
|
+
*
|
|
62
|
+
* NOT CLOSABLE from an OPAQUE ML-KEM, and WHY (an impossibility, not a shortcut):
|
|
63
|
+
* • A receiver that simply runs keygen TWICE and keeps BOTH secret keys learns both messages. To
|
|
64
|
+
* stop it the protocol would have to force one slot to a public key whose secret NOBODY knows
|
|
65
|
+
* (the Masny–Rindal "endemic OT" idea: `pk_{1−c}` derived in the public-key space from a random
|
|
66
|
+
* oracle / a common reference). That needs either (i) sampling / adding in ML-KEM's structured
|
|
67
|
+
* public-key space — reaching into the Module-LWE internals this module forbids (no hand-rolled
|
|
68
|
+
* lattice crypto), or (ii) a trusted setup / CRS. Crucially, the SAME decisional-Module-LWE
|
|
69
|
+
* indistinguishability that makes choice privacy hold (a real `pk` ≈ a uniform one) is what makes
|
|
70
|
+
* a cheating "both-keys-real" receiver UNDETECTABLE to the sender: it cannot tell a secretless
|
|
71
|
+
* slot from a real one. So this residue is intrinsic to the opaque primitive.
|
|
72
|
+
*
|
|
73
|
+
* ─── LIFTING THE RESIDUE (how this plugs into the stack) ───────────────────────────────────────────
|
|
74
|
+
* The residue is closed exactly where the EC stack closes its analogue: the KOS OT-extension (`ot.ts`).
|
|
75
|
+
* KOS runs the base OTs with ROLES INVERTED (the extension *sender* is the base *receiver*, holding the
|
|
76
|
+
* secret selector s) and adds the correlation check over sacrifice rows. A base receiver keeping both
|
|
77
|
+
* secrets maps to the extension *sender* learning the extension *receiver*'s seed pairs; the KOS
|
|
78
|
+
* consistency machinery + correlation-robust hash constrain that, raising the overall extension to
|
|
79
|
+
* malicious-with-abort against a cheating extension receiver — the attack IKNP is vulnerable to. So
|
|
80
|
+
* `kemBaseOtMal` is the right base layer: it hardens everything the opaque KEM allows (commitment /
|
|
81
|
+
* binding), and defers only the intrinsic residue to the layer that already handles it.
|
|
59
82
|
*
|
|
60
83
|
* No hand-rolled lattice crypto: all PQ operations go through `ml_kem768` (keygen/encapsulate/
|
|
61
84
|
* decapsulate) as a black box. Randomness follows the module policy — a CSPRNG (`secureOtRandom`) by
|
|
62
85
|
* default, a seeded deterministic stream ONLY when a test passes one.
|
|
63
86
|
*/
|
|
64
87
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
88
|
+
exports.KEM_OT_SECRET_BYTES = exports.KemBaseOtAbort = void 0;
|
|
65
89
|
exports.kemOtPad = kemOtPad;
|
|
66
90
|
exports.kemBaseOtReceive = kemBaseOtReceive;
|
|
67
91
|
exports.kemBaseOtSend = kemBaseOtSend;
|
|
68
92
|
exports.kemBaseOtOpen = kemBaseOtOpen;
|
|
69
93
|
exports.kemBaseOT = kemBaseOT;
|
|
70
94
|
exports.withKemBaseOt = withKemBaseOt;
|
|
95
|
+
exports.kemBaseOtMalCommit = kemBaseOtMalCommit;
|
|
96
|
+
exports.kemBaseOtMalSenderNonce = kemBaseOtMalSenderNonce;
|
|
97
|
+
exports.kemBaseOtMalOpen = kemBaseOtMalOpen;
|
|
98
|
+
exports.kemBaseOtMalSend = kemBaseOtMalSend;
|
|
99
|
+
exports.kemBaseOtMalRecover = kemBaseOtMalRecover;
|
|
100
|
+
exports.kemBaseOtMal = kemBaseOtMal;
|
|
101
|
+
exports.withKemBaseOtMal = withKemBaseOtMal;
|
|
102
|
+
exports.kemBaseOtMalRandomSend = kemBaseOtMalRandomSend;
|
|
103
|
+
exports.kemBaseOtMalRandomRecover = kemBaseOtMalRandomRecover;
|
|
104
|
+
exports.kemBaseOtMalRandom = kemBaseOtMalRandom;
|
|
71
105
|
const node_crypto_1 = require("node:crypto");
|
|
72
106
|
const ml_kem_js_1 = require("@noble/post-quantum/ml-kem.js");
|
|
73
107
|
const csprng_1 = require("./csprng");
|
|
@@ -221,4 +255,305 @@ function kemBaseOT(messages, choices, rng = (0, csprng_1.secureOtRandom)()) {
|
|
|
221
255
|
function withKemBaseOt() {
|
|
222
256
|
return { baseOtFn: kemBaseOT };
|
|
223
257
|
}
|
|
258
|
+
// ===================================================================================================
|
|
259
|
+
// MALICIOUS-RECEIVER HARDENING: the committed, session-bound KEM base OT (`kemBaseOtMal`).
|
|
260
|
+
//
|
|
261
|
+
// See the module header for the exact security model. In one line: an RO-commitment to the ordered
|
|
262
|
+
// public keys + a two-nonce session id bind the receiver's key material (commit-BEFORE the sender's
|
|
263
|
+
// nonce, open AFTER), and the sender aborts if the opened keys do not match the commitment — closing
|
|
264
|
+
// the adaptive / malleable / replay surfaces. The intrinsic "keep both secrets" residue is deferred to
|
|
265
|
+
// the KOS extension, as the header and tests document.
|
|
266
|
+
// ===================================================================================================
|
|
267
|
+
const TAG_KEMOT_COMMIT = new TextEncoder().encode('atlas-pca-mpc/kem-ot-commit');
|
|
268
|
+
const TAG_KEMOT_SID = new TextEncoder().encode('atlas-pca-mpc/kem-ot-sid');
|
|
269
|
+
const TAG_KEMOT_MALPAD = new TextEncoder().encode('atlas-pca-mpc/kem-ot-mal-pad');
|
|
270
|
+
/** Bytes of a protocol nonce (receiver `rn`, sender `sn`). */
|
|
271
|
+
const NONCE_BYTES = 32;
|
|
272
|
+
/** Raised when the committed KEM base OT aborts: a cheating receiver (opened keys ≠ commitment) is caught. */
|
|
273
|
+
class KemBaseOtAbort extends Error {
|
|
274
|
+
constructor(message) {
|
|
275
|
+
super(message);
|
|
276
|
+
this.name = 'KemBaseOtAbort';
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
exports.KemBaseOtAbort = KemBaseOtAbort;
|
|
280
|
+
/** The RO-commitment to one transfer's ordered public keys, bound to the receiver nonce `rn`. */
|
|
281
|
+
function kemMalCommit(rn, index, pk0, pk1) {
|
|
282
|
+
return sha256(TAG_KEMOT_COMMIT, rn, u32(index), pk0, pk1);
|
|
283
|
+
}
|
|
284
|
+
/** The session id `sid = H(TAG ‖ rn ‖ sn)` — both parties' nonces, so neither alone fixes it. */
|
|
285
|
+
function kemMalSid(rn, sn) {
|
|
286
|
+
return sha256(TAG_KEMOT_SID, rn, sn);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* The malicious-variant RO pad: `H(TAG ‖ sid ‖ com ‖ i ‖ slot ‖ ss)` expanded to `len` bytes. Binding
|
|
290
|
+
* the pad to `(sid, com)` ties the sender's encryption to the exact committed keys and this session, so
|
|
291
|
+
* a receiver that opens different keys (or replays another session) cannot unmask the message.
|
|
292
|
+
*/
|
|
293
|
+
function kemOtMalPad(sid, com, index, slot, sharedSecret, len) {
|
|
294
|
+
const out = new Uint8Array(len);
|
|
295
|
+
let produced = 0;
|
|
296
|
+
let ctr = 0;
|
|
297
|
+
while (produced < len) {
|
|
298
|
+
const block = sha256(TAG_KEMOT_MALPAD, sid, com, u32(index), Uint8Array.of(slot & 1), u32(ctr), sharedSecret);
|
|
299
|
+
for (let k = 0; k < block.length && produced < len; k++)
|
|
300
|
+
out[produced++] = block[k];
|
|
301
|
+
ctr++;
|
|
302
|
+
}
|
|
303
|
+
return out;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* RECEIVER round 1: generate the keypairs (keeping only the chosen secret), draw a nonce `rn`, and send
|
|
307
|
+
* only the COMMITMENTS to the ordered public keys. Returns the round-1 wire message plus the retained
|
|
308
|
+
* state (which holds the not-yet-revealed public keys for the round-3 opening).
|
|
309
|
+
*/
|
|
310
|
+
function kemBaseOtMalCommit(choices, rng = (0, csprng_1.secureOtRandom)()) {
|
|
311
|
+
const rn = rng.bytes(NONCE_BYTES);
|
|
312
|
+
const publicKeys = [];
|
|
313
|
+
const secretKeys = [];
|
|
314
|
+
const retainedChoices = [];
|
|
315
|
+
const commitments = [];
|
|
316
|
+
for (let i = 0; i < choices.length; i++) {
|
|
317
|
+
const c = choices[i] & 1;
|
|
318
|
+
const chosen = ml_kem_js_1.ml_kem768.keygen(rng.bytes(KEYGEN_SEED_BYTES));
|
|
319
|
+
const other = ml_kem_js_1.ml_kem768.keygen(rng.bytes(KEYGEN_SEED_BYTES));
|
|
320
|
+
const pk0 = c === 0 ? chosen.publicKey : other.publicKey;
|
|
321
|
+
const pk1 = c === 0 ? other.publicKey : chosen.publicKey;
|
|
322
|
+
publicKeys.push([pk0, pk1]);
|
|
323
|
+
secretKeys.push(chosen.secretKey);
|
|
324
|
+
retainedChoices.push(c);
|
|
325
|
+
commitments.push(kemMalCommit(rn, i, pk0, pk1));
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
message: { rn, commitments },
|
|
329
|
+
state: { choices: retainedChoices, secretKeys, publicKeys, rn },
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/** SENDER round 2: draw the sender nonce `sn` completing the session id. */
|
|
333
|
+
function kemBaseOtMalSenderNonce(rng = (0, csprng_1.secureOtRandom)()) {
|
|
334
|
+
return { sn: rng.bytes(NONCE_BYTES) };
|
|
335
|
+
}
|
|
336
|
+
/** RECEIVER round 3: open the committed public keys (the sender will re-check them against `com`). */
|
|
337
|
+
function kemBaseOtMalOpen(state) {
|
|
338
|
+
return { publicKeys: state.publicKeys.map(([a, b]) => [a, b]) };
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* SENDER round 4: VERIFY the opened keys against the round-1 commitments (ABORT on mismatch), then
|
|
342
|
+
* encapsulate under each and one-time-pad each message with a `(sid, com)`-bound pad.
|
|
343
|
+
*/
|
|
344
|
+
function kemBaseOtMalSend(messages, commit, senderNonce, opening, rng = (0, csprng_1.secureOtRandom)()) {
|
|
345
|
+
const { rn, commitments } = commit;
|
|
346
|
+
const { publicKeys } = opening;
|
|
347
|
+
if (messages.length !== publicKeys.length || commitments.length !== publicKeys.length) {
|
|
348
|
+
throw new Error('kemBaseOtMalSend: messages/commitments/publicKeys length mismatch');
|
|
349
|
+
}
|
|
350
|
+
const sid = kemMalSid(rn, senderNonce.sn);
|
|
351
|
+
const ciphertexts = [];
|
|
352
|
+
const encrypted = [];
|
|
353
|
+
for (let i = 0; i < messages.length; i++) {
|
|
354
|
+
const [m0, m1] = messages[i];
|
|
355
|
+
if (m0.length !== m1.length) {
|
|
356
|
+
throw new Error(`kemBaseOtMalSend (index ${i}): the two messages must be equal length`);
|
|
357
|
+
}
|
|
358
|
+
const [pk0, pk1] = publicKeys[i];
|
|
359
|
+
// The binding check: the opened keys MUST reproduce the round-1 commitment, else a cheating
|
|
360
|
+
// receiver swapped/adapted its keys after learning the sender nonce → ABORT.
|
|
361
|
+
const com = kemMalCommit(rn, i, pk0, pk1);
|
|
362
|
+
if (!constTimeEqual(com, commitments[i])) {
|
|
363
|
+
throw new KemBaseOtAbort(`kem base OT (index ${i}): opened public keys do not match the receiver's commitment; aborting`);
|
|
364
|
+
}
|
|
365
|
+
const e0 = ml_kem_js_1.ml_kem768.encapsulate(pk0, rng.bytes(ENCAPS_MSG_BYTES));
|
|
366
|
+
const e1 = ml_kem_js_1.ml_kem768.encapsulate(pk1, rng.bytes(ENCAPS_MSG_BYTES));
|
|
367
|
+
ciphertexts.push([e0.cipherText, e1.cipherText]);
|
|
368
|
+
encrypted.push([
|
|
369
|
+
xorBytes(m0, kemOtMalPad(sid, com, i, 0, e0.sharedSecret, m0.length)),
|
|
370
|
+
xorBytes(m1, kemOtMalPad(sid, com, i, 1, e1.sharedSecret, m1.length)),
|
|
371
|
+
]);
|
|
372
|
+
}
|
|
373
|
+
return { ciphertexts, encrypted };
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* RECEIVER round 5: decapsulate ONLY the chosen ciphertext and unmask with the `(sid, com)`-bound pad.
|
|
377
|
+
*/
|
|
378
|
+
function kemBaseOtMalRecover(state, senderNonce, senderMessage, tamper) {
|
|
379
|
+
const { choices, secretKeys, publicKeys, rn } = state;
|
|
380
|
+
const { ciphertexts, encrypted } = senderMessage;
|
|
381
|
+
if (ciphertexts.length !== choices.length || encrypted.length !== choices.length) {
|
|
382
|
+
throw new Error('kemBaseOtMalRecover: transcript/state length mismatch');
|
|
383
|
+
}
|
|
384
|
+
let sid = kemMalSid(rn, senderNonce.sn);
|
|
385
|
+
if (tamper?.tamperReceiverSid)
|
|
386
|
+
sid = tamper.tamperReceiverSid(sid);
|
|
387
|
+
const received = [];
|
|
388
|
+
for (let i = 0; i < choices.length; i++) {
|
|
389
|
+
const c = choices[i] & 1;
|
|
390
|
+
const [pk0, pk1] = publicKeys[i];
|
|
391
|
+
const com = kemMalCommit(rn, i, pk0, pk1);
|
|
392
|
+
const ss = ml_kem_js_1.ml_kem768.decapsulate(ciphertexts[i][c], secretKeys[i]);
|
|
393
|
+
const e = encrypted[i][c];
|
|
394
|
+
received.push(xorBytes(e, kemOtMalPad(sid, com, i, c, ss, e.length)));
|
|
395
|
+
}
|
|
396
|
+
return received;
|
|
397
|
+
}
|
|
398
|
+
/** Constant-time byte-equality (both the commitment check and length check in one place). */
|
|
399
|
+
function constTimeEqual(a, b) {
|
|
400
|
+
if (a.length !== b.length)
|
|
401
|
+
return false;
|
|
402
|
+
let diff = 0;
|
|
403
|
+
for (let i = 0; i < a.length; i++)
|
|
404
|
+
diff |= a[i] ^ b[i];
|
|
405
|
+
return diff === 0;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* In-process combined simulator for the MALICIOUS-HARDENED committed KEM base OT, matching the shape of
|
|
409
|
+
* `kemBaseOT` so it is a drop-in for `OtChannel`'s `baseOtFn` (`withKemBaseOtMal`). Runs all five
|
|
410
|
+
* rounds; a cheating receiver (opened keys ≠ commitment) makes the sender throw `KemBaseOtAbort`. The
|
|
411
|
+
* `tamper` hook injects malicious-receiver behaviour for tests.
|
|
412
|
+
*/
|
|
413
|
+
function kemBaseOtMal(messages, choices, rng = (0, csprng_1.secureOtRandom)(), tamper) {
|
|
414
|
+
if (messages.length !== choices.length) {
|
|
415
|
+
throw new Error('kemBaseOtMal: messages/choices length mismatch');
|
|
416
|
+
}
|
|
417
|
+
const { message: commit, state } = kemBaseOtMalCommit(choices, rng);
|
|
418
|
+
const senderNonce = kemBaseOtMalSenderNonce(rng);
|
|
419
|
+
const opening = kemBaseOtMalOpen(state);
|
|
420
|
+
// A malicious receiver may open keys OTHER than those it committed to (test-injected).
|
|
421
|
+
if (tamper?.tamperOpenedKeys)
|
|
422
|
+
tamper.tamperOpenedKeys(opening.publicKeys);
|
|
423
|
+
const senderMessage = kemBaseOtMalSend(messages, commit, senderNonce, opening, rng);
|
|
424
|
+
const received = kemBaseOtMalRecover(state, senderNonce, senderMessage, tamper);
|
|
425
|
+
return {
|
|
426
|
+
received,
|
|
427
|
+
transcript: {
|
|
428
|
+
rn: commit.rn,
|
|
429
|
+
commitments: commit.commitments,
|
|
430
|
+
sn: senderNonce.sn,
|
|
431
|
+
publicKeys: opening.publicKeys,
|
|
432
|
+
ciphertexts: senderMessage.ciphertexts,
|
|
433
|
+
encrypted: senderMessage.encrypted,
|
|
434
|
+
},
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Wire the MALICIOUS-HARDENED committed ML-KEM base OT into the KOS OT-extension — the recommended
|
|
439
|
+
* post-quantum base. Like `withKemBaseOt`, but the κ setup base OTs run the committed/session-bound
|
|
440
|
+
* protocol (and abort on a cheating receiver). Everything above the base OT is unchanged.
|
|
441
|
+
*
|
|
442
|
+
* const ch = new OtChannel(secureOtRandom(), withKemBaseOtMal());
|
|
443
|
+
*/
|
|
444
|
+
function withKemBaseOtMal() {
|
|
445
|
+
return { baseOtFn: (m, c, r) => kemBaseOtMal(m, c, r) };
|
|
446
|
+
}
|
|
447
|
+
// ===================================================================================================
|
|
448
|
+
// COMMITTED KEM *RANDOM* OT (`kemBaseOtMalRandom`) — the random-OT face of the hardened protocol.
|
|
449
|
+
//
|
|
450
|
+
// The chosen-message `kemBaseOtMal` above one-time-pads the sender's messages internally and never
|
|
451
|
+
// surfaces the raw KEM shared secrets. A hybrid OT COMBINER (`hybrid-ot.ts`) needs those per-slot
|
|
452
|
+
// shared secrets so it can fold them with a second base OT's secrets. This variant runs the EXACT SAME
|
|
453
|
+
// five-round committed/session-bound protocol — same `rn`/`sn`/`sid`, same RO-commitment to the ordered
|
|
454
|
+
// public keys, same ABORT on an opened-key / commitment mismatch — but instead of padding messages it
|
|
455
|
+
// returns, per transfer, a session-bound shared secret PER SLOT:
|
|
456
|
+
//
|
|
457
|
+
// ss_slot = H(TAG ‖ sid ‖ com ‖ i ‖ slot ‖ Decaps/Encaps shared secret).
|
|
458
|
+
//
|
|
459
|
+
// The SENDER derives BOTH (`senderSecrets[i] = [ss_0, ss_1]`); the honest RECEIVER derives only the
|
|
460
|
+
// chosen one (`recvSecrets[i] = ss_{choices[i]}`), because it kept only `sk_{choices[i]}`. Binding each
|
|
461
|
+
// secret to `(sid, com)` makes it non-transferable across sessions / across different opened keys —
|
|
462
|
+
// identical to how `kemOtMalPad` binds the chosen-message pad. The intrinsic "keep both secrets"
|
|
463
|
+
// residue is UNCHANGED from the chosen-message variant (an opaque IND-CCA KEM cannot stop it; see the
|
|
464
|
+
// module header) — closing it is exactly the job the hybrid combiner delegates to the EC base OT.
|
|
465
|
+
// ===================================================================================================
|
|
466
|
+
const TAG_KEMOT_MALSECRET = new TextEncoder().encode('atlas-pca-mpc/kem-ot-mal-secret');
|
|
467
|
+
/** Byte length of a derived committed-KEM random-OT shared secret. */
|
|
468
|
+
exports.KEM_OT_SECRET_BYTES = 32;
|
|
469
|
+
/**
|
|
470
|
+
* The session-bound per-slot shared secret `H(TAG ‖ sid ‖ com ‖ i ‖ slot ‖ ss)` (32 bytes). Binding to
|
|
471
|
+
* `(sid, com)` ties it to the committed keys and this exact session — the random-OT analogue of
|
|
472
|
+
* `kemOtMalPad`.
|
|
473
|
+
*/
|
|
474
|
+
function kemOtMalSecret(sid, com, index, slot, sharedSecret) {
|
|
475
|
+
return sha256(TAG_KEMOT_MALSECRET, sid, com, u32(index), Uint8Array.of(slot & 1), sharedSecret).slice(0, exports.KEM_OT_SECRET_BYTES);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* SENDER round 4 (RANDOM variant): VERIFY the opened keys against the round-1 commitments (ABORT on
|
|
479
|
+
* mismatch), encapsulate under each, and derive BOTH per-slot session-bound shared secrets. No messages
|
|
480
|
+
* are padded — the two secrets per transfer ARE the random output.
|
|
481
|
+
*/
|
|
482
|
+
function kemBaseOtMalRandomSend(commit, senderNonce, opening, rng = (0, csprng_1.secureOtRandom)()) {
|
|
483
|
+
const { rn, commitments } = commit;
|
|
484
|
+
const { publicKeys } = opening;
|
|
485
|
+
if (commitments.length !== publicKeys.length) {
|
|
486
|
+
throw new Error('kemBaseOtMalRandomSend: commitments/publicKeys length mismatch');
|
|
487
|
+
}
|
|
488
|
+
const sid = kemMalSid(rn, senderNonce.sn);
|
|
489
|
+
const ciphertexts = [];
|
|
490
|
+
const senderSecrets = [];
|
|
491
|
+
for (let i = 0; i < publicKeys.length; i++) {
|
|
492
|
+
const [pk0, pk1] = publicKeys[i];
|
|
493
|
+
// Same binding check as the chosen-message variant: opened keys MUST reproduce the commitment.
|
|
494
|
+
const com = kemMalCommit(rn, i, pk0, pk1);
|
|
495
|
+
if (!constTimeEqual(com, commitments[i])) {
|
|
496
|
+
throw new KemBaseOtAbort(`kem base OT (index ${i}): opened public keys do not match the receiver's commitment; aborting`);
|
|
497
|
+
}
|
|
498
|
+
const e0 = ml_kem_js_1.ml_kem768.encapsulate(pk0, rng.bytes(ENCAPS_MSG_BYTES));
|
|
499
|
+
const e1 = ml_kem_js_1.ml_kem768.encapsulate(pk1, rng.bytes(ENCAPS_MSG_BYTES));
|
|
500
|
+
ciphertexts.push([e0.cipherText, e1.cipherText]);
|
|
501
|
+
senderSecrets.push([
|
|
502
|
+
kemOtMalSecret(sid, com, i, 0, e0.sharedSecret),
|
|
503
|
+
kemOtMalSecret(sid, com, i, 1, e1.sharedSecret),
|
|
504
|
+
]);
|
|
505
|
+
}
|
|
506
|
+
return { ciphertexts, senderSecrets };
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* RECEIVER round 5 (RANDOM variant): decapsulate ONLY the chosen ciphertext and derive the chosen
|
|
510
|
+
* session-bound shared secret. The receiver never touches the non-chosen slot (it kept no secret for it).
|
|
511
|
+
*/
|
|
512
|
+
function kemBaseOtMalRandomRecover(state, senderNonce, senderMessage, tamper) {
|
|
513
|
+
const { choices, secretKeys, publicKeys, rn } = state;
|
|
514
|
+
const { ciphertexts } = senderMessage;
|
|
515
|
+
if (ciphertexts.length !== choices.length) {
|
|
516
|
+
throw new Error('kemBaseOtMalRandomRecover: transcript/state length mismatch');
|
|
517
|
+
}
|
|
518
|
+
let sid = kemMalSid(rn, senderNonce.sn);
|
|
519
|
+
if (tamper?.tamperReceiverSid)
|
|
520
|
+
sid = tamper.tamperReceiverSid(sid);
|
|
521
|
+
const recvSecrets = [];
|
|
522
|
+
for (let i = 0; i < choices.length; i++) {
|
|
523
|
+
const c = choices[i] & 1;
|
|
524
|
+
const [pk0, pk1] = publicKeys[i];
|
|
525
|
+
const com = kemMalCommit(rn, i, pk0, pk1);
|
|
526
|
+
const ss = ml_kem_js_1.ml_kem768.decapsulate(ciphertexts[i][c], secretKeys[i]);
|
|
527
|
+
recvSecrets.push(kemOtMalSecret(sid, com, i, c, ss));
|
|
528
|
+
}
|
|
529
|
+
return recvSecrets;
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* In-process combined simulator for the committed KEM RANDOM OT. Runs the same five rounds as
|
|
533
|
+
* `kemBaseOtMal` (commit → sender nonce → open → verify+encapsulate → recover) but outputs per-slot
|
|
534
|
+
* shared secrets instead of padded messages. A cheating receiver (opened keys ≠ commitment) makes the
|
|
535
|
+
* sender throw `KemBaseOtAbort`. The `tamper` hook injects malicious-receiver behaviour for tests.
|
|
536
|
+
*/
|
|
537
|
+
function kemBaseOtMalRandom(choices, rng = (0, csprng_1.secureOtRandom)(), tamper) {
|
|
538
|
+
const { message: commit, state } = kemBaseOtMalCommit(choices, rng);
|
|
539
|
+
const senderNonce = kemBaseOtMalSenderNonce(rng);
|
|
540
|
+
const opening = kemBaseOtMalOpen(state);
|
|
541
|
+
// A malicious receiver may open keys OTHER than those it committed to (test-injected).
|
|
542
|
+
if (tamper?.tamperOpenedKeys)
|
|
543
|
+
tamper.tamperOpenedKeys(opening.publicKeys);
|
|
544
|
+
const senderMessage = kemBaseOtMalRandomSend(commit, senderNonce, opening, rng);
|
|
545
|
+
const recvSecrets = kemBaseOtMalRandomRecover(state, senderNonce, senderMessage, tamper);
|
|
546
|
+
return {
|
|
547
|
+
senderSecrets: senderMessage.senderSecrets,
|
|
548
|
+
recvSecrets,
|
|
549
|
+
sid: kemMalSid(commit.rn, senderNonce.sn),
|
|
550
|
+
transcript: {
|
|
551
|
+
rn: commit.rn,
|
|
552
|
+
commitments: commit.commitments,
|
|
553
|
+
sn: senderNonce.sn,
|
|
554
|
+
publicKeys: opening.publicKeys,
|
|
555
|
+
ciphertexts: senderMessage.ciphertexts,
|
|
556
|
+
},
|
|
557
|
+
};
|
|
558
|
+
}
|
|
224
559
|
//# sourceMappingURL=kem-ot.js.map
|
package/dist/kem-ot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kem-ot.js","sourceRoot":"","sources":["../src/kem-ot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kem-ot.js","sourceRoot":"","sources":["../src/kem-ot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlasauth/pca-mpc",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Multi-stakeholder policy VM composed under secure multi-party computation (semi-honest additive secret sharing over a prime field) with a post-quantum base-OT. Experimental reference prototype.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"secure multi-party computation",
|
|
7
|
+
"mpc",
|
|
8
|
+
"oblivious transfer",
|
|
9
|
+
"policy vm",
|
|
10
|
+
"prototype",
|
|
11
|
+
"agent authorization",
|
|
12
|
+
"proof-carrying authority",
|
|
13
|
+
"pca",
|
|
14
|
+
"ai agents"
|
|
15
|
+
],
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"homepage": "https://github.com/Atlas-Authorization/pca#readme",
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/Atlas-Authorization/pca/issues"
|
|
20
|
+
},
|
|
21
|
+
"repository": {
|
|
22
|
+
"type": "git",
|
|
23
|
+
"url": "git+https://github.com/Atlas-Authorization/pca.git",
|
|
24
|
+
"directory": "packages/pca-mpc"
|
|
25
|
+
},
|
|
5
26
|
"main": "./dist/index.js",
|
|
6
27
|
"types": "./dist/index.d.ts",
|
|
7
28
|
"exports": {
|
|
@@ -13,7 +34,9 @@
|
|
|
13
34
|
},
|
|
14
35
|
"dependencies": {
|
|
15
36
|
"@noble/post-quantum": "^0.4.1",
|
|
16
|
-
"@atlasauth/pca": "0.
|
|
37
|
+
"@atlasauth/pca": "0.3.0",
|
|
38
|
+
"@atlasauth/pca-mpc-wasm": "0.3.0",
|
|
39
|
+
"@atlasauth/pca-mpc-lwe-ot-wasm": "0.3.0"
|
|
17
40
|
},
|
|
18
41
|
"devDependencies": {
|
|
19
42
|
"typescript": "^5.6.3",
|
|
@@ -21,8 +44,12 @@
|
|
|
21
44
|
},
|
|
22
45
|
"files": [
|
|
23
46
|
"dist",
|
|
24
|
-
"README.md"
|
|
47
|
+
"README.md",
|
|
48
|
+
"LICENSE"
|
|
25
49
|
],
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=20"
|
|
52
|
+
},
|
|
26
53
|
"publishConfig": {
|
|
27
54
|
"access": "public"
|
|
28
55
|
},
|