大家有沒有想過,為什麼這麼多人對區塊鏈這麼感興趣,對發幣這麼感興趣。答案很簡單,無非是區塊鏈的通證經濟能夠讓大家的生活越來越好,也讓大家都知道區塊鏈的經濟形態是條不錯的致富之道。

可是,是什麼樣的機制保障了區塊鏈的經濟形態能夠安全穩定持續地發展下去呢?

今天我們來分享為區塊鏈保駕護航的機制—加密演算法的介紹。

先解釋加密演算法前,請老司機原諒,我們先簡單介紹下密碼學。

密碼學本質是加密演算法,為數據的明文文件進行加密處理,使其變成不可讀的一段代碼,但輸入相應的密鑰後,才能顯示本真的內容。大家通過這樣的方式來保護數據的安全,確保數據不被盜竊不被閱讀,該過程稱為加密;該過程逆向邏輯是解密;該過程中,在討論用什麼樣的數學演算法進行保密性高的加密,稱為密碼學。

現在比特幣常用的加密演算法有哪些呢?我們逐一介紹。

現比特幣仍繼續使用公開密鑰加密(public-key cryptography,也稱為非對稱加密)方式進行數據加密,實質是一對數學演算法相關的公鑰密鑰解密的關係,使用通過私鑰解開公鑰(公開的密鑰)後獲取本真的信息,此過程是非對稱加密演算法。

公鑰的主要作用:加密;驗證簽名。

私鑰的主要作用:簽名;解密。

特性:

通過私鑰可以計算出公鑰,反之則不行。

公鑰加密:公鑰加密的內容可以用私鑰來解密——只有私鑰持有者才能解密。

私鑰簽名:私鑰簽名的內容可以用公鑰驗證。公鑰能驗證的簽名均可視為私鑰持有人所簽署。

使用原則:

① 每一個公鑰都對應一個私鑰。

② 密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。

③ 如果用其中一個密鑰加密數據,則只有對應的那個密鑰纔可以解密。

④ 如果用其中一個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。

對稱密鑰密碼的主要應用就是公鑰加密和公鑰認證

舉個例子:

A(客戶)想給B(伺服器)發送一段文字,但是不想讓別人看到,因此想使用非對稱加密方法來加密這段文字,當然,B需要有一對公鑰和私鑰:

① B將他的公鑰發送給A② A用B給他的公鑰加密這段文字,然後傳給B③ B用他的私鑰解密A發過來的消息,這裡要強調的是,只要B的私鑰不泄露,這封信就是安全的,即使落在別人手裡,也無法解密。通過這幾步,B就能成功收到A發送的信息,同時又達到了保密的目的。

那如何解密呢?

另一種是橢圓曲線加密演算法

橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的演算法,基於橢圓曲線數學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。

橢圓曲線密碼學的主要優勢是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密演算法——提供相當的或更高等級的安全。橢圓曲線密碼學的另一個優勢是可以定義羣之間的雙線性映射,基於Weil對或是Tate對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。

雙線性映射解釋:在數論中,一個雙線性映射是由兩個向量空間上的元素,生成第三個向量空間上一個元素之函數,並且該函數對每個參數都是線性的。

橢圓曲線加密演算法本質是數標軸上曲線的方程式計算,通過數的計算得到加密/解密。

例如:

公開密鑰演算法總是要基於一個數學上的難題。比如RSA 加密演算法依據的是:給定兩個素數p、q 很容易相乘得到n,而對n進行因式分解卻相對困難。那橢圓曲線上有什麼難題呢?

假設如下方程等式:

K=kG [其中 K,G為Ep(a,b)上的點,k為小於n(n是點G的階)的整數]

不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困難了。

這就是橢圓曲線加密演算法採用的難題。我們把點G稱為基點(base point),k(k<n,n為基點G的階)稱為私有密鑰(privte key),K稱為公開密鑰(public key)。

我們看下圖,下圖描述一個利用橢圓曲線進行加密通信的過程:

1、用戶A選定一條橢圓曲線Ep(a,b),並取橢圓曲線上一點,作為基點G。

2、用戶A選擇一個私有密鑰k,並生成公開密鑰K=kG。

3、用戶A將Ep(a,b)和點K,G傳給用戶B。

4、用戶B接到信息後,將待傳輸的明文編碼到Ep(a,b)上一點M(編碼方法很多,這裡不作討論),併產生一個隨機整數r(r<n)。

