SRP验证说明文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SRP验证说明文档
文档编号:
文档类别:需求、设计
版本:V1.0
创建时间:2012-07-31
单位名称:
版本记录
*状态:C-创建 A-增加 M-修改 D-删除编制说明
目录
第 1 章概述 (3)
1.1编写目的 (3)
1.2适用对象 (3)
1.3术语 (3)
1.4参考资料 (3)
第 2 章技术验证说明 (4)
2.1 运算公式 (4)
2.2 验证说明 (5)
2.3 设置密码 (5)
2.4 验证密码 (6)
第 1 章概述
1.1编写目的
针对互联网密码登录认证进行的技术验证。
1.2适用对象
适用于项目开发人员、系统的管理人员。
1.3术语SRP:安全远程密码。使用SRP的客户机/服务器不会在网络上以明文
或加密的方式传送密码,这样可以完全消除密码欺骗行为。保证口令可以安全地在网络上面传送。基本的思想是,防止有被动或主动网络入侵者使用字典攻击。
第 2 章技术验证说明
2.1 运算公式
名词介绍:
公式计算:
The host stores passwords using the following formula:
The host then keeps {I, s, v} in its password database. The authentication protocol itself goes as follows:
User -> Host: I, A = g^a (identifies self, a = random number)
Host -> User: s, B = kv + g^b (sends salt, b = random number)
Both: u = H(A, B)
User: x = H(s, p) (user enters password)
User: S = (B - kg^x) ^ (a + ux) (computes session key)
User: K = H(S)
Host: S = (Av^u) ^ b (computes session key)
Host: K = H(S)
Now the two parties have a shared, strong session key K. To complete authentication, they need to prove to each other that their keys match. One possible way:
User -> Host: M = H(H(N) xor H(g), H(I), s, A, B, K)
Host -> User: H(A, M, K)
2.2 验证说明
技术验证只验证到K值的比较,并没有进行M值的运算,但这并不影响SRP使用,也不代表SRP的实际应用情况。
在设置用户密码的时候随机产生N值和g值,并保存起来,在进行修改或重置时重新设置N 值和g值。
2.3 设置密码
1. 在设置密码的时候,服务端产生随机盐值、N、g,下发到客户端。
2. 客户端根据盐值以及客户填写的用户名及密码HASH运算得出x值,并使用N、g以及
x值运算得出v值。
使用运算公式:
x=H(salt || H(username || ":" || password))
v=g^x (mod N)
说明:
3. 客户端将v值以及用户名上送给服务端。
4. 服务保存上送的用户名I和v值、第一步产生的盐值s和N值以及g值。
流程图如下:
2.4 验证密码
1. 客户端输入用户名、密码,将用户名传送到客户端。
2. 服务端根据用户名找到相应的srp信息:盐值s、v、N、g。
3. 服务端随机产生b值,并根据v值产生B。
使用运算公式:
k=H(N || g) (mod N)
B=kv + g^b
说明:
4. 服务端将盐值B、s、N、g传送给客户端。
5. 客户端根据用户名、密码产生x;随机产生a,根据服务端下发的g值获得A;根据服
务端发送的N、g、B等信息,计算K值。
使用运算公式:
x=H(salt || H(username || ":" || password))
A= g^a (mod N)
k=H(N || g) (mod N)
u = H(A, B) (mod N)
S = (B - kg^x) ^ (a + ux)
K = H(S)
说明:
6. 客户端将A以及K值上送给服务端。
7. 服务端计算K值。
使用运算公式:
u = H(A, B) (mod N)
S= (Av^u) ^ b (mod N)
K = H(S)
说明:
8. 服务端将自身产生的K值与客户端上传的K值进行比对,如果一致则成功。流程图如下: