比特币中的密码学知识汇总
比特幣中的密碼學知識匯總
目前,我的閱讀比特幣源碼系列文章已經更新了5篇,對應于精通比特幣前3章內容的學習。
現在來到第4章密鑰與地址的學習,本章主要介紹了比特幣系統中公鑰,私鑰和地址之間相互的關系,如何生成比特幣地址,以及對于比特幣地址和密鑰的一些高級用法。
在這一章的學習中,對于剛入門的人來說,會被突然冒出的茫茫多密碼學相關知識搞得舉步維艱,因此對于密碼學相關知識有一定了解是必要的。
在經過一段時間的積累后,我將比特幣中涉及的密碼學知識相應的優質教程進行匯總如下。(本文不涉及知識的詳細講解,僅提供一個梳理后的資料大綱,大家按需學習)
比特幣中涉及的密碼學知識有:
- SHA-256
- RIPEMD-160
- Base58 Encode
- Base58Check Encode
- Elliptic Curve
下面分別給出更詳細匯總結果。
1. 數字指紋
數字指紋,又稱哈希函數,散列算法,是一種從任何一種數據中創建固定大小的數字“指紋”的方法。散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函數將數據打亂混合,重新創建一個叫做散列值(或哈希值)的指紋。散列值通常用一個短的隨機字母和數字組成的字符串來代表。
SHA 和 RIPEMD 是兩類重要的哈希函數集合,具體地,SHA-256 和 RIPEMD-160 在比特幣系統中使用公鑰生成公鑰哈希的過程中被應用。
下面來看看具體的教程推薦。
1.1 SHA-256
作為一個簡單了解,推薦這個教程。直觀體驗SHA-256是什么?為什么進行SHA-256?如何驗證SHA-256結果?
操作指南:驗證SHA256
進一步可以參看SHA-2系安全散列算法的wiki百科頁面,比較綜合,有解釋有代碼
wiki:SHA-2
如果想深究原理,建議看我寫的這篇博文,費了不少功夫,個人感覺解釋的很詳細。
SHA256算法原理詳解
SHA256 的C語言實現
1.2 RIPEMD-160
想簡單了解RIPEMD-160,探索 RIPEMD-160 是什么? 有多快? 以及一些更深入學習的鏈接。推薦下面兩個鏈接
wiki : RIPEMD
The hash function RIPEMD-160
進一步可以參看RIPEMD-160的bitcoinwiki頁面,具體過程更詳細一些,有偽代碼提供
bitcoinwiki : RIPEMD-160
對細節要求嚴苛的話,直接看論文吧:
The Cryptographic Hash Function RIPEMD-160
2. 非對稱加密
在比特幣系統中,我們使用公開密鑰加密(非對稱加密)創建一個密鑰對來控制比特幣的獲取。這個密鑰對包含了一個私鑰和一個(由私鑰導出的唯一)公鑰。公鑰被用來接收款項,私鑰被用來簽署一筆交易來花費比特幣。
公鑰和私鑰的背后存在著數學聯系,來保證私鑰可以被用來在消息上進行簽名,并且這個簽名可以被任何人使用對應的公鑰驗證(在不接觸私鑰的情況下)。
在比特幣系統中,你需要學習的非對稱加密相關知識有:
首先,了解非對稱加密的基本概念非對稱加密概述
隨后,比特幣的公鑰是由私鑰通過橢圓曲線乘法導出的,那么什么是橢圓曲線?
如果你很難理解橢圓曲線,不妨先學一個更簡單的非對稱加密算法作為過渡:RSA加密算法
此外,在交易中,需要使用私鑰進行簽名,那么什么是數字簽名?
最后,作為鏈圈幣圈的人,如果感興趣不妨了解下什么是數字證書?
具體資料如下:
2.1 橢圓曲線算法
掌握橢圓曲線需要對于模運算有所了解,這個網站提供了一些非常簡單的教程,還有測試和小游戲用來鞏固概念,挺有意思的。
模運算
橢圓曲線算法的數學性應該算是區塊鏈相關知識中比較強的,很多教程號稱用一種簡單直白的方式在不涉及數學的情況下讓你明白什么是橢圓曲線,相信我那不靠譜。
學習橢圓曲線算法最好的方式就是找經典英文教材,耐下心來讀。推薦這個系列教程共4篇:
1. a gentle introduction
2. finite fields and discrete logarithms
3. ECDH and ECDSA
4. breaking security and a comparison with RSA
讀完這些,你再回過頭來看一些中文資料,既能看懂,又能加深理解。
橢圓曲線加密算法介紹
橢圓曲線算法的幾個不同角度的解釋(知乎)
2.2 RSA算法
如果你很難理解橢圓曲線,不妨先學一個更簡單的非對稱加密算法:RSA加密算法
RSA加密算法的簡單介紹:
wiki:RSA algorithm
RSA Encryption – Tutorial
RSA加密算法流程的詳細教程:
阮一峰的網絡日志:RSA算法原理(一)
阮一峰的網絡日志:RSA算法原理(二)
How RSA Works With Examples
2.3 數字簽名
比特幣系統中,一筆交易歸屬以及真偽的驗證使用了數字簽名技術。
數字簽名指的是對一段信息制作簽名表示對其的認可,這個認可只對該信息有效,并且第三方無法根據該簽名構造你對其他信息的簽名。數字簽名方案包括:
生成公鑰私鑰對,私鑰用于簽名,必須安全保存;公鑰可以公開,用于他人驗證簽名有效性
把信息和私鑰作為輸入,輸出即為簽名
使用公鑰,信息和簽名作為輸入,進行驗證
在實踐中,我們往往通過對哈希值進行簽名,這樣可以實現對任意長度信息的簽名。
詳細過程可以閱讀What is a Digital Signature?
以及非對稱加密概述中的數字簽名部分
2.4 數字證書
數字證書是非對稱加密的又一個重要應用,據我所知在比特幣系統中并沒有直接應用。但也確實是個重要的概念,作為鏈圈幣圈的人,如果感興趣不妨了解下什么是數字證書?
推薦看這篇文章數字證書原理,講的很清晰
3. Base58編碼
Base58編碼在比特幣的密鑰和地址的編碼中被廣泛使用,用來增強密鑰或地址的可讀性以及防止傳輸或轉錄過程中發生錯誤。
例如,比特幣地址是在公鑰哈希的基礎上,使用Base58Check編碼得到的。
3.1 Base58 Encode
Base58是用于Bitcoin中使用的一種獨特的編碼方式,主要用于產生Bitcoin的錢包地址。
Base58是在base64編碼的基礎上得到的,去掉了容易混淆的字母(不使用數字”0”,字母大寫”O”,字母大寫”I”,和字母小寫”l”),以及影響雙擊選擇字符串的字母(”+”和”/”符號)。
我們首先要需要了解什么是Base64編碼
wiki : base64
Base64筆記(阮一峰的網絡日志)
然后再來學習base58編碼
wiki : base58
learn me a bitcoin : Base58
3.2 Base58Check Encode
而 Base58Check 編碼其實就是在Base58編碼的基礎上,添加了校驗的過程。流程并不復雜,如下圖所示:
其實上圖已經將 Base58Check 編碼的過程描述清楚了,更多的細節請參考:
bitcoinwiki : Base58Check encoding
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的比特币中的密码学知识汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探索比特币源码4-JSON-RPC接口的
- 下一篇: STM32学习及开发笔记八:采用主从计时