還記得那個時候電腦上有“英特爾內置”的標志嗎?嗯,很快,可能就會出現宣傳“后量子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]。
評論
查看更多