抗量子 Winternitz One Time Signature(OTS) 算法学习

参考blog

bash 复制代码
https://accu.cc/content/cryptography/winternitz/

原理

Winternitz OTS 算法也是一种基于hash的具有抗量子性能的算法。

其数学上的核心原理也非常简单:假设我们使用的hash是sha256,对某一段数据hash c次的结果等价于先对这段数据hash a 次,再hash b 次。其中 a + b = c

bash 复制代码
M:message
# a + b = c
rslt = hash(M)^c
temp_a = hash(M) ^a
temp_rslt = hash(temp_a)^b
rslt == temp_rslt

更具体来说,将我们需要签名的消息(M)以N (N = 2,4,8,...,256,...)为单位,划分出若干个chunk,这个chunk 被视作一个数字 number。比如我们的M一共有256 bit,取N = 8,则我们可以得到32 个number,每个number 大小在0 - 255 之间。后续的操作跟数学原理相结合会更好解释,因此直接进入到算法流程。

算法流程

假设:M一共有256 bit,取N = 8,则我们可以得到32 个chunk,取c = 256。我们总是对原文进行操作

密钥生成

  1. 先生成32 个 256 bit 的随机数,将这32个随机数作为我们的私钥(sk)
  2. 将这32把私钥,反复做256/c 次 hash,计算出来的结果作为我们的公钥(pk)

至此,W-OTS 算法的密钥生成部分结束

签名生成

  1. 将M hash一次,得到对应的结果Hash
  2. 将Hash 拆成32个 chunk,每个chunk表示一个数字,number
  3. 对chunk hash (256 - number) 次,得到的结果作为签名的一部分。例如:chunk0 是 0110_1111,则number 是十进制的111,所以我们对chunk0 hash 256 - 111 = 145 次
  4. 对所有chunk 做完上述两步操作后,将其结果拼接起来,最后就得到了我们的签名

签名验证

  1. 将M进行一次hash操作,得到的结果为:Hash,大小为256 bit
  2. 将Hash 拆成32 个chunk,chunk的值为number
  3. 对签名S 以256 bit(只是sha 256的运算结果为256bit) 的大小进行划分,这样划分出来的item有32个,对这些item hash number 次,得到的结果为 rslt_set
  4. 判断rslt_set 是否与公钥pk 相等,如果都相等,代表验签无误。否则验签失败

弊端

与Lamport OTS 不同,Winternitz OTS 不会暴露出私钥,而且签名的大小会有所减少,但是会需要更多的hash 次数。而且hash 次数越多,并不会提升安全性,真正的安全性还是与hash 本身有关

相关推荐
斯内科3 分钟前
四胞胎素数:找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数,例如 11、13、17、19
算法·质数·素数·四胞胎素数
Hello.Reader34 分钟前
算法基础(十二)——主方法:快速求解常见递归式
算法
小O的算法实验室1 小时前
2026年IEEE TITS,面向按需外卖配送调度的特定问题知识与基于学习元启发式算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
加勒比海带661 小时前
目标检测算法——农林行业数据集汇总附下载链接【Plant】
大数据·图像处理·人工智能·算法·目标检测
洛水水1 小时前
【力扣100题】23. 螺旋矩阵
算法·leetcode·矩阵
被考核重击1 小时前
WASM学习笔记
笔记·学习·wasm
MediaTea1 小时前
人工智能通识课:机器学习之监督学习
人工智能·学习·机器学习
三品吉他手会点灯1 小时前
C语言学习笔记 - 27.C编程预备计算机专业知识 - 什么是字节
c语言·开发语言·笔记·学习
影sir1 小时前
不同测试数据下,该如何选择算法
算法·深度优先
yunhuibin2 小时前
videopipe学习之节点数据流转机制探索
学习