实现安全远程密码(SRP)身份验证的工具
srptools的Python项目详细描述
https://github.com/idlesign/srptools
说明
用于实现安全远程密码(srp)身份验证的工具
srp是一种基于密码的安全认证和密钥交换协议- 一种密码认证密钥协议(pake)。
此包包含Python2和3的协议实现。
您可以将其导入到应用程序中并使用其api,也可以使用 srptools命令行实用程序(cli):
cli用法
命令行实用程序要求安装click包。
基本方案:
> srptools get_user_data_triplet > srptools server get_private_and_public > srptools client get_private_and_public > srptools client get_session_data > srptools server get_session_data
提供帮助:
> srptools --help
API使用
初步步骤。就沟通细节达成一致:
fromsrptoolsimportSRPContextcontext=SRPContext('alice','password123')username,password_verifier,salt=context.get_user_data_triplet()prime=context.primegen=context.generator
简化的工作流程:
fromsrptoolsimportSRPContext,SRPServerSession,SRPClientSession# Receive username from client and generate server public.server_session=SRPServerSession(SRPContext(username,prime=prime,generator=gen),password_verifier)server_public=server_session.public# Receive server public and salt and process them.client_session=SRPClientSession(SRPContext('alice','password123',prime=prime,generator=gen))client_session.process(server_public,salt)# Generate client public and session key.client_public=client_session.public# Process client public and compare session keys.server_session.process(client_public,salt)assertserver_session.key==client_session.key
扩展工作流
fromsrptoolsimportSRPContext,SRPServerSession,SRPClientSession# Receive username from client and generate server public.server_session=SRPServerSession(SRPContext(username,prime=prime,generator=gen),password_verifier)server_public=server_session.public# Receive server public and salt and process them.client_session=SRPClientSession(SRPContext('alice','password123',prime=prime,generator=gen))client_session.process(server_public,salt)# Generate client public and session key proof.client_public=client_session.publicclient_session_key_proof=client_session.key_proof# Process client public and verify session key proof.server_session.process(client_public,salt)assertserver_session.verify_proof(client_session_key_proof)# Generate session key proof hash.server_session_key_proof_hash=client_session.key_proof_hash# Verify session key proof hash received from server.assertclient_session.verify_proof(server_session_key_proof_hash)
使用提示
srptools.constants包含基本常数,可以与SRPContext一起使用,以便服务器和客户端同意 关于沟通细节。
^会话类的{tt5}$方法在某些情况下可能会引发SRPException。验证进程 这种情况必须停止。
- .private会话类属性可用于还原会话:
server_private=server_session.private# Restore session on new request.server_session=SRPServerSession(context,password_verifier,private=server_private)
^ tt4}$相当灵活,因此您可以通过它的帮助实现一些自定义服务器/客户端会话逻辑。
基本值表示为十六进制字符串,但也支持Base64编码的值:
server_public=server_session.public_b64# Receive server public and salt and process them.client_session=SRPClientSession(SRPContext('alice','password123',prime=prime,generator=gen))client_session.process(server_public,salt,base64=True)# Use srptools.hex_from_b64() to represent base64 value as hex.server_public_hex=hex_from_b64(server_public)
链接
- RFC 2945-SRP认证和密钥交换系统
- https://tools.ietf.org/html/rfc2945
- RFC 5054-使用安全远程密码(SRP)协议进行TLS身份验证
- https://tools.ietf.org/html/rfc5054