dajiaji/crystals-kyber-js
GitHub: dajiaji/crystals-kyber-js
一个纯 TypeScript 编写的 ML-KEM(NIST FIPS 203)后量子密钥封装实现,支持多种 JavaScript 运行时。
Stars: 54 | Forks: 10
mlkem / crystals-kyber-js
一个使用 TypeScript 编写的 ML-KEM (NIST FIPS 203) 和 CRYSTALS-KYBER 实现。
[main 文档](https://dajiaji.github.io/crystals-kyber-js/docs/main/)
本模块基于
[ntontutoveanu/crystals-kyber-javascript](https://github.com/antontutoveanu/crystals-kyber-javascript)
,但包含以下改进:
- ✅ 使用 TypeScript 编写。
- ✅ 支持多种 JavaScript 运行时:Browsers、Node.js、Deno、
Cloudflare Workers 等。
- ✅ 支持确定性密钥生成。
- ✅ 密文的恒定时间验证。
- ✅ 更好的性能:比原始
实现快 1.4 到 1.8 倍。
- ✅ 不依赖其他库。
- ✅ 支持 Tree-shaking。
- ✅ 修复 [KyberSlash](https://kyberslash.cr.yp.to/index.html) 漏洞。
- ✅ 支持 ML-KEM ([NIST FIPS 203](https://csrc.nist.gov/pubs/fips/203/final))。
- ✅ 通过了以下发布的所有测试:
- [post-quantum-cryptography/KAT/MLKEM](https://github.com/post-quantum-cryptography/KAT/tree/main/MLKEM)
- [C2SP/CCTV/ML-KEM](https://github.com/C2SP/CCTV/tree/main/ML-KEM)
- [pq-crystals/kyber](https://github.com/C2SP/CCTV/tree/main/ML-KEM) (10000
次连续测试)
本代码库包含以下包:
| package | registry | description |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| crystals-kyber-js | [](https://www.npmjs.com/package/crystals-kyber-js) | `v1.x` 实现 CRYSTALS-KYBER,`v2.x-` 实现 ML-KEM (NIST FIPS 203)。`crystals-kyber-js` 可能会在不久的将来被弃用。相反,我们建议切换到以下 `mlkem` 或 `@dajiaji/mlkem`。 |
| mlkem | [](https://www.npmjs.com/package/mlkem) | 仅实现 ML-KEM (NIST FIPS 203)。从 `v2` 版本开始,它是上述 `crystals-kyber-js` 的别名。我们建议今后使用此包。 |
| @dajiaji/mlkem | [](https://jsr.io/@dajiaji/mlkem) | 仅实现 ML-KEM (NIST FIPS 203)。它是 [jsr.io](https://jsr.io/) 的 ML-KEM 包。上述 `mlkem` 是 `@dajiaji/mlkem` 的 npm 包,已使用 [@deno/dnt](https://github.com/denoland/dnt) 转换。 |
对于 Node.js,你可以通过 npm、yarn 或
pnpm 安装 `mlkem` 或 `crystals-kyber-js`:
```
# 推荐使用 `mlkem`
npm install mlkem
# `crystals-kyber-js` 仍可使用,但可能在不久后被弃用。
npm install crystals-kyber-js
```
然后,你可以按如下方式使用它:
```
import { MlKem768 } from "mlkem"; // or from "crystals-kyber-js"
async function doMlKem() {
// A recipient generates a key pair.
const recipient = new MlKem768(); // MlKem512 and MlKem1024 are also available.
const [pkR, skR] = await recipient.generateKeyPair();
//// Deterministic key generation is also supported
// const seed = new Uint8Array(64);
// globalThis.crypto.getRandomValues(seed); // node >= 19
// const [pkR, skR] = await recipient.deriveKeyPair(seed);
// A sender generates a ciphertext and a shared secret with pkR.
const sender = new MlKem768();
const [ct, ssS] = await sender.encap(pkR);
// The recipient decapsulates the ciphertext and generates the same shared secret with skR.
const ssR = await recipient.decap(ct, skR);
// ssS === ssR
return;
}
try {
doMlKem();
} catch (err: unknown) {
console.log("failed:", (err as Error).message);
}
```
## 目录
- [安装](#installation)
- [Node.js](#nodejs)
- [Deno](#deno)
- [Cloudflare Workers](#cloudflare-workers)
- [Bun](#bun)
- [Web 浏览器](#web-browsers)
- [用法](#usage)
- [贡献](#contributing)
## 安装
### Node.js
```
# 使用 npm:
npm install mlkem # or crystals-kyber-js
yarn add mlkem # or crystals-kyber-js
pnpm install mlkem # or crystals-kyber-js
# 使用 jsr:
npx jsr add @dajiaji/mlkem
yarn dlx jsr add @dajiaji/mlkem
pnpm dlx jsr add @dajiaji/mlkem
```
### Deno
从 2.0.0 版本开始,`@dajiaji/mlkem` 可在
[jsr.io](https://jsr.io) 上获取。从该版本起,请在 Deno 中使用 JSR 导入
代替 HTTPS 导入。
**JSR 导入 (`>=2.0.0`):**
使用以下命令添加 `@dajiaji/mlkem` 包:
```
deno add @dajiaji/mlkem
```
然后,你可以像这样在代码中使用该模块:
```
import { MlKem1024, MlKem512, MlKem768 } from "@dajiaji/mlkem";
```
**HTTPS 导入 (已弃用):**
```
import {
Kyber1024,
Kyber512,
Kyber768,
} from "https://deno.land/x/crystals_kyber@标签:Bun, Cilium, CMS安全, CRYSTALS-Kyber, Deno, GNU通用公共许可证, JavaScript, JSR, KEM, KyberSlash, MITM代理, ML-KEM, NIST FIPS 203, Node.js, NPM, PQC, TypeScript, Web Cryptography, 加密算法, 后量子密码学, 安全插件, 密钥封装机制, 恒定时间编程, 抗量子计算, 数据可视化, 格密码学, 浏览器, 程序员工具, 网络安全, 自动化攻击, 自动化攻击, 自动化攻击, 隐私保护, 零依赖