种子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_idpublic_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 buildflit install)。在

贡献

请使用UNIX样式的行结尾保存文件,然后运行make check来强制执行 基本一致性(make fix可以自动修复大多数问题)。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Maven中的java,为什么要运行“mvn clean”?   java会降低图像质量。OutOfMemory异常Android   在Java8中将函数传递到流的过滤方法   jboss6。x java。lang.NoClassDefFoundError,当我将<listenerclass>包含到web时。xml java   java读取图像像素时,像素Alpha始终为255   java在迭代后跳过一行   java如何创建我自己的单链表   意图上的java空指针异常。getStringExtra.:安卓   具有连接实体的java Hibernate onetoone映射   java需要帮助在自制的仓鼠模拟器上实现启动/恢复/暂停/停止线程操作   如何测试非主方法?[Java,IntelliJ]   java jdbc自动提交(false)不起作用   java在JADE中的同一容器中创建多个代理   java OkHttp获取失败的响应正文   java Webdriver flash按钮