📜  兰珀特一次签名方案

📅  最后修改于: 2021-07-05 06:23:29             🧑  作者: Mango

Lamport一次性签名是一种用于构造数字签名的方法,通常涉及使用密码哈希函数。由于它是一次性签名方案,因此只能用于对一条消息进行安全签名。
假设爱丽丝(Alice)想用数字方式将其消息签名给鲍勃(Bob),则可以通过3个步骤来说明该过程:

  1. 密钥生成
  2. 签名生成
  3. 签名验证。

1.密钥生成:

  • 爱丽丝首先需要创建一个Lamport密钥对,一个私钥和一个对应的公钥。
  • 为了创建私钥,使用安全随机数生成器生成256对随机数。每个数字包含256位。爱丽丝将安全地存储此私钥。请记住,私钥并不意味着要与任何人共享。
  • 为了创建公钥,爱丽丝对她的私钥的512个数字进行哈希处理。这将产生另外512个数字,每个数字由256位组成。这是将与任何人共享的公钥。

用数学表示:

  • k是一个正整数, P={\{0,1\}}^k是要签名的消息集,并且f:Y\rightarrow Z是单向哈希函数。
  • 为了1\lei\le i\lei\le kj\in{0,1} ,爱丽丝随机选择y_{i,j}\inY并将单向哈希函数应用于计算z_{i,j}=f(y_{i,j})
  • 私钥和公钥均包含2k价值观, y_{i,j}z_{i,j}分别。

2.签名生成:

  • 爱丽丝使用256位加密哈希函数(例如SHA 256)对她的消息进行哈希处理以获得256位摘要。
  • 对于每个位,取决于位值是1还是0,Alice将从其私钥的数字对中选择相应的数字,即,如果该位为0,则选择第一个数字,如果该位为1,选择第二个数字。这导致了256个数字的序列,这是她的签名。

    兰珀特一次签名方案

  • 爱丽丝将消息及其签名发送给鲍勃。

用数学表示法

  • M=m_1,m_2,\ldots,m_k\ \in\left\{0,1\right\}^k是爱丽丝想要签名的消息。
  • 签名生成为sig\left(m_1,m_2,\ldots,m_k\right) = \left({y_1,}_{m1,\ }{y_2,}_{m2,}\ldots,{y_k,}_{mk}\right) = \left(s_1,s_2,\ldots,s_k\right)
  • 该签名与消息一起发送给Bob。

3.签名验证:

  • 鲍勃使用相同的256位加密哈希函数对消息进行哈希处理,以获取256位摘要。
  • 对于每个位,Bob将根据该位的值是1还是0,从Alice的公钥中选择相应的数字,即,如果消息哈希的第一位为0,则他在第一对中选择第一个哈希,依此类推。 。以与上图中所示相同的方式完成此操作。这将导致256个数字的序列。
  • 鲍勃对爱丽丝签名中的每个数字进行哈希处理以获得256位摘要。如果这与Bob先前选择的256个数字序列匹配,则签名有效。

在数学表示中,鲍勃检查f(s_i)={z_I,}_{mi\ }对所有人1\lei\le i\lei\le k

注意:必须了解,由于爱丽丝已公开发布了一半的私钥作为其签名,因此她的剩余私钥不能再次使用,必须销毁。