python winternitz一次性签名(+)实现

winternitz的Python项目详细描述


Winternitz一次性签名

winternitz一次性签名方案的python实现

说明

winternitz一次性签名是lamport一次性签名的扩展。 此python包可用于执行wots操作,包括 密钥生成、签名生成和签名验证。 目前,wots和wots+已经实现。

简介

兰波特在1979年发明了一种算法,允许人们创建一次性签名。 使用加密安全的单向函数。这是温特尼茨的基础 一次性签名算法。温特尼茨增加了调整折衷方案的可能性。 介于时间和空间的复杂性之间。

lamport一次性签名方案

兰波特建议为消息的每一位创建两个密钥,这将 签字。每一位可以取一个值。要导出验证密钥, 每个密钥都经过一次哈希运算。现在你有一把密钥和一把验证密钥, 它由 m 2元组值组成,其中 m 是数值 信息的比特数。验证密钥已发布。 签名由 m 值组成。对于您从中释放密钥的消息的每一位 相应的密钥,取决于该位具有的值。所有这些秘密 密钥构成消息的签名。验证器对每个密钥进行哈希运算 一次并将其与此位置的一个验证密钥进行比较,具体取决于值 比特的。如果且仅当所有派生的验证密钥与 您发布的验证密钥位于2元组的正确位置,该位置由 比特的。这个算法很快 (与现有的pqc算法相比),但是签名的大小是巨大的。

温特尼茨扩建

winternitz扩展lamports算法提供了决策的可能性 有多少位将一起签名。这些位可以 表示被称为winternitz参数( w=2^{bits} )。这种方法提供了 此算法的用户可以选择时间和空间折衷的优点 (不管是速度还是存储容量更重要)。信息的指纹 将签名分成 组ceil(log 2(w)) 位。每个组都有一个密钥。 每个验证密钥都是通过对每个组的密钥进行哈希运算而得到的。所有验证 密钥将被发布并表示一个统一的验证密钥。在签署消息时, 消息的指纹被分成 ceil(log2(w)) 位组。要创建签名, 对每个位组的私钥进行散列 位组值 次,其中 位组值 是值 比特组的。另外附加了一个(反和)校验和,它拒绝中间人 攻击。校验和由签名计算,分成 ceil(log2(w)) 位的位组,并且 签署。为了验证签名,消息的指纹首先被分成 ceil(log2(w) 每个比特。基本思想是取每个位组的签名,计算验证密钥 最后将其与发布的验证密钥进行比较。因为签名是散列的 位组值 次,从签名计算验证密钥所需做的一切 就是散列签名 2^{w-1}-bitgroup\u value-1 次。除了验证消息之外,验证程序 还必须计算校验和并进行验证。

设置

需要:python>;=3.4

< div >
安装包: pip install winternitz
安装测试工具: pip install winternitz[test]
安装linter(用于毒性测试): pip install winternitz[lint]
安装文档工具: pip install winternitz[docs]
全部安装: pip install winternitz[all]

测试 < div >
没有tox(没有linter检查): python setup.py test
含毒性: 蟒蛇 -m 毒性

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

推荐PyPI第三方库


热门话题
java BigInteger扩展欧氏算法递归错误   java正则表达式来匹配带有换行符的某些模式   oop初学者java迭代arraylist方法删除和计数   javascript ValumsFileUploader使用Java和Selenium提交文件   java如果用户输入错误的数字数据,如何调用错误消息   datetime根据java 8中的偏移量转换UTC时间   java小程序不会计算   java模拟对另一个restservice的REST调用   java如何删除除某个rgb值以外的所有颜色   java Y轴在代码中反转,应该形成一个矩形   java列表插入效率   javacom。fasterxml。杰克逊。数据绑定。exc.UnrecognedPropertyException   java如何将字符串类型的对象转换为字符?   bluej Java:fatorial没有给出正确的结果,但我没有发现错误。   java何时初始化链表中的虚拟节点   java如何从值解析和生成子字符串   java处理BufferedReader中的空行   雅加达面向大型应用程序的ee会话管理(Java)   Java线程。睡眠标准好奇心