Lamport一次性签名是一种用于构造数字签名的方法,通常涉及使用密码哈希函数。由于它是一次性签名方案,因此只能用于对一条消息进行安全签名。
假设爱丽丝(Alice)想用数字方式将其消息签名给鲍勃(Bob),则可以通过3个步骤来说明该过程:
- 密钥生成
- 签名生成
- 签名验证。
1.密钥生成:
- 爱丽丝首先需要创建一个Lamport密钥对,一个私钥和一个对应的公钥。
- 为了创建私钥,使用安全随机数生成器生成256对随机数。每个数字包含256位。爱丽丝将安全地存储此私钥。请记住,私钥并不意味着要与任何人共享。
- 为了创建公钥,爱丽丝对她的私钥的512个数字进行哈希处理。这将产生另外512个数字,每个数字由256位组成。这是将与任何人共享的公钥。
用数学表示:
- 让是一个正整数, 是要签名的消息集,并且是单向哈希函数。
- 为了和 ,爱丽丝随机选择并将单向哈希函数应用于计算 。
- 私钥和公钥均包含价值观, 和分别。
2.签名生成:
- 爱丽丝使用256位加密哈希函数(例如SHA 256)对她的消息进行哈希处理以获得256位摘要。
- 对于每个位,取决于位值是1还是0,Alice将从其私钥的数字对中选择相应的数字,即,如果该位为0,则选择第一个数字,如果该位为1,选择第二个数字。这导致了256个数字的序列,这是她的签名。
- 爱丽丝将消息及其签名发送给鲍勃。
用数学表示法
- 让是爱丽丝想要签名的消息。
- 签名生成为 = = 。
- 该签名与消息一起发送给Bob。
3.签名验证:
- 鲍勃使用相同的256位加密哈希函数对消息进行哈希处理,以获取256位摘要。
- 对于每个位,Bob将根据该位的值是1还是0,从Alice的公钥中选择相应的数字,即,如果消息哈希的第一位为0,则他在第一对中选择第一个哈希,依此类推。 。以与上图中所示相同的方式完成此操作。这将导致256个数字的序列。
- 鲍勃对爱丽丝签名中的每个数字进行哈希处理以获得256位摘要。如果这与Bob先前选择的256个数字序列匹配,则签名有效。
在数学表示中,鲍勃检查对所有人
注意:必须了解,由于爱丽丝已公开发布了一半的私钥作为其签名,因此她的剩余私钥不能再次使用,必须销毁。