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