比特幣公鑰加密
1. 比特幣演算法原理
比特幣演算法主要有兩種,分別是橢圓曲線數字簽名演算法和SHA256哈希演算法。
橢圓曲線數字簽名演算法主要運用在比特幣公鑰和私鑰的生成過程中,該演算法是構成比特幣系統的基石。SHA-256哈希演算法主要是運用在比特幣的工作量證明機制中。
比特幣產生的原理是經過復雜的運演算法產生的特解,挖礦就是尋找特解的過程。不過比特幣的總數量只有2100萬個,而且隨著比特幣不斷被挖掘,越往後產生比特幣的難度會增加,可能獲得比特幣的成本要比比特幣本身的價格高。
比特幣的區塊由區塊頭及該區塊所包含的交易列表組成,區塊頭的大小為80位元組,由4位元組的版本號、32位元組的上一個區塊的散列值、32位元組的 Merkle Root Hash、4位元組的時間戳(當前時間)、4位元組的當前難度值、4位元組的隨機數組成。擁有80位元組固定長度的區塊頭,就是用於比特幣工作量證明的輸入字元串。不停的變更區塊頭中的隨機數即 nonce 的數值,並對每次變更後的的區塊頭做雙重 SHA256運算,將結果值與當前網路的目標值做對比,如果小於目標值,則解題成功,工作量證明完成。
比特幣的本質其實是一堆復雜演算法所生成的一組方程組的特解(該解具有唯一性)。比特幣是世界上第一種分布式的虛擬貨幣,其沒有特定的發行中心,比特幣的網路由所有用戶構成,因為沒有中心的存在能夠保證了數據的安全性。
2. 比特幣密鑰是什麼意思
比特幣的所有權是通過數字密鑰、比特幣地址和數字簽名來確定的。
比特幣包含一系列密鑰對、每個密鑰對包含一個公鑰和私鑰。
私鑰是一個隨機數、私鑰通過橢圓曲線演算法生成公鑰、公鑰再通過單向加密哈希函數生成比特幣地址。
比特幣使用非對稱加密、使得簽名只能由私鑰產生、且在不泄露私鑰情況下所有人都可以驗證該簽名p。
私鑰和公鑰有可以被編碼成多種類型格式、無一例外的作用就是為了方便識別及錢包操作方便。
3. 什麼是比特幣加密技術
比特幣和區塊鏈的誕生需要依賴於很多核心技術的突破:一是拜占庭容錯技術;二是非對稱加密技術;三是點對點支付技術。下面會依次介紹。
拜占庭容錯技術
比特幣和區塊鏈誕生的首要難點在於如何創建分布式共識機制,也就是菜斯利·蘭伯特等人1982年提出的拜占庭將軍問題。所謂拜占庭將軍問題是指,把戰爭中互不信任的各城邦軍隊如何達成共識並決定是否出兵的決策過程。延伸至計算機領域,試圖創建具有容錯性的分布式系統,即使部分節點失效仍可確保系統正常運行,也可讓多個基於零信任基礎的節點達成共識,並確保信息傳遞的一致性。
中本聰所提到的「拜占庭將軍問題」解決方法起始於亞當﹒拜克在1997年發明的哈希現金演算法機制,起初該設計是用於限制垃圾郵件發送與拒絕服務攻擊。2004年,密碼朋克運動早期和重要成員哈爾·芬尼將亞當﹒拜克的哈希現金演算法改進為可復用的工作量證明機制。他們的研究又是基於達利亞·馬凱與邁克爾·瑞特的學術成果:拜占庭容錯機制。正是哈爾·芬尼的可復用的工作量證明機制後來成為比特幣的核心要素之一。哈爾·芬尼是中本聰的最早支持者,同時也是第一筆比特幣轉賬的接受者,在比特幣發展的早期與中本聰有大量互動與交流。
非對稱加密技術
比特幣的非對稱加密技術來源於以下幾項密碼學的技術創新:1976年,Sun公司前首席安全官Whitfield Diffie與斯坦福大學教授Martin Hell,在開創性論文《密碼學的新方向》首次提出公開鑰匙密碼學的概念,發明了非對稱加密演算法。1978年省理工學院的倫納德·阿德曼、羅納德·李維斯特、阿迪·薩莫爾三名研究人員,共同發明了公開鑰匙系統「RSA」可用於數據加密和簽名,率先開發第一個具備商業實用性的非對稱RSA加密演算法。1985年,Neal Koblitz和Victor Miller倆人,首次提出將橢圓曲線演算法(ECC),應用於密碼學,並建立公鑰加密的演算法,公鑰密碼演算法的原理是利用信息的不對稱性,公鑰對應的是私鑰,私鑰是解開所有信息的鑰匙,公鑰可以由私鑰反推算出。ECC能夠提供比RSA更高級別的安全。比特幣使用的就是橢圓曲線演算法公鑰用於接收比特幣,而私鑰則是比特幣支付時的交易簽名。這些加密演算法奠定了當前非對稱加密理論的基礎,被廣泛應用於網路通信領域。但是,當時這些加密技術發明均在NSA嚴密監視的視野之內。NSA最初認為它們對國家安全構成威脅,並將其視為軍用技術。直到20世紀90年代末,NSA才放棄對這些非對稱加密技術的控制,RSA演算法、ECC演算法等非對稱加密技術最終得以走進公眾領域。
不過,中本聰並不信任NSA公布的加密技術,在比特幣系統中沒有使用RSA公鑰系統,原因除了ECC能夠提供比RSA更高級別的安全性能外,還擔心美國安全部門在RSA留有技術後門。2013年9月,斯諾登就曾爆料NSA採用秘密方法控制加密國際標准,比特幣採用的RSA可能留有後門,NSA能以不為人知的方法弱化這條曲線。所幸的是,中本聰神一般走位避開了RSA的陷阱,使用的加密技術不是NSA的標准,而是另一條鮮為人知的橢圓曲線,這條曲線並不在美國RSA的掌握之下。全世界只有極少數程序躲過了這一漏洞,比特幣便是其中之一。
4. 公鑰與私鑰的區別與應用。
現實生活中,我要給依依轉1個比特幣,我需要在比特幣交易平台、比特幣錢包或者比特幣客戶端裡面,輸入我的比特幣錢包地址、依依的錢包地址、轉出比特幣的數量、手續費。然後,我們等十分鍾左右,礦工處理完交易信息之後,這1個比特幣就成功地轉給依依了。
這個過程看似很簡單也很便捷,跟我們現在的銀行卡轉賬沒什麼區別,但是,你知道這個過程是怎樣在比特幣系統裡面實現的嗎?它隱藏了哪些原理呢?又或者,它是如何保證交易能夠在一個安全的環境下進行呢?
我們今天就來講一講。
對於轉出方和接收方來講,也就是我和依依(我是轉出方,依依是接收方)我們都需要出具兩個東西:錢包地址、私鑰。
我們先說錢包地址。比特幣錢包地址其實就相當於銀行卡、支付寶賬號、微信錢包賬號,是比特幣支付轉賬的「憑證」,記錄著平台與平台、錢包與錢包、錢包與平台之間的轉賬信息。
我們在使用銀行卡、支付寶、微信轉賬時都需要密碼,才能夠支付成功。那麼,在比特幣轉賬中,同樣也有這么一個「密碼」,這個「密碼「被稱作「私鑰」。掌握了私鑰,就掌握了其對應比特幣地址上的生殺大權。
「私鑰」是屬於「非對稱加密演算法」裡面的概念,與之對應的還有另一個概念,名叫:「公鑰」。
公鑰和私鑰,從字面意思我們就可以理解:公鑰,是可以公開的;而私鑰,是私人的、你自己擁有的、需要絕對保密的。
公鑰是根據私鑰計算形成的,比特幣系統使用的是橢圓曲線加密演算法,來根據私鑰計算出公鑰。這就使得,公鑰和私鑰形成了唯一對應的關系:當你用了其中一把鑰匙加密信息時,只有配對的另一把鑰匙才能解密。所以,正是基於這種唯一對應的關系,它們可以用來驗證信息發送方的身份,還可以做到絕對的保密。
我們舉個例子講一下,在非對稱加密演算法中,公鑰和私鑰是怎麼運作的。
我們知道,公鑰是可以對外公開的,那麼,所有人都知道我們的公鑰。在轉賬過程中,我不僅要確保比特幣轉給依依,而不會轉給別人,還得讓依依知道,這些比特幣是我轉給她的,不是鹿鹿,也不是韭哥。
比特幣系統可以滿足我的上述訴求:比特幣系統會把我的交易信息縮短成固定長度的字元串,也就是一段摘要,然後把我的私鑰附在這個摘要上,形成一個數字簽名。因為數字簽名裡面隱含了我的私鑰信息,所以,數字簽名可以證明我的身份。
完成之後,完整的交易信息和數字簽名會一起廣播給礦工,礦工用我的公鑰進行驗證、看看我的公鑰和我的數字簽名能不能匹配上,如果驗證成功,都沒問題,那麼,就能夠說明這個交易確實是我發出的,而且信息沒有被更改。
接下來,礦工需要驗證,這筆交易花費的比特幣是否是「未被花費」的交易。如果驗證成功,則將其放入「未確認交易」,等待被打包;如果驗證失敗,則該交易會被標記為「無效交易」,不會被打包。
其實,公鑰和私鑰,簡單理解就是:既然是加密,那肯定是不希望別人知道我的消息,所以只能我才能解密,所以可得出:公鑰負責加密,私鑰負責解密;同理,既然是簽名,那肯定是不希望有人冒充我的身份,只有我才能發布這個數字簽名,所以可得出:私鑰負責簽名,公鑰負責驗證。
到這里,我們簡單概括一下上面的內容。上面我們主要講到這么幾個詞:私鑰、公鑰、錢包地址、數字簽名,它們之間的關系我們理一下:
(1)私鑰是系統隨機生成的,公鑰是由私鑰計算得出的,錢包地址是由公鑰計算得出的,也就是:私鑰——公鑰——錢包地址,這樣一個過程;
(2)數字簽名,是由交易信息+私鑰信息計算得出的,因為數字簽名隱含私鑰信息,所以可以證明自己的身份。
私鑰、公鑰都是密碼學范疇的,屬於「非對稱加密」演算法中的「橢圓加密演算法」,之所以採用這種演算法,是為了保障交易的安全,二者的作用在於:
(1)公鑰加密,私鑰解密:公鑰全網公開,我用依依的公鑰給信息加密,依依用自己的私鑰可以解密;
(2)私鑰簽名,公鑰驗證:我給依依發信息,我加上我自己的私鑰信息形成數字簽名,依依用我的公鑰來驗證,驗證成功就證明的確是我發送的信息。
只不過,在比特幣交易中,加密解密啦、驗證啦這些都交給礦工了。
至於我們現在經常用的錢包APP,只不過是私鑰、錢包地址和其他區塊鏈數據的管理工具而已。錢包又分冷錢包和熱錢包,冷錢包是離線的,永遠不聯網的,一般是以一些實體的形式出現,比如小本子什麼的;熱錢包是聯網的,我們用的錢包APP就屬於熱錢包。
5. 比特幣區塊鏈用什麼技術來保證交易安全
公鑰密碼學。比特幣使用公鑰密碼學比特幣是一種加密貨幣(cryptocurreny),「Crypto」是密碼學(cryptography)的縮寫,更具體地說,是公鑰密碼學。
6. 比特幣如何防止篡改
比特幣網路主要會通過以下兩種技術保證用戶簽發的交易和歷史上發生的交易不會被攻擊者篡改:
非對稱加密可以保證攻擊者無法偽造賬戶所有者的簽名;
共識演算法可以保證網路中的歷史交易不會被攻擊者替換;
- 非對稱加密演算法3是目前廣泛應用的加密技術,TLS 證書和電子簽名等場景都使用了非對稱的加密演算法保證安全。非對稱加密演算法同時包含一個公鑰(Public Key)和一個私鑰(Secret Key),使用私鑰加密的數據只能用公鑰解密,而使用公鑰解密的數據也只能用私鑰解密。
- 1使用如下所示的代碼可以計算在無限長的時間中,攻擊者持有 51% 算力時,改寫歷史 0 ~ 9 個區塊的概率9:
- #include
- #include
- double attackerSuccessProbability(double q, int z) {
- double p = 1.0 - q;
- double lambda = z * (q / p);
- double sum = 1.0;
- int i, k;
- for (k = 0; k <= z; k++) {
- double poisson = exp(-lambda);
- for (i = 1; i <= k; i++)
- poisson *= lambda / i;
- sum -= poisson * (1 - pow(q / p, z - k));
- }
- return sum;
- }
- int main() {
- for (int i = 0; i < 10; i++) {
- printf("z=%d, p=%f\n", i, attackerSuccessProbability(0.51, i));
- }
- return 0;
- }
- 通過上述的計算我們會發現,在無限長的時間中,佔有全網算力的節點能夠發起 51% 攻擊修改歷史的概率是 100%;但是在有限長的時間中,因為比特幣中的算力是相對動態的,比特幣網路的節點也在避免出現單節點佔有 51% 以上算力的情況,所以想要篡改比特幣的歷史還是比較困難的,不過在一些小眾的、算力沒有保證的一些區塊鏈網路中,51% 攻擊還是極其常見的10。
- 防範 51% 攻擊方法也很簡單,在多數的區塊鏈網路中,剛剛加入區塊鏈網路中的交易都是未確認的,只要這些區塊後面追加了數量足夠的區塊,區塊中的交易才會被確認。比特幣中的交易確認數就是 6 個,而比特幣平均 10 分鍾生成一個塊,所以一次交易的確認時間大概為 60 分鍾,這也是為了保證安全性不得不做出的犧牲。不過,這種增加確認數的做法也不能保證 100% 的安全,我們也只能在不影響用戶體驗的情況下,盡可能增加攻擊者的成本。
- 研究比特幣這樣的區塊鏈技術還是非常有趣的,作為一個分布式的資料庫,它也會遇到分布式系統經常會遇到的問題,例如節點不可靠等問題;同時作為一個金融系統和賬本,它也會面對更加復雜的交易確認和驗證場景。比特幣網路的設計非常有趣,它是技術和金融兩個交叉領域結合後的產物,非常值得我們花時間研究背後的原理。
- 比特幣並不能 100% 防止交易和數據的篡改,文中提到的兩種技術都只能從一定概率上保證安全,而降低攻擊者成功的可能性也是安全領域需要面對的永恆問題。我們可以換一個更嚴謹的方式闡述今天的問題 — 比特幣使用了哪些技術來增加攻擊者的成本、降低交易被篡改的概率:
比特幣使用了非對稱加密演算法,保證攻擊者在有限時間內無法偽造賬戶所有者的簽名;
比特幣使用了工作量證明的共識演算法並引入了記賬的激勵,保證網路中的歷史交易不會被攻擊者快速替換;
- 通過上述的兩種方式,比特幣才能保證歷史的交易不會被篡改和所有賬戶中資金的安全。
非對稱加密
圖 4 - 51% 攻擊
總結
7. 比特幣的核心技術包括
比特幣的核心技術包括1、非對稱加密技術 2、點對點傳輸技術 3、哈希現金演算法機制。
1.非對稱加密技術和對稱加密技術最大的不同就是有了公鑰和私鑰之分。非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。公鑰是公開的,私鑰是保密的。 由於不涉及私鑰的傳輸,整個傳輸過程就變得安全多了。後來又出現了具備商業實用性的非對稱RSA加密演算法以及後來的橢圓曲線加密演算法(ECC),這些都奠定了加密演算法理論的基礎,但是美國國家安全局NSA最初認為這些技術對國家安全構成威脅,所以對這些技術進行了嚴密的監控,知道20世紀90年代末NSA才放棄了對這些技術的監控,這些非對稱技術才最終走入了了公眾的視野。這項技術對應到比特幣場景中就是比特幣的地址和私鑰。
2.點對點傳輸技術顧名思義,就是無需中心伺服器、個體之間可以相互傳輸信息的技術,P2P網路的重要目標就是讓所有客戶端都能提供資源,包括寬頻、存儲空間和計算能力。 對應到比特幣網路中就是利用點對點的技術實現真正的去中心化。
3.哈希現金演算法機制就是讓那些製造垃圾郵件的人付出相應的代價!發送者需要付出一定的工作量,比如說哈希運算,幾秒鍾時間對於普通用戶不算什麼,但對於垃圾郵件的發送者每封郵件都要花幾秒鍾的時間,這樣的成本是沒有辦法負擔的。同時每次運算都會蓋上一個獨一無二的時間戳,這樣就能保證郵件發送方不能重復使用一個運算結果。 對於比特幣而言也是同樣的道理,如何保證一筆數字貨幣沒有被多次消費(Double Spending),就類似於驗證一封郵件沒有被多次發送,所以就要保證每一筆交易順利完成,必須要付出一定的工作量(proof of Work),並且在完成交易時蓋上一個時間戳表示交易完成的時間。
8. 比特幣交易過程中是如何加密的
比特幣系統是採用非對稱加密來提升交易安全性。這也是盈富財經學院的人告訴我的,當時有個朋友在那。
在信息加密以及解密過程中,會使用了不同的密鑰,只有利用對應的公鑰才能進行解密,擁有私鑰就等於擁有比特幣的所有權。
同樣,比特幣用戶也需通過身份驗證,就能確保自身加密貨幣資產的所有權。
9. 比特幣的核心技術包括哪些
比特幣的核心技術包括1、非對稱加密技術 2、點對點傳輸技術 3、哈希現金演算法機制。
1.非對稱加密技術和對稱加密技術最大的不同就是有了公鑰和私鑰之分。非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。公鑰是公開的,私鑰是保密的。 由於不涉及私鑰的傳輸,整個傳輸過程就變得安全多了。後來又出現了具備商業實用性的非對稱RSA加密演算法以及後來的橢圓曲線加密演算法(ECC),這些都奠定了加密演算法理論的基礎,但是美國國家安全局NSA最初認為這些技術對國家安全構成威脅,所以對這些技術進行了嚴密的監控,知道20世紀90年代末NSA才放棄了對這些技術的監控,這些非對稱技術才最終走入了了公眾的視野。這項技術對應到比特幣場景中就是比特幣的地址和私鑰。
2.點對點傳輸技術顧名思義,就是無需中心伺服器、個體之間可以相互傳輸信息的技術,P2P網路的重要目標就是讓所有客戶端都能提供資源,包括寬頻、存儲空間和計算能力。 對應到比特幣網路中就是利用點對點的技術實現真正的去中心化。
3.哈希現金演算法機制就是讓那些製造垃圾郵件的人付出相應的代價!發送者需要付出一定的工作量,比如說哈希運算,幾秒鍾時間對於普通用戶不算什麼,但對於垃圾郵件的發送者每封郵件都要花幾秒鍾的時間,這樣的成本是沒有辦法負擔的。同時每次運算都會蓋上一個獨一無二的時間戳,這樣就能保證郵件發送方不能重復使用一個運算結果。 對於比特幣而言也是同樣的道理,如何保證一筆數字貨幣沒有被多次消費(Double Spending),就類似於驗證一封郵件沒有被多次發送,所以就要保證每一筆交易順利完成,必須要付出一定的工作量(proof of Work),並且在完成交易時蓋上一個時間戳表示交易完成的時間。
10. 比特幣錢包是什麼
比特幣錢包里存儲著你的比特幣信息,包括比特幣地址(類似於你的銀行卡賬號)、私鑰(類似於你銀行卡的密碼)。就像實物錢包里可以存放多張銀行卡,比特幣錢包里也可以存儲多個比特幣地址,以及每個比特幣地址所對應的獨立的私鑰。比特幣錢包的核心功能就是保護你的私鑰,如果錢包丟失,你將永遠失去這筆比特幣。比特幣錢包有很多種形態,如PC或手機錢包客戶端、在線網頁錢包、甚至是記錄了比特幣私鑰的小本本(紙錢包)或者大腦(腦錢包)。你可以根據需求來選擇適合自己的錢包。俗話說「雞蛋不要放在一個籃子里」,採用多種方式分散存儲也是降低風險的有效方式。