如何使用量子计算机创建Lamport哈希值签名
扫描二维码
随时随地手机看文章
还记得那个时候电脑上有“英特尔内置”的标志吗?嗯,很快,可能就会出现宣传“后量子robust”的贴纸。这些贴纸将表明所使用的软件不会被量子计算机的出现所破坏。不管你喜不喜欢,我们区块链上现有的所有签名都将被破坏,我们的大部分数字签名软件也将随之被破坏,因此Corda和IOTA等应用程序正在为后量子时代做准备,而其他许多应用程序只是在睡梦中走进一个信任被破坏的世界。
介绍
公钥方法为我们提供了验证发送方完整性的方法。不幸的是,大多数用于创建这些签名的方法,如素数因子分解(如RSA)和椭圆曲线方法,都将被量子计算机破解。本文概述了一些基于哈希值的签名方法,这些方法可以用作基于哈希值的签名的基础。
我们在互联网上看到的许多问题都与交易中缺乏信任有关。你收到的电子邮件和你访问的网站往往没有多少信任。为了获得信任,我们检查发件人的电子邮件地址,但是任何人都可以伪造该地址。因此,我们越来越多地创建数字签名,并在其中使用私钥对消息签名。通过这种方式,我们可以检查身份验证、完整性和不可否认性。
通过这个,Alice创建了一个密钥对:一个公钥和一个私钥。然后,她获取消息的哈希值,并用她的私钥加密这个哈西还(这是她的签名),并将消息和签名传递给Bob。然后Bob读取消息并对其进行哈希。然后他将Alice的签名公开解密,并检查哈希值。如果他们匹配,他就知道她签了名,而且在此过程中没有更改:
目前,我们经常使用RSA、DSA和ECDSA对消息进行签名。这些都是基于找出一个数的因子难度和离散对数的处理。目前这些方法都存在计算困难的问题,但是有了量子计算机,它们变得容易多了。Peter Shor证明了其在多项式时间内是可以破解它们的。
在所有提出的方法中,基于哈希值的方法看起来有很大的机会成功地创建量子robust签名。基于网格和代码的方法正在研究中,但哈希值方法的使用已经得到了很好的定义,可以提供现有方法的最佳替代方法。哈希值方法也常常带来其他优点,比如向前安全性,这意味着被破解的密钥不会显示所有以前的密钥。
Lamport签名
不久的将来,我们可能需要放弃现有的公钥方法,转而使用对量子计算机更具挑战性的技术。随着Shor ‘s alorigthm [here]在量子计算机上的实现,我们将看到我们的RSA和椭圆曲线方法被量子robust方法所取代。一种方法是Lamport签名方法,由Leslie B. Lamport于1979年创建:
目前,它被认为是一种用于消息签名的量子健壮技术。当我们签署一条消息时,我们获取它的哈希值,然后用我们的私钥加密。然后使用公钥来证明它,并将证明我们使用私钥签署了它。Lamport签名使用512个随机哈希值作为私钥,它们被分成集合A和集合B。公钥是这些哈希值。私钥的大小为16KB(2×256×256位),公钥的大小也是16KB(512哈希值,每个哈希值包含256位)。
创建Lamport哈希值签名的基本方法是:
· 我们创建了两个数据集,其中包含256个随机256位数字(集合A和集合B)。
· 接下来我们取每个随机数的哈希值。这将产生512个哈希值,并将作为公钥。
· 然后我们使用SHA-256对消息进行哈希,然后测试哈希值的每个位(0…255)。如果它是0,我们用集合A中的第i个数,否则我们用集合B中的第i个数。
· 签名是256个随机数(来自集合A或集合B),公钥是512个哈希值(来自集合A和集合B)。
该过程如下图所示:
我们可以使用Lamport方法进行一次性签名,但是在其核心格式中,每次签名都需要一个新的公钥。Lamport的主要问题是我们只能使用每个公钥签名一次。不过,我们可以通过创建一个哈希值树来克服这个问题,它是将多个公钥合并到一个根目录中。
一个示例运行,它只显示前几个私钥和第一个公钥:
==== Private key (keep secret) =====
Priv[0][0] (SetA): 6f74f11f20953dc91af94e15b7df9ae00ef0ab55eb08900db03ebdf06d59556c
Priv[0][1] (SetB): 4b1012fc5669b45672e4ab4b659a6202dd56646371a258429ccc91cdbcf09619
Priv[1][0] (SetA): 19f0f71e913ca999a23e152edfe2ca3a94f9869ba973651a4b2cea3915e36721
Priv[1][1] (SetB): 04b05e62cc5201cafc2db9577570bf7d28c77e923610ad74a1377d64a993097e
Priv[2][0] (SetA): 15ef65eda3ee872f56c150a5eeecff8abd0457408357f2126d5d97b58fc3f24e
Priv[2][1] (SetB): 8b5e7513075ce3fbea71fbec9b7a1d43d049af613aa79c6f89c7671ab8921073
Priv[3][0] (SetA): 1c408e62f4c44d73a2fff722e6d6115bc614439fff02e410b127c8beeaa94346
Priv[3][1] (SetB): e9dcbdd63d53a1cfc4c23ccd55ce008d5a71e31803ed05e78b174a0cbaf43887
==== Public key (show everyone)=====
Pub[0][0]: 7f2c9414db83444c586c83ceb29333c550bedfd760a4c9a22549d9b4f03e9ba9
Pub[0][1]: 4bc371f8b242fa479a20f5b6b15d36c2f07f7379f788ea36111ebfaa331190a3
Pub[1][0]: 663cda4de0bf16a4650d651fc9cb7680039838d0ccb59c4300411db06d2e4c20
Pub[1][1]: 1a853fde7387761b4ea22fed06fd5a1446c45b4be9a9d14f26e33d845dd9005f
==== Message to sign ===============
Message: The quick brown fox jumps over the lazy dog
SHA-256: d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
==== Signature =====================
Sign[0]: 4b1012fc5669b45672e4ab4b659a6202dd56646371a258429ccc91cdbcf09619
Sign[1]: 04b05e62cc5201cafc2db9577570bf7d28c77e923610ad74a1377d64a993097e
Sign[2]: 8b5e7513075ce3fbea71fbec9b7a1d43d049af613aa79c6f89c7671ab8921073
Sign[3]: 1c408e62f4c44d73a2fff722e6d6115bc614439fff02e410b127c8beeaa94346
The signature test is True
在本例中,我们取随机数,然后将其转换为字符串。因此,“6f74f11f20953dc91af94e15…0db03ebdf06d59556c”的SHA-256签名为7f2c9414db83444c586c…49d9b4f03e9ba9。如果可以看到消息哈希值(“the quick brown fox jumps over the lazy dog”)在开头有一个十六进制D值,在二进制中是1101,我们看到我们从SetB[0]、SetB[1]、SetA[2]和SetB[3]中提取。
结论
Lamport OTS速度很快,但是密钥大小和签名相对较大。那么Lamport有什么问题呢?这是一次性使用,我们只能使用公钥一次。但是,在比特币中,我们可以用当前的公钥签名,然后添加下一个公钥。然而,ECDSA的最大优点是公钥只有33字节长,签名是73字节,而Lamport签名的公钥是16 KB(256位的512个版本),签名是8KB(256个版本的256位)。
但是,EDCSA使用椭圆曲线密码,量子计算机很容易破解它,所以我们的公钥和签名可能已经成为过去。因此,IOTA和Corda等应用程序已经识别出了这种风险,并用后量子技术取代了RSA和ECC方法。IOTA集成了Winternitz一次性签名方案(W-OTS),该方案生成了有效的密钥大小和压缩签名,Corda使用区块链后量子签名(BPQS) [Link]。