Lamport 是第一个 OTS(One Time Signature) 算法,由 Leslie Lamport 于 1979 年提出,论文可见 Constructing Digital Signatures from One Way Function ,一对密钥只能签名一次,不能重复使用。
下面按照 $(GEN, SIG, VER)$ 三元组描述该算法。
密钥生成($GEN$)
$$(pk, sk) \leftarrow GEN(1^k)$$
首先我们需要确定安全参数 $k$,不过实际操作中我们一般只需要确定输出的摘要长度 $n$。
通过随机数生成器(PRG, Pseudo Random Generator),生成 $n$ 对随机数,每一对包含两个随机数,每一个随机数 $n$ bits,总共 $2\times n\times n$ bits,此为私钥。
对每一个随机数进行哈希,生成 $2\times n$ 个摘要,每一个 $n$ bits,也是 $2 \times n \times n$ bits,此为公钥。
形式化表示为:
$$sk = (sk_{0,0}, sk_{0,1}, \dotsm, sk_{n-1, 0}, sk_{n-1, 1}) \\
pk = (pk_{0,0}, pk_{0,1}, \dotsm, pk_{n-1, 0}, pk_{n-1, 1})$$