待字閨中開發(fā)了一門區(qū)塊鏈方面的課程:《深入淺出ETH原理與智能合約開發(fā)》,馬良老師講授趁矾。此簡書文集記錄我的學習筆記且预。
課程共8節(jié)課槽袄。其中,前四課講ETH原理锋谐,后四課講智能合約遍尺。
第一課分為四部分:
- 以太坊簡介
- 課程框架
- 密碼學算法簡介
- 實驗平臺搭建
這篇文章是第三部分的學習筆記:密碼學算法簡介。
在以太坊中主要使用了兩種密碼學的算法涮拗,單向散列函數(shù)和橢圓曲線加密算法乾戏。
1、單向散列函數(shù)
Hash函數(shù)(單向散列)是密碼學的一個重要分支三热,它是一種將任意長度的輸入變換為固定長度的輸出且不可逆的單項密碼體制鼓择,Hash函數(shù)在數(shù)字簽名和消息完整性檢測等方面有著廣泛的應用。
1.1 單向散列函數(shù)簡介
單向散列函數(shù)的特點:
- 任意長度的輸入數(shù)據(jù)就漾,輸出值是固定長度呐能,相當于輸入數(shù)據(jù)的指紋。
- 每一個特定的輸入數(shù)據(jù)都對應到一個“唯一”的輸出值抑堡。這一點摆出,可以聯(lián)想人的指紋。
- 從輸出值(散列值)無法反推出輸入值夷野。
- 在給定時間和給定計算資源的條件下懊蒸,以目前的技術水平,無法找到有同一個數(shù)據(jù)“指紋”的兩條不同的數(shù)據(jù)悯搔。
- 輸入數(shù)據(jù)改變 1 bit(位)骑丸,輸出結果也會產(chǎn)生巨大變化。
常見的Hash函數(shù)有MD5妒貌、SHA1通危、SHA256。其中灌曙,MD5菊碟、SHA1都已被破解,有安全隱患在刺。SHA256目前是安全的逆害。
1.2 Keccak256
由于MD5头镊、SHA系列的Hash函數(shù)遭受到了碰撞攻擊,NIST(National Institute of Standards and Technology)在2005年10月31日到11月1日和2006年8月24日至25日舉辦了兩次Hash函數(shù)研討會魄幕,評估了Hash函數(shù)當前的使用狀況相艇,征求了公眾對Hash函數(shù)的新規(guī)則。經(jīng)過討論之后纯陨,在2007年11月坛芽,NIST決定通過公開競賽,以高級加密標準AES的開發(fā)過程為范例開發(fā)新的Hash函數(shù)翼抠。經(jīng)過一系列競賽咙轩,NIST在2012年評選出最終算法并產(chǎn)生了新的Hash標準。Keccak算法由于其較強的安全性和軟硬件實現(xiàn)性能阴颖,最終被選為新一代的標準Hash算法活喊,并被命名為SHA-3。
以太坊采用的是Keccak256膘盖,也就是 SHA-3 的前身胧弛。
- SHA256 屬于MD4 家族尤误,使用同一結構的壓縮函數(shù)引擎侠畔,所以,攻擊MD5和SHA1的方法可以被擴展损晤,用來攻擊SHA256软棺。雖然目前還沒有爆出SHA256 被攻擊成功的案例,但如果下一代單向散列函數(shù)還基于同一原理尤勋,系統(tǒng)風險會大大增加喘落。
- Keccak 屬于完全不同的框架(海綿函數(shù)引擎),可以分散被成功攻擊的風險最冰。Keccak256軟件實現(xiàn)速度較慢瘦棋, 但是對于硬件實現(xiàn)非常友好,基于硬件的算法實現(xiàn)數(shù)據(jù)處理速度很快暖哨。
- NIST接受原始的Keccak256設計后赌朋,更改了Padding的格式, 以太坊堅持使用了原始的方案篇裁,因為這一更改存在爭議沛慢,導致了正式的SHA3實現(xiàn)和原始的Keccak不兼容。
2达布、橢圓曲線加密算法
2.1 secp256 k1 數(shù)字簽名算法
數(shù)字簽名算法一般的框架是由非對稱密鑰算法結合單向散列函數(shù)算法構成的一個綜合解決方案团甲。
以太坊重用了比特幣所采用的非對稱密鑰算法。也就是重用了secp256k1 這條曲線黍聂,再結合了Keccak256單向散列函數(shù)算法躺苦。
用戶需要保有一對密鑰:公鑰/私鑰身腻。私鑰是最重要的,公鑰對所有人公開匹厘,同時也是生成地址 /賬戶的根據(jù)霸株。
一個以太坊外部賬號是由公鑰做Keccak256運算,取其后20位而得出集乔。其中去件,Keccak256運算得到的值為32位。公式如下:
EOA_Address=Keccak256(K_pub), LSB 20 bytes
數(shù)字簽名的特性:不可篡改扰路,不可抵賴尤溜。
2.2 數(shù)字簽名的例子
Alice給Bob轉賬。
- Alice 發(fā)起一個交易
- 對交易做Kecca256生成其散列值
- Alice拿自己的私鑰對散列值簽名
- 將交易和簽名一起發(fā)給Bob
- Bob也對交易做Kecca256生成其散列值
- Bob再拿Alice的簽名和Alice的公鑰通過驗證算法來檢查交易汗唱,通過或失敗宫莱。
2.3 secp256 k1 的廬山真面目
(這部分先略去,在評論區(qū)放一個知乎上搜到的問答貼哩罪,作為延伸閱讀)