种子WebAuthn凭据:引用实现
seedweed的Python项目详细描述
DiceKey“Seeding WebAuthN”规范的参考实现和测试向量
实施
规范:https://github.com/dicekeys/seeding-webauthn。在
包含:
keypair_from_seed_mac
指定如何生成P256密钥对credential_id_from_seed_nonce_rpidhash
,指定如何序列化凭据validate_credential_id
指定如何验证接收到的凭据ID是否有效nonce_extstate_mac_from_credential_id
,指定如何反序列化凭据ID- test vectors(可以很容易地适应,使用独立种子DRBG)
不包含:
- 从
(seed, rp_id, user_id, entropy)
四元组构造nonce/unique ID; 这由规范留给验证器实现。在
签名超过b"seedweed"
。在
一致性测试
在下面调用seedweed.load_test_vectors(shortlist=True)
应该
足以对付所有已知的棘手案件。在
1。生成凭证
对于seedweed.load_test_vectors()
中的所有测试向量v
:
- 设置
v["seed"]
- 使用
v["rp_id"]
(自由选择user_id
和其他参数)调用验证器MC - 提取生成的
credential_id
,public_key
,并传递给seedweed.conformance.verify_make_credential
以及签署的经证实的数据
此测试验证由验证器生成的凭证id是否可以由规范兼容的实现使用。在
2。获取断言
对于seedweed.load_test_vectors()
中的所有测试向量v
:
- 设置
v["seed"]
- 使用
v["credential_id"]
、v["rp_id"]
(自由选择user_id
和其他参数)调用验证器GA - 使用签名到
seedweed.conformance.verify_get_assertion
的数据传递生成的签名
此测试验证验证器是否可以使用由规范兼容实现生成的凭据ID。在
关于测试向量
验证器有足够的余地:
- 如何为其凭据生成nonce(“uniqueId”)
- 是否在其(生成的)凭证ID中包含“extState”
- 是否遵循RFC 6979,即确定性签名
但是:
- 给定(seed,credentialID),确定P256密钥对,并且
- 另外,给定rpIdHash,可以验证适当的凭证绑定
P256公钥在这里被序列化为(X,Y)坐标,每个坐标都是以32字节big-endian补零的形式。在
安装
要安装,需要Python>;=3.6,然后:pip install seedweed
一旦完成,应该有一个命令generate-seedweed-test-vectors
你可以运行它
重新创建测试向量。修改Parameters允许生成
根据需要增加测试向量。在
发展
很多方法,一种是make setup
,然后source venv/bin/activate
。在
使用flit
进行打包,因为它看起来最省力(flit build
,flit install
)。在
贡献
请使用UNIX样式的行结尾保存文件,然后运行make check
来强制执行
基本一致性(make fix
可以自动修复大多数问题)。在
- 项目
标签: