From 10f0e9d54c939da27b5062a18e38ede4551cb486 Mon Sep 17 00:00:00 2001 From: larabr <7375870+larabr@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:14:36 +0100 Subject: [PATCH] WIP: add ML-DSA + Ed25519 (Node only) Dilithium lib uses Buffer and doesn't work with browser --- package-lock.json | 94 ++ package.json | 1 + rollup.config.js | 2 +- src/crypto/crypto.js | 20 +- src/crypto/public_key/post_quantum/index.js | 4 +- .../post_quantum/signature/ecc_dsa.js | 40 + .../post_quantum/signature/index.js | 1 + .../post_quantum/signature/ml_dsa.js | 47 + .../post_quantum/signature/signature.js | 41 + src/crypto/signature.js | 15 + src/enums.js | 3 + src/key/helper.js | 1 + test/crypto/postQuantum.js | 1165 +++++++++++++++++ 13 files changed, 1431 insertions(+), 3 deletions(-) create mode 100644 src/crypto/public_key/post_quantum/signature/ecc_dsa.js create mode 100644 src/crypto/public_key/post_quantum/signature/index.js create mode 100644 src/crypto/public_key/post_quantum/signature/ml_dsa.js create mode 100644 src/crypto/public_key/post_quantum/signature/signature.js diff --git a/package-lock.json b/package-lock.json index 01b771d53..1c7255e82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "6.0.0-beta.3.patch.1", "license": "LGPL-3.0+", "devDependencies": { + "@asanrom/dilithium": "^1.1.0", "@noble/ciphers": "^0.6.0", "@noble/curves": "^1.6.0", "@noble/ed25519": "^1.7.3", @@ -65,6 +66,20 @@ "node": ">= 18.0.0" } }, + "node_modules/@asanrom/dilithium": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@asanrom/dilithium/-/dilithium-1.1.0.tgz", + "integrity": "sha512-BDzk5QmTfknoneVixJ6xotruqFB+bCYAMTzF14fwKIOrusFSpzJzIpTugvpWKovULcC+OxDwexobwB/BUlaIug==", + "dev": true, + "dependencies": { + "long": "5.2.0", + "randombytes": "2.1.0", + "sha3": "2.1.4" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -2140,6 +2155,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -2297,6 +2332,30 @@ "node": ">= 6" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4687,6 +4746,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5978,6 +6057,12 @@ "node": ">=8.0" } }, + "node_modules/long": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz", + "integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==", + "dev": true + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7460,6 +7545,15 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, + "node_modules/sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", + "dev": true, + "dependencies": { + "buffer": "6.0.3" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index 13a1cf527..6c73bfd9e 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "@noble/ed25519": "^1.7.3", "@noble/hashes": "^1.5.0", "@noble/post-quantum": "^0.2.0", + "@asanrom/dilithium": "^1.1.0", "@openpgp/jsdoc": "^3.6.11", "@openpgp/seek-bzip": "^1.0.5-git", "@openpgp/tweetnacl": "^1.0.4-1", diff --git a/rollup.config.js b/rollup.config.js index 1f0e895a6..6c9febe2d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -25,7 +25,7 @@ const wasmOptions = { const getChunkFileName = (chunkInfo, extension) => { // index files result in chunks named simply 'index', so we rename them to include the package name - if (chunkInfo.name === 'index') { + if (chunkInfo.name === 'index' && chunkInfo.facadeModuleId) { const packageName = chunkInfo.facadeModuleId.split('/').at(-2); // assume index file is under the root folder return `${packageName}.${extension}`; } diff --git a/src/crypto/crypto.js b/src/crypto/crypto.js index 592ab6811..8cbc2099e 100644 --- a/src/crypto/crypto.js +++ b/src/crypto/crypto.js @@ -247,6 +247,11 @@ export function parsePublicKeyParams(algo, bytes) { const mlkemPublicKey = util.readExactSubarray(bytes, read, read + 1184); read += mlkemPublicKey.length; return { read, publicParams: { eccPublicKey, mlkemPublicKey } }; } + case enums.publicKey.pqc_mldsa_ed25519: { + const eccPublicKey = util.readExactSubarray(bytes, read, read + getCurvePayloadSize(enums.publicKey.ed25519)); read += eccPublicKey.length; + const mldsaPublicKey = util.readExactSubarray(bytes, read, read + 1952); read += mldsaPublicKey.length; + return { read, publicParams: { eccPublicKey, mldsaPublicKey } }; + } default: throw new UnsupportedError('Unknown public key encryption algorithm.'); } @@ -323,6 +328,11 @@ export function parsePrivateKeyParams(algo, bytes, publicParams) { const mlkemSecretKey = util.readExactSubarray(bytes, read, read + 2400); read += mlkemSecretKey.length; return { read, privateParams: { eccSecretKey, mlkemSecretKey } }; } + case enums.publicKey.pqc_mldsa_x25519: { + const eccSecretKey = util.readExactSubarray(bytes, read, read + getCurvePayloadSize(enums.publicKey.ed25519)); read += eccSecretKey.length; + const mldsaSecretKey = util.readExactSubarray(bytes, read, read + 4032); read += mldsaSecretKey.length; + return { read, privateParams: { eccSecretKey, mldsaSecretKey } }; + } default: throw new UnsupportedError('Unknown public key encryption algorithm.'); } @@ -412,7 +422,8 @@ export function serializeParams(algo, params) { enums.publicKey.x448, enums.publicKey.aead, enums.publicKey.hmac, - enums.publicKey.pqc_mlkem_x25519 + enums.publicKey.pqc_mlkem_x25519, + enums.publicKey.pqc_mldsa_ed25519 ]); const orderedParams = Object.keys(params).map(name => { const param = params[name]; @@ -484,6 +495,11 @@ export async function generateParams(algo, bits, oid, symmetric) { privateParams: { eccSecretKey, mlkemSecretKey }, publicParams: { eccPublicKey, mlkemPublicKey } })); + case enums.publicKey.pqc_mldsa_ed25519: + return publicKey.postQuantum.signature.generate(algo).then(({ eccSecretKey, eccPublicKey, mldsaSecretKey, mldsaPublicKey }) => ({ + privateParams: { eccSecretKey, mldsaSecretKey }, + publicParams: { eccPublicKey, mldsaPublicKey } + })); case enums.publicKey.dsa: case enums.publicKey.elgamal: throw new Error('Unsupported algorithm for key generation.'); @@ -580,6 +596,8 @@ export async function validateParams(algo, publicParams, privateParams) { const { eccPublicKey, mlkemPublicKey } = publicParams; return publicKey.postQuantum.kem.validateParams(algo, eccPublicKey, eccSecretKey, mlkemPublicKey, mlkemSecretKey); } + case enums.publicKey.pqc_mldsa_ed25519: + throw new Error('TODO'); default: throw new Error('Unknown public key algorithm.'); } diff --git a/src/crypto/public_key/post_quantum/index.js b/src/crypto/public_key/post_quantum/index.js index 982b28be7..cf803ef88 100644 --- a/src/crypto/public_key/post_quantum/index.js +++ b/src/crypto/public_key/post_quantum/index.js @@ -1,5 +1,7 @@ import * as kem from './kem/index'; +import * as signature from './signature'; export { - kem + kem, + signature }; diff --git a/src/crypto/public_key/post_quantum/signature/ecc_dsa.js b/src/crypto/public_key/post_quantum/signature/ecc_dsa.js new file mode 100644 index 000000000..59e0f0e10 --- /dev/null +++ b/src/crypto/public_key/post_quantum/signature/ecc_dsa.js @@ -0,0 +1,40 @@ +// TODOOOOO is this file needed? vs inlining calls in signature.js? + + +import * as eddsa from '../../elliptic/eddsa'; +import enums from '../../../../enums'; + +export async function generate(algo) { + switch (algo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { A, seed } = await eddsa.generate(enums.publicKey.ed25519); + return { + eccPublicKey: A, + eccSecretKey: seed + }; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} + +export async function sign(signatureAlgo, hashAlgo, eccSecretKey, eccPublicKey, dataDigest) { + switch (signatureAlgo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { RS: eccSignature } = await eddsa.sign(enums.publicKey.ed25519, hashAlgo, null, eccPublicKey, eccSecretKey, dataDigest); + + return { eccSignature }; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} + +export async function verify(signatureAlgo, hashAlgo, eccPublicKey, dataDigest, eccSignature) { + switch (signatureAlgo) { + case enums.publicKey.pqc_mldsa_ed25519: + return eddsa.verify(enums.publicKey.ed25519, hashAlgo, { RS: eccSignature }, null, eccPublicKey, dataDigest); + default: + throw new Error('Unsupported signature algorithm'); + } +} diff --git a/src/crypto/public_key/post_quantum/signature/index.js b/src/crypto/public_key/post_quantum/signature/index.js new file mode 100644 index 000000000..190945ecb --- /dev/null +++ b/src/crypto/public_key/post_quantum/signature/index.js @@ -0,0 +1 @@ +export { generate, sign, verify } from './signature'; diff --git a/src/crypto/public_key/post_quantum/signature/ml_dsa.js b/src/crypto/public_key/post_quantum/signature/ml_dsa.js new file mode 100644 index 000000000..55c1b0da8 --- /dev/null +++ b/src/crypto/public_key/post_quantum/signature/ml_dsa.js @@ -0,0 +1,47 @@ +import enums from '../../../../enums'; + +export async function generate(algo) { + switch (algo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { DilithiumKeyPair, DilithiumLevel } = await import('@asanrom/dilithium'); + + const level = DilithiumLevel.get(3); + const keyPair = DilithiumKeyPair.generate(level); + + const mldsaSecretKey = keyPair.getPrivateKey().getBytes(); + const mldsaPublicKey = keyPair.getPublicKey().getBytes(); + + return { mldsaSecretKey, mldsaPublicKey }; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} + +export async function sign(algo, mldsaSecretKey, dataDigest) { + switch (algo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { DilithiumPrivateKey, DilithiumLevel } = await import('@asanrom/dilithium'); + const level = DilithiumLevel.get(3); + const secretKey = DilithiumPrivateKey.fromBytes(mldsaSecretKey, level); + const mldsaSignature = secretKey.sign(dataDigest).getBytes(); + return { mldsaSignature }; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} + +export async function verify(algo, mldsaPublicKey, dataDigest, mldsaSignature) { + switch (algo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { DilithiumPublicKey, DilithiumSignature, DilithiumLevel } = await import('@asanrom/dilithium'); + const level = DilithiumLevel.get(3); + const publicKey = DilithiumPublicKey.fromBytes(mldsaPublicKey, level); + const signature = DilithiumSignature.fromBytes(mldsaSignature, level); + return publicKey.verifySignature(dataDigest, signature); + } + default: + throw new Error('Unsupported signature algorithm'); + } +} diff --git a/src/crypto/public_key/post_quantum/signature/signature.js b/src/crypto/public_key/post_quantum/signature/signature.js new file mode 100644 index 000000000..a72c9f9db --- /dev/null +++ b/src/crypto/public_key/post_quantum/signature/signature.js @@ -0,0 +1,41 @@ +import enums from '../../../../enums'; +import * as mldsa from './ml_dsa'; +import * as eccdsa from './ecc_dsa'; + +export async function generate(algo) { + switch (algo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { eccSecretKey, eccPublicKey } = await eccdsa.generate(algo); + const { mldsaSecretKey, mldsaPublicKey } = await mldsa.generate(algo); + return { eccSecretKey, eccPublicKey, mldsaSecretKey, mldsaPublicKey }; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} + +export async function sign(signatureAlgo, hashAlgo, eccSecretKey, eccPublicKey, mldsaSecretKey, dataDigest) { + switch (signatureAlgo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const { eccSignature } = await eccdsa.sign(signatureAlgo, hashAlgo, eccSecretKey, eccPublicKey, dataDigest); + const { mldsaSignature } = await mldsa.sign(signatureAlgo, mldsaSecretKey, dataDigest); + + return { eccSignature, mldsaSignature }; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} + +export async function verify(signatureAlgo, hashAlgo, eccPublicKey, mldsaPublicKey, dataDigest, { eccSignature, mldsaSignature }) { + switch (signatureAlgo) { + case enums.publicKey.pqc_mldsa_ed25519: { + const eccVerifiedPromise = eccdsa.verify(signatureAlgo, hashAlgo, eccPublicKey, dataDigest, eccSignature); + const mldsaVerifiedPromise = mldsa.verify(signatureAlgo, mldsaPublicKey, dataDigest, mldsaSignature); + const verified = await eccVerifiedPromise && await mldsaVerifiedPromise; + return verified; + } + default: + throw new Error('Unsupported signature algorithm'); + } +} diff --git a/src/crypto/signature.js b/src/crypto/signature.js index 73f175429..c5970808d 100644 --- a/src/crypto/signature.js +++ b/src/crypto/signature.js @@ -69,6 +69,12 @@ export function parseSignatureParams(algo, signature) { const mac = new ShortByteString(); read += mac.read(signature.subarray(read)); return { read, signatureParams: { mac } }; } + case enums.publicKey.pqc_mldsa_ed25519: { + const eccSignatureSize = 2 * publicKey.elliptic.eddsa.getPayloadSize(algo); + const eccSignature = util.readExactSubarray(signature, read, read + eccSignatureSize); read += eccSignature.length; + const mldsaSignature = util.readExactSubarray(signature, read, read + 3309); read += mldsaSignature.length; + return { read, signatureParams: { eccSignature, mldsaSignature } }; + } default: throw new UnsupportedError('Unknown signature algorithm.'); } @@ -129,6 +135,10 @@ export async function verify(algo, hashAlgo, signature, publicParams, privatePar const { keyMaterial } = privateParams; return publicKey.hmac.verify(algo.getValue(), keyMaterial, signature.mac.data, hashed); } + case enums.publicKey.pqc_mldsa_ed25519: { + const { eccPublicKey, mldsaPublicKey } = publicParams; + return publicKey.postQuantum.signature.verify(algo, hashAlgo, eccPublicKey, mldsaPublicKey, hashed, signature); + } default: throw new Error('Unknown signature algorithm.'); } @@ -190,6 +200,11 @@ export async function sign(algo, hashAlgo, publicKeyParams, privateKeyParams, da const mac = await publicKey.hmac.sign(algo.getValue(), keyMaterial, hashed); return { mac: new ShortByteString(mac) }; } + case enums.publicKey.pqc_mldsa_ed25519: { + const { eccPublicKey } = publicKeyParams; + const { eccSecretKey, mldsaSecretKey } = privateKeyParams; + return publicKey.postQuantum.signature.sign(algo, hashAlgo, eccSecretKey, eccPublicKey, mldsaSecretKey, hashed); + } default: throw new Error('Unknown signature algorithm.'); } diff --git a/src/enums.js b/src/enums.js index 0872bcd4b..2d842b77d 100644 --- a/src/enums.js +++ b/src/enums.js @@ -110,6 +110,9 @@ export default { ed448: 28, /** Post-quantum ML-KEM-768 + X25519 (Encrypt only) */ pqc_mlkem_x25519: 105, + /** Post-quantum ML-DSA-64 + Ed25519 (Sign only) */ + pqc_mldsa_ed25519: 107, + /** Persistent symmetric keys: encryption algorithm */ aead: 100, /** Persistent symmetric keys: authentication algorithm */ diff --git a/src/key/helper.js b/src/key/helper.js index 2fe2d180a..0ea42b668 100644 --- a/src/key/helper.js +++ b/src/key/helper.js @@ -414,6 +414,7 @@ export function validateSigningKeyPacket(keyPacket, signature, config) { case enums.publicKey.ed25519: case enums.publicKey.ed448: case enums.publicKey.hmac: + case enums.publicKey.pqc_mldsa_ed25519: if (!signature.keyFlags && !config.allowMissingKeyFlags) { throw new Error('None of the key flags is set: consider passing `config.allowMissingKeyFlags`'); } diff --git a/test/crypto/postQuantum.js b/test/crypto/postQuantum.js index 4e95ad3f5..94cf433f0 100644 --- a/test/crypto/postQuantum.js +++ b/test/crypto/postQuantum.js @@ -1,9 +1,11 @@ +/* eslint-disable max-lines */ import { use as chaiUse, expect } from 'chai'; import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import chaiUse(chaiAsPromised); import openpgp from '../initOpenpgp.js'; import { generateParams, publicKeyEncrypt, publicKeyDecrypt } from '../../src/crypto/crypto.js'; +import { sign, verify } from '../../src/crypto/signature.js'; export default () => describe('PQC', function () { it('ML-KEM + X25519 - Generate/encrypt/decrypt', async function () { @@ -133,4 +135,1167 @@ gxa3/Jm0tqLUHAEAyyV5473sqcilThIyTdMYnpu1TCFoX+IBvj3U4JML+As= }); expect(decryptedData).to.equal('hello world\n'); }); + + it('ML-DSA + Ed25519 - Generate/sign/verify', async function () { + const digest = new Uint8Array(32).fill(1); + const hashAlgo = openpgp.enums.hash.sha256; + + const { privateParams, publicParams } = await generateParams(openpgp.enums.publicKey.pqc_mldsa_ed25519); + const signature = await sign(openpgp.enums.publicKey.pqc_mldsa_ed25519, hashAlgo, publicParams, privateParams, null, digest); + const verified = await verify(openpgp.enums.publicKey.pqc_mldsa_ed25519, hashAlgo, signature, publicParams, null, null, digest); + expect(verified).to.be.true; + }); + + it('ML-DSA + Ed25519 - Test vector', async function () { + const privateKey = await openpgp.readKey({ armoredKey: `-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +-----END PGP PRIVATE KEY BLOCK-----` }); + + const publicKey = await openpgp.readKey({ armoredKey: `-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +AAAAAAAAAAAACA0SFx8k +-----END PGP PUBLIC KEY BLOCK-----` }); + + const signingKey1 = await privateKey.getSigningKey(); + const signingKey2 = await publicKey.getSigningKey(); + + expect(signingKey1.getKeyID().equals(signingKey2.getKeyID())).to.be.true; + }); + + it('ML-DSA + ML-KEM - encrypt/sign and decrypt/verify', async function () { + const privateKey = await openpgp.readKey({ armoredKey: `-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +-----END PGP PRIVATE KEY BLOCK-----` }); + const publicKey = privateKey.toPublic(); + + const plaintext = 'test'; + const encrypted = await openpgp.encrypt({ message: await openpgp.createMessage({ text: plaintext }), signingKeys: privateKey, encryptionKeys: publicKey }); + const { data, signatures: [{ verified }] } = await openpgp.decrypt({ message: await openpgp.readMessage({ armoredMessage: encrypted }), verificationKeys: publicKey, decryptionKeys: privateKey }); + expect(data).to.equal(plaintext); + await expect(verified).to.eventually.be.true; + }); });