关于 implementing-zero-knowledge-proof-for-authentication
用于在 Python 中实现和评估零知识认证的安全技能,涵盖 Schnorr 身份识别、Fiat–Shamir 非交互式证明和简化的密码证明协议,使服务器不接收密码。
主要功能
- 01Schnorr 身份识别协议
- 02Fiat–Shamir 非交互式证明
- 03简化的零知识密码证明
- 04完备性、可靠性与隐私检查
- 05与密码验证方式比较
适用场景
- 01构建密码认证原型
- 02测试证明的离线验证
- 03评估零知识认证属性
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-zero-knowledge-proof-for-authentication安装后在 Claude Code 中输入/implementing-zero-knowledge-proof-for-authentication确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.py详细介绍
为身份验证实现零知识证明
概述
零知识证明(ZKP)允许证明者在不泄露秘密本身的情况下,证明自己知道某个秘密(例如密码或私钥)。本技能使用离散对数问题实现了 Schnorr 身份识别协议和一个简化的 ZKPP(零知识密码证明),从而实现服务器永远不会获知用户密码的身份验证。
何时使用
- 在环境中部署或配置为身份验证实现零知识证明的能力时
- 在建立符合合规要求的安全控制时
- 在为此领域构建或改进安全架构时
- 在开展需要此实现的安全评估时
前提条件
- 熟悉密码学概念和工具
- 拥有用于安全执行的测试或实验环境
- Python 3.8+ 并已安装所需依赖
- 对任何测试活动拥有适当授权
目标
- 为 ZKP 身份验证实现 Schnorr 身份识别协议
- 使用 Fiat-Shamir 启发式构建非交互式 ZKP
- 实现零知识密码证明(ZKPP)
- 演示完备性、可靠性和零知识性质
- 将 ZKP 身份验证与传统密码验证进行比较
关键概念
ZKP 性质
| 性质 | 描述 |
|---|---|
| 完备性 | 诚实的证明者总能说服诚实的验证者 |
| 可靠性 | 不诚实的证明者无法说服验证者(除可忽略概率外) |
| 零知识 | 验证者除了陈述的真实性外学不到任何东西 |
Schnorr 协议
- 设置:公开生成元 g、素数 p、q(g 的阶)
- 注册:证明者计算 y = g^x mod p(由秘密 x 导出的公钥)
- 承诺:证明者发送 t = g^r mod p(随机 r)
- 挑战:验证者发送随机 c
- 响应:证明者发送 s = r + c*x mod q
- 验证:检查 g^s == t * y^c mod p
安全注意事项
- 使用密码学安全的随机数生成器
- 挑战必须不可预测(从验证者的角度来看)
- 对于非交互式证明,使用带抗碰撞哈希的 Fiat-Shamir
- ZKP 本身不提供前向保密;请与 TLS 结合使用
验证标准
- 诚实的证明者总能成功验证(完备性)
- 没有秘密的随机响应无法通过验证(可靠性)
- 服务器永远不会收到秘密值
- 非交互式证明可离线验证
- 多次身份验证产生不同的记录
- 协议能抵御重放攻击
评论
支持 Markdown