5、用戶B計算點C1=M+rK;C2=rG。

6、用戶B將C1、C2傳給用戶A。

7、用戶A接到信息後,計算C1-kC2,結果就是點M。因為

C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再對點M進行解碼就可以得到明文。

在這個加密通信中,如果有一個偷窺者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通過K、G 求k 或通過C2、G求r 都是相對困難的。因此,H無法得到A、B間傳送的明文信息。

密碼學中,描述一條Fp上的橢圓曲線,常用到六個參量:

T=(p,a,b,G,n,h)。

(p 、a 、b 用來確定一條橢圓曲線,

G為基點,

n為點G的階,

h 是橢圓曲線上所有點的個數m與n相除的整數部分)

這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:

1、p 當然越大越安全,但越大,計算速度會變慢,200位左右可以滿足一般安全要求;

2、p≠n×h;

3、pt≠1 (mod n),1≤t<20;

4、4a3+27b2≠0 (mod p);

5、n 為素數;

6、h≤4。

量子計算機能解決的問題,是否會威脅到當前的密碼體系呢?答案是的確會。目前的密碼體系大體有兩種:對稱密碼與非對稱密碼。AES是前一種的例子,RSA是後一種的例子。又如,X11 是由達世幣核心研發者Evan Duffield 發明,並得到廣泛應用的哈希演算法。它的鏈式哈希演算法運用了一系列共 11 個科學哈希演算法,作為工作量證明。這樣不僅確保了信息處理分配的公正,還保留了比特幣原有的特性。

橢圓曲線數字簽名演算法(ECDSA)是使用橢圓曲線密碼(ECC)對數字簽名演算法(DSA)的模擬。ECDSA於 1999 年成為 ANSI 標準,並於 2000 年成為 IEEE 和 NIST 標準。它在 1998 年既已為 ISO 所接受,並且包含它的其他一些標準亦在 ISO 的考慮之中。與普通的離散對數問題(discrete logarithm problem DLP)和大數分解問題(integer factorization problem IFP)不同,橢圓曲線離散對數問題(elliptic curve discrete logarithm problemECDLP)沒有亞指數時間的解決方法。因此橢圓曲線密碼的單位比特強度要高於其他公鑰體制。

對稱密碼的話,Grover演算法能進行不小的加速,比如說AES-128的密鑰空間是2^128,通過構造適當的可以量子化的資料庫黑盒子,Grover演算法能在大約2^64的時間內找到密鑰,而經典計算機則需要大概2^128的時間。不過這個問題並不特別大,換用更長的密鑰就可以了。問題在於非對稱密碼,無論是基於因子分解問題的RSA,還是基於橢圓曲線上離散對數的ElGamal,都可以用量子計算機在很短的時間內破解。而偏偏這些演算法特別重要,無論是銀行轉賬、身份識別、在線瀏覽,很多都需要非對稱演算法來進行密鑰分發與身份驗證。舉個例子,上Gmail時候會自動SSL加密,這個東西就是用RSA來做密鑰分發的。

那麼,一旦量子計算機做出來之後,是不是隱私就無處遁形呢?

那倒不一定。

學界早就關注這個現象了,也提出了一些能解決這個問題的非對稱密碼體系,比如說基於格(lattice)的體系(比如NTRU)、基於糾錯碼的體系(McEliece),還有基於多變數的體系。這些體系都不依賴於隱含子羣問題,所以對量子計算機造成的威脅是免疫的。不過,這些體系各有各不太實用的地方,也有些弱點,所以目前沒有很多人採用。不過一旦足夠規模的量子計算機造出來了,我們也有足夠的技術儲備來維持我們的隱私,維護目前的秩序。

通過上文了解了我們非常熟悉的加密演算法,大家也通過實際的論證瞭解橢圓曲線的加密演算法的推演,不難看出,現有的技術會因新出現的先進技術的出現,倒在沙灘上。

因此,Nervos CKBde 設計很大程度是對區塊鏈的架構,區塊鏈的技術(如加密演算法、共識、隱私保護等多維度問題)思考的結晶,Nervos團隊成員對此做了很多的改進,讓我們一起拭目以待。

最後,歡迎大家一起加入Nervos fans愛好者社區,我們一起加入社區,通過貢獻代碼,獲取空投的代幣。

推薦閱讀:

相關文章