2key-ratchet

中文文档
1.0.18发布于 2020/05/25https://github.com/PeculiarVentures/2key-ratchet/blob/master/LICENSE.mdTypeScriptESM + CJS近 30 天下载 3519

2key-ratchet是使用WebCrypto在TypeScript中执行双Ratchet协议和X3DH.

中文使用文档
文档目录15 节
  1. 概览
  2. 身份钥匙
  3. 交换键
  4. 预键
  5. 服务器
  6. 会议
  7. 大小和附属关系
  8. 说明
  9. 安装
  10. 使用量
  11. 捐款
  12. 说明
  13. 警告
  14. 鸣谢
  15. 相关

2个键盘

CircleCI License Coverage Status npm version

NPM

2key-ratchet 执行 双键 礼宾和 X3DH 密码 使用 WebCrypto 键入脚本.

设计双层雷管协议和X3DH的目的是既提供前向保密又提供密码解密。 重要的是,有一些独立的 安保审查 最后,他们完成了这些目标.

“双重Ratchet”一词来源于协议如何确保每个消息都得到一个新的密钥: Diffie-Hellman 键被“切开” 以每个新信件交换方式进行; 发送/接收链条也是如此 “对称-钥匙鼠标”) (中文(简体) ).

有几个 差异 原规格与 2key-ratchet最重要的是,正如它的名字所示,它使用 二键,一个用于认证,另一个用于密钥交换。 另一个大个是使用secp256r1代替了曲线25519,因为浏览器尚未在本土支持这个曲线.

见 智利 文档以更好地了解库结构.

对于你可能使用的地方的想法 2key-ratchet 见 萨尔瓦多 文档.

关于许可证发放信息,见 自由主义 文档.

概览

身份钥匙

协议中的每个对等方都有 IdentityKey,这些是 sepp256r1 键。 这些密钥用来验证两者 PreKeys 财务报告和审定财务报表 ExchangeKeys。 。 。 . IdentityKeys 在X.509证书中与公用钥匙类似.

交换键

交换钥匙由 2key-ratchet,用来获取 PreKeys编辑 ExchangeKey 由同行签名 IdentityKey。 。 。 .

预键

单位 2key-ratchet a PreKey是一个有相关独特标识的secp256r1公钥. 这些 PreKeys 由 IdentityKey。 。 。 .

在第一次使用时,客户端生成一个签名的PreKey,以及大量未签名的PreKeys列表,并将其全部传送给服务器.

服务器

协议中的服务器是一个不值得信赖的实体,它只是存储预键进行检索,当对等点可能离线和无法到达时.

会议

双射纹协议面向会话. 同伴建立一个 session 互相交流,然后用于随后的所有交流。 这些会话可以保持开放并被重新使用,因为每条消息都用新的和独特的加密密钥加密.

大小和附属关系

名称大小说明
2key-ratchet.js (英语)66个Kb没有外部模块的 UMD 模块

注: 您还必须导入 tslib 语录 财务报告和审定财务报表 原生生物库 用于浏览器.

说明

安装

npm install 2key-ratchet

使用量

包含 2key-ratchet 及其申请中的依赖性.

诺德杰斯:

let DKeyRatchet = require("2key-ratchet");

布鲁斯:

<script src="2key-ratchet.js"></script>

这个 DKeyRatchet 命名空间将永远在全球提供,并支持AMD加载器.

生成身份密钥

第一步是创建"身份钥匙".

let AliceID;
DKeyRatchet.Identity.create(16453, 1, 1)
    .then((id) => {
        AliceID = id;
    });

然后创建您的 PreKey 信件捆绑 :

let bundle = new DKeyRatchet.PreKeyBundleProtocol();

bundle.identity.fill(AliceID)
    .then(() => {
        bundle.registrationId = AliceID.id;
        const preKey = AliceID.signedPreKeys[0];
        bundle.preKeySigned.id = 1;
        bundle.preKeySigned.key = preKey.publicKey;
        return bundle.preKeySigned.sign(AliceID.signingKey.privateKey);
    })
    .then(() => {
        return bundle.exportProto();
    })
    .then((ab) => {
        console.log(ab); // ArrayBuffer { byteLength: 374 }
    });

