“Lamport一次性签名从独立单向原像给出具体构造,但安全实验只允许一次签名查询。Winternitz链签名用校验和交换大小与计算;Merkle树签名再认证多份独立一次性公钥,并将不可回滚的…”
形式陈述
消息位决定在链上走多远
固定底数b≥2和消息位数t≥1,消息为
将C按大端写成恰好s位,保留前导零,得到
经典构造用一个公开函数
验证者从消息重新算完整校验和,而不信任签名附带的任意校验和。公开参数确定b、t、X的编码和项数;不合法数字、长度或摘要项一律拒绝。正确性由
这里追求的是至多一次查询的新消息不可伪造。函数仅有普通单向性还不能自动支持后面的密码安全结论;迭代输出上的额外假设在“推论与应用”中单列。
直觉
Lamport每个二进制位置准备两份秘密;链签名则让一份秘密沿同一条链走0步、1步、直到b−1步,用停靠位置代表更多种数字。验证者接着往前走,能抵达公开终点就表示这一链坐标相容。
问题也来自“只能向前”:看到第1步的签名,任何人都能自己走到第2步。所以直接用消息数字作为停靠位置,会允许把所有数字一起增大。校验和把两头绑起来:消息数字增加,补数之和就减少,于是至少有一条校验链必须向后退。
例子与边界
b=4时完整走完四条链
取t=2、消息a=[1,1]。校验和为
若没有校验和,把第一项再算一次f,就能把[1,1]的签名变成[2,1]的签名。加入校验和后,新消息的C=3,必须写成[0,3],新向量为[2,1,0,3]。攻击者能把第1链从1推到2,也能把第4链从0推到3,却需要把第3链从1退到0;现有材料没有直接提供这一步。
检查器使用
校验和不是秘密,也不是另一个密码哈希
C完全公开,只承担“数字不能整体前进”的组合约束。若把真实C截成一位,本例4会变成0,向量的单调性证明便不再适用;若接受不同长度的前导零表示,链坐标也可能错位。消息长度和校验和宽度必须先固定。
本页用经典的同一个f反复迭代。标签20把它与本单元Lamport的10、列表树的00/01、稀疏树的02/03/04分开;标签不是秘密,也没有把SHA-256变成已证明安全的函数族。RFC8554的LM-OTS另外把密钥标识、链号、步号放进哈希,RFC8391的WOTS+还有地址、密钥与掩码。本页算法不冒称是它们的标准编码,不能直接拿到标准互操作系统中使用。
推论与应用
完整证明:不同消息不能全坐标前进
取不同消息a与a'。若某个消息坐标已满足
两数都按同一s位b进制表示。如果a'的每个校验数字也都不小于a的相应数字,那么将各位乘以相同正权
这个引理排除了“只把已经看到的链点继续向前算”的伪造策略。它没有排除找到另一路前像、利用链合流或函数缺陷的其他攻击,因此不能单独代替密码安全归约。
密码结论需要什么更强条件
对d=b−1,迭代单向实验允许攻击者先选
在上述迭代单向条件、独立均匀链起点、b与L受多项式约束,以及完整数字向量满足刚证明的非支配性质时,经典Winternitz构造的一查询安全性由教材的迭代揭示归约给出。该归约处理攻击者看到部分链点后的反演,不只是对均匀起点调用一次普通OWF定义。若进一步用PRG压缩私钥或哈希压缩公钥,还须分别加入PRG安全与抗碰撞条件;本页未做这两项压缩。
因此这里有三层明确分工:链拼接给正确性,校验和给组合约束,迭代单向性支撑完整安全定理。下载的确定性公开测试起点不满足秘密独立采样的真实密钥模型,也不能用测试全绿替代第三层假设。
大小与计算的交换
若每个链点n字节,签名、公钥、原始私钥各Ln字节。生成公钥需L(b−1)次f;一次签名需
仅作长度账本:256bit按四bit一位拆成t=64个十六进制数字,最大校验和960,需要s=3,故L=67。若n=32,签名2144字节,公钥生成1005次f。这是表示与工作量计算,不是生产安全参数建议。增大底数通常缩短项数,却延长链,不能只报告签名变短。
终点任务:仍取b=4、t=2,把消息改成[0,3],C=3,完整向量[0,3,0,3],签名6次、验证6次。再取[3,3],C=0,必须保留[0,0]两个校验位;解释为何不能省略这两条链。最后说出“普通单向”和“迭代单向”两个挑战分布的区别。