voprf-ts:一个用于 Oblivious Pseudorandom 函数的 TypeScript 库 (OPRF)
一个 无法识别的 Pseudorandom 函数 是一个客户端和服务器之间的双方协议,用于计算一个Pseudorandom函数(PRF)的输出.
服务器提供PRF密钥,客户端提供PRF输入. 协议结束时,客户端在不学习PRF密钥的情况下学习了PRF输出,服务器既不学习PRF输入,也不学习输出.
A 类 可核查业务报告框架 确保客户端能够验证服务器在执行协议时使用了特定的私人密钥.
A 类 部分失明( POPRF) 扩展一个VOPRF,允许客户端和服务器为PRF计算提供公共共享输入.
| 规格 : RFC 9497 (韩语) |
|---|
此库支持所有三种模式 :
Oprf.Mode.OPRF
Oprf.Mode.VOPRF
Oprf.Mode.POPRF
并支持以下与基本组和所使用散列相对应的套件:
Oprf.Suite.P256_SHA256
Oprf.Suite.P384_SHA384
Oprf.Suite.P521_SHA512
在使用该套房时,还支持其他套房 @ noble/ 曲线 对话框为 CryptoProvider。见 实例/图片/索引.ts 设置此选项 CryptoProvider。 。 。 .
Oprf.Suite.RISTRETTO255_SHA512
Oprf.Suite.DECAF448_SHAKE256
使用量
步骤1
首先设置客户端和服务器. 在这个例子中,我们使用VOPRF模式与套件P384-SHA384.
import {
Oprf, VOPRFClient, VOPRFServer, generatePublicKey, randomPrivateKey
} from '@cloudflare/voprf-ts';
const suite = Oprf.Suite.P384_SHA384;
const privateKey = await randomPrivateKey(suite);
const publicKey = generatePublicKey(suite, privateKey);
const server = new VOPRFServer(suite, privateKey);
const client = new VOPRFClient(suite, publicKey);
步骤2
客户端准备任意输入,由服务器进行批量评价. 失明方法产生评价请求,以及一些定稿后使用的数据。 然后,客户端向服务器发送评价请求.
const input = new TextEncoder().encode('This is the client's input');
const batch = [input]
const [finData, evalReq] = await client.blind(batch);
步骤3
服务器收到评价请求后,会以评价回复客户端.
const evaluation = await server.blindEvaluate(evalReq);
步骤4
最后,客户端可以使用服务器的评价和第二步的定稿数据来制作OPRF协议的输出. 如果模式是可核查的,该步骤还检查服务器使用预期的私钥进行评估的证明.
// Get output matching first input of batch
const [output] = await client.finalize(finData, evaluation);
发展
| 任务 | 国家预防机制脚本 |
|---|---|
| 安装 | $ npm ci |
| 大楼 | $ npm run build |
| 单位测试 | $ npm run test |
| 实例 | $ npm run examples |
| 基准制定 | $ npm run bench |
| 代码 Linting | $ npm run lint |
| 代码格式 | $ npm run format |
安全免责声明
这个图书馆是一次性提供的,没有保证。 因此,预计将来会改变代码,寄存器和API. 我们建议在制作应用中使用这个图书馆之前要谨慎,因为其部分内容是实验性的. 所有安全问题都必须报告,请立即通知我们,根据我们的指示 安全政策。 。 。 .
密码提供者
虽然这个库依赖于标准 网络加密 API 对于高级操作,质场和椭圆曲线操作不由标准API覆盖. 为此原因,此库可以配置为使用以下提供者之一:
- 斯坦福 JavaScript Crypto 库 sjcl 键。 。 。 .
- 这个 @ noble/ 曲线 图书馆.
⚠️ 说明: 经常运行是防止时间攻击的基本要求。 然而在JavaScript中,常时执行并不保证. 这些提供者为实现这一目标作出了不同的选择.
许可证
该项目根据以下规定获得许可证: BSD-3- 休闲许可证。 。 。 .
