為什麼一切又怪又難?談談加密貨幣中的「加密」
Wendy/張詠晴編譯
2019-05-15 17:49

 

本文為技術公司Blockstream研究主管Andrew Poelstra在紐約MCC會議中發表的演講。他在演講中從密碼學講到了數位簽名的安全,指出簽名機制的設計從理論和實際應用情況來看,是完全不同的,因此對於很多自稱能創造神奇效果的項目來說,用戶應該選擇保持警惕。同時,在他看來,比特幣的發展速度驚人,因此從技術角度來看,適當地放慢腳步並沒有錯。

 

以下為演講全文:

 

我沒有準備PPT。我想要盡可能地讓這次演講不是那麼技術,我試圖剝奪自己在螢幕上寫下方程式的權力。我演講的主題是為什麼在加密貨幣中所有的一切都是奇怪和困難的。從數學和科學角度來看,什麼是密碼學?其在實踐中是如何運作的?

 

加密

 

從歷史上看,密碼學的用途是加密,就像試圖想出一些隨機的東西。這裡的安全性很簡單:如果你有一個密鑰,那麼你就可以解密一些東西,而使用一個安全模型或風險模型來描述它的想法,實際上沒有意義。

 

在現代,密碼學已經取得了長足的進步,包括零知識證明。零知識證明是由電腦程式證明的,這些程式只對輸入進行狀態說明,而不洩露輸入的細節。

 

數位簽名和加密是相關的。簽名類似於對兩個密鑰的加密,一個公鑰和一個私鑰。任何擁有公鑰的人都可以加密數據,任何擁有解密密鑰或私鑰的人都可以解密數據。這也意味著經過加密的數據可以透過不安全的渠道進行發送。

 

數位簽名

 

數位簽名正好相反_只有擁有私鑰的人才能生成簽名,只有擁有公鑰的人才能驗證簽名。如果你想討論這裡方案的安全性,那就更難做到,也更難做出定義。我要講的是學術背景下的數位簽名,然後我要講的是隨機數生成的實際問題,然後如果我有時間,我要講的是如何將其擴展到多重簽名設置。

 

沒有密鑰的人就不能偽造消息和公鑰的簽名。從學術上來說,將其形式化是相當困難的。這裡所說的形式化指的是做一個定義清晰的狀態說明。

 

多年之後,我們嘗試了很多次來找出這些定義_我們得出了這樣的結論:如果不存在任何多項式概率時間算法可以成為主導,那麼數位簽名方案就是安全的。我們將絕對排除任何算法存在的可能性(只要其界線合理),絕對不能偽造。即使這樣,在定義的時候,也很難證明其安全性。在現實生活中,有一個知道密鑰的人,這個人應該能夠生成簽名。所以你怎麼能明確排除一切但依然包含特殊情況?

 

假設在一場比賽中你有一個對手,你的對手無法贏得下面的比賽:我隨機取一個私鑰和一個公鑰,我把公鑰給了你的對手。如果他能生成一個簽名,那麼這個簽名就是偽造的,這個方案是不安全的。

 

直觀地來看,這是有道理的。你生成了一個隨機密鑰,對手沒有私鑰。對手唯一知道的關鍵只有公鑰。然而,這種想法是錯誤的。這個方案的問題在於,對手掌握了這個公鑰的大量簽名,而類似GPG的東西可能在區塊鏈上進行過電子郵件或者過往的比特幣交易簽名。這個公鑰包含了一堆簽名。現有的簽名方案對能夠看到公鑰的對手是安全的,但對看到簽名的對手是不安全的。這不應該是其運作方式,但現實仍然如此。這東西很難。有一種競爭幣就有這個問題。有許多人聲稱能解決不可能解決的問題。但大多數人都在對你撒謊,這才是這次演講的真正目的。

 

假設這個對手更強大,他可以向挑戰者索要資訊,而挑戰者必須在這條訊息上簽名。現在,對手不僅可以偽造訊息,而且是在我們給出了幾乎所有可能給出的訊息的情況下。我們想提供盡可能多的訊息。因此,在任意消息上簽名就足夠了。當對手偽造訊息時,他必須在一條新的訊息上生成簽名。

 

這安全嗎?這在常規的安全概念下是安全的,又被稱為選擇訊息攻擊下的存在性不可偽造性。但是在更複雜的系統中,由於一些原因,這是不安全的。我們在比特幣中發現,透過允許對手只在一條新消息上提供簽名,我們排除了對手可能使用現有的簽名,並在保持其有效性的同時對其進行調整的可能性。模型中沒有捕捉到這一點。一旦某條消息簽名完成,誰在乎對手可以針對同一條消息產出不同的簽名?

 

在比特幣中,我們使用的ECDSA和txid都是基於這些簽名的。所以攻擊者有能力改變簽名,允許他們改變交易的txid,這將保持交易的有效性,但會使任何引用該txid的交易無效,因為txid是有延展性的。所以我們需要一個更強的模型。

 

我們現在需要一個對手,我們說,如果其在某個消息上提供簽名,消息可以是相同的,但簽名也必須是始終相同的。這就是所謂的「強簽名」。這是安全的嗎?不。

 

假設你有一個簽名方案_假設你正在使用Schnorr簽名,這些簽名特別容易受到攻擊,比如1989年的原始Schnorr算法……攻擊者獲取了你的一個簽名,他沒有對簽名進行調整,而是以一種保留消息有效性但更改公鑰的方式對簽名進行調整。他將獲取一個針對一個公鑰進行驗證的簽名,並生成一個與第一個公鑰相關的簽名。

 

透過比特幣,某種程度上你可以生成與代數相關的密鑰,比如bip32分層確定性生成的密鑰。

 

本文為巴比特資訊授權刊登,原文標題為「加密貨幣中的「加密」:為什麼一切又怪又難