1个不稳定版本
| 新 0.1.0 | 2024年8月26日 |
|---|
706 在 密码学 中排名
每月下载量59
26KB
389 行
为易于使用而封装了srp的crate
概述
srp crate提供了使用SRP6a认证的方法。此crate封装了srp crate,使认证工作流程更易于使用。
这是通过以下方式实现的
- 提供用于3种典型工作流程的
Workflow结构体- 生成初始注册数据
- 客户端认证
- 服务器认证
- 命名方法
step#,编号递增,因此可以清楚地知道在认证的哪个阶段需要调用该方法。 - 包括自动随机值生成(用于临时密钥和盐)
特性
- 通过WebAssembly支持Web。因此,此crate可以与基于WASM的web-UI框架(如yew)一起使用。
- 易于使用。
可用的rust/cargo features
client:包含客户端类(ClientAuthenticationWorkflow、ClientRegistrationWorkflow等)。server:包含服务器类(ServerAuthenticationWorkflow等)。base64:包含base64 crate并提供对各种字节数组的base64序列化。serialization:包含serde crate并向各种结构体添加Serialize和Deserialize。这也启用了base64特性。js:此crate使用getrandom crate生成随机数(盐、客户端/服务器临时密钥)。getrandom支持多种平台,包括Web浏览器(在WebAssembly中)。如果在浏览器中使用了easy-srp,请使用js特性,使getrandom使用JavaScript方法Crypto.getRandomValues()生成随机数。
用法
SRP6a 协议
用户注册
- 用户输入
用户名和密码 - 客户端生成随机的
盐值 - 客户端从上述凭据计算出
验证器 - 客户端通过安全通道将
用户名、盐值和验证器发送到服务器。 - 服务器存储这三个凭据。
用户认证
| 客户端 | 服务器 | |
|---|---|---|
(用户名,pub_a) |
-> | |
| <- | (盐值,pub_b) |
|
(proof_a) |
-> | |
| <- | (proof_b) |
- 客户端将
(username, pub_a)发送到服务器。 - 服务器查找
(salt, verifier) - 服务器计算一个临时的私有密钥
b并推导出其公钥pub_b。 - 服务器将
(salt, pub_b)发送给客户端。 - 客户端计算证明
proof_a并将其发送到服务器。 - 服务器验证
proof_a - 服务器计算自己的证明
proof_b并将其发送给客户端 - 客户端验证
proof_b - 现在双方都可以计算一个共同的密钥。密钥的大小取决于使用的摘要,例如
SHA256的 256 位(32 字节)。
生成客户端注册数据
客户端示例
服务器示例
依赖项
以下依赖项是故意包含的(即直接)
可能还有其他依赖项是间接包含的。
依赖项
~1–1.6MB
~33K SLoC