然后导入生成的 PreKey 信件捆绑 :

DKeyRatchet.PreKeyBundleProtocol.importProto(ab)
    .then((bundle) => {
        // check signed prekey
        return bundle.preKeySigned.verify(AliceID.signingKey.publicKey);
    })
    .then((trusted) => {
        if (!trusted)
            throw new Error("Error: The PreKey is not trusted");
    })

创建会话

您现在可以创建一个会话:

注:数据转换使用了模块 pvtsutils。 。 。 .

DKeyRatchet.AsymmetricRatchet.create(BobID, bundle)
    .then((cipher) => {
        return cipher.encrypt(Convert.FromUtf8String("Hello world!"));
    })
    .then((preKeyMessage) => {
        return preKeyMessage.exportProto();
    })
    .then((BobMessage) => {
        console.log(BobMessage); // ArrayBuffer {byteLength: 408}
    });

在另一边你也会这么做:

// Parse received bytes to proto
return DKeyRatchet.PreKeyMessageProtocol.importProto(BobMessage)
    .then((proto) => {
        return DKeyRatchet.AsymmetricRatchet.create(AliceID, proto)
            .then((cipher) => {
                return cipher.decrypt(proto.signedMessage);
            })
            .then((message) => {
                console.log(Convert.ToUtf8String(message)); // Hello world!
            });
    });

我们有一个 完整的示例, 您可以在这里查看。 。 。 .

捐款

如果你发现2键滑板有问题,请打开一出新作. 特色要求也是受欢迎的.

拉出请求 — — 补丁、改进、新功能 — — 是一个了不起的帮助。 在提出任何重大拉动请求(例如执行新功能)之前,请先询问.

说明

布鲁斯·施奈尔(Bruce Schneier)出名地说"如果你认为密码学可以解决你的问题,那么你就不了解你的问题,也不懂密码". 要点是,使用2key-ratchet,或者任何其他"与计算机相关的"库,并不一定会让你的产品安全.

简而言之,制造安全产品比添加加密技术要多得多, 这是一本很棒的书 让你熟悉防御性思维。 。 。 .

警告

虽然这个图书馆是基于 双射纹算法 财务报告和审定财务报表 x3DH 关键协议议定书 多个 变动 可能改变它们提供的安全财产。 此时,你应当认为,在完成进一步的安保审查之前,这一执行是适当的.

鸣谢

Double Ratchet和X3DH都是由特雷弗·佩林和莫克西·马林斯派克设计的,我们感谢他们的工作.

版本与发布记录

2key-ratchet 共发布 17 个版本,首次发布于 2017/05/25;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.18latest2020/05/256 年前
1.0.172020/04/166 年前
1.0.162020/04/016 年前
1.0.152020/03/156 年前
1.0.142019/02/197 年前
1.0.132018/06/228 年前

关于 2key-ratchet 的常见问题

2key-ratchet 是什么?

2key-ratchet是使用WebCrypto在TypeScript中执行双Ratchet协议和X3DH.

如何安装 2key-ratchet?

在项目目录运行 npm install 2key-ratchet,或使用 pnpm add / yarn add / bun add。

2key-ratchet 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

2key-ratchet 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

2key-ratchet 可以商用吗?

2key-ratchet 使用 https://github.com/PeculiarVentures/2key-ratchet/blob/master/LICENSE.md 许可。声明的许可为 https://github.com/PeculiarVentures/2key-ratchet/blob/master/LICENSE.md,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

2key-ratchet 的下载量有多少?

根据 npm 官方下载统计,2key-ratchet 在 2026/10/04 – 2026/11/02 这 30 天内被下载 3,519 次,日均约 117 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

2key-ratchet 还在维护吗?

最新版本 1.0.18 发布于 2020/05/25(6 年前);至今共发布 17 个版本,其中过去 12 个月发布了 0 个;首次发布于 2017/05/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。