密碼學是如何保護區塊鏈的

鏈客,專爲開發者而生,有問必答!算法

此文章來自區塊鏈技術社區,未經容許拒絕轉載。瀏覽器

在這裏插入圖片描述

密碼學是如何保護區塊鏈的安全

摘要:密碼學是應用數學函數以保證數據安全性的科學。 許多風靡的影視做品都在向人們暗示:只要有足夠厲害的黑客,任何系統均可以被攻破。這種「好萊塢式黑客攻擊」並非真實世界的場景——黑客必須發現系統暴露的漏洞,例如未上鎖的服務器機房、易於猜想的密碼、未受保護的網絡端口或者內部安裝的「後門」,以進而實現未經受權的訪問。服務器

密碼學是應用數學函數以保證數據安全性的科學。網絡

許多風靡的影視做品都在向人們暗示:只要有足夠厲害的黑客,任何系統均可以被攻破。這種「好萊塢式黑客攻擊」並非真實世界的場景——黑客必須發現系統暴露的漏洞,例如未上鎖的服務器機房、易於猜想的密碼、未受保護的網絡端口或者內部安裝的「後門」,以進而實現未經受權的訪問。函數

雖然咱們的確永遠沒法確保一個系統沒有任何漏洞——畢竟系統都是由不完美的人類所完成的,可是「任何系統均可以被攻破」這一觀點倒是錯誤的。自90年代初以來,咱們利用密碼技術已經能夠實現徹底免受黑客攻擊。但這一技術在應用時有時會留下被黑客利用的空間。區塊鏈

密碼學自己並不會被黑客攻破以生成僞造的數字簽名(立刻會給出定義),就像數學不能被黑客攻擊而使得2+2=5同樣——雖然密碼學和數學均可能被錯誤地使用。若是一個使用密碼學的系統被攻破,那隻多是由於設計者錯誤地應用了密碼學。這不是由於密碼學不起做用,也不是由於有人「破解」了密碼學——就像你的銀行錯誤地處理了你的帳戶時不是數學的錯誤、你的媽媽下載不熟悉的附件而感染計算機病毒時不是電子郵件的錯誤同樣。這是一個很重要的特色,由於比特幣是一個很是直接的密碼學應用。測試

密碼學並非一種未經考驗的新技術。比特幣所使用的全部密碼學技術自互聯網誕生以來一直都在使用着,是天天使用的許多常見互聯網協議的重要部分。計算機科學家認爲密碼學是可靠和必要的,就像NASA(美國國家航空航天局)認爲宇航科學是可靠和必要的同樣。網站

公私鑰對:密碼學的基石加密

公私鑰對是區塊鏈所使用密碼學的基石。公私鑰對包含兩部分:私鑰和公鑰。這兩個密鑰實際上只不過是具備特定數學關係的大整數,用於代替密碼和用戶名。

你會擁有一個公鑰,就像你的名字或用戶名同樣:在大多數狀況下,你能夠向任意請求者分享你的公鑰,而擁有它的人能夠用它來引用或聯繫你。它與你的名聲(或者比特幣中你的交易歷史)綁定,因此你可能會有多個公鑰(所以有多個公私鑰對)用於不一樣的目的。公鑰可用於引用或查看賬戶,但它自身並不能對該賬戶做任何操做。

私鑰應該像密碼同樣:不該向任何人分享,它用於驗證某些操做,例如發送BTC(比特幣)。

可是私鑰和密碼之間存在重要的區別。要使用密碼,你必須將其發送給某我的或服務器,以便其對密碼進行驗證。你須要相信密碼在發送後會被負責任地處理。相比之下,私鑰可用於證實本身的身份而無需將其發送給任何人。它曾經存儲或直接使用過的惟一場所就是在你的本地設備上。

這一點很重要,由於若是你能夠在不向任何人發送你的祕密信息的狀況下對本身進行身份認證,則能夠保證徹底控制其安全性——你不易受其餘系統的安全漏洞影響。這是使比特幣不可撼動的重要組成部分。比特幣自己並無存儲可能泄露給攻擊者的密碼或私鑰,但用戶仍然能夠對交易進行驗證。

可是,若是你歷來未曾向任何人發送私鑰,那麼如何使用私鑰來驗證交易呢?答案與私鑰和公鑰之間的數學關係有關:數字簽名。

數字簽名

有許多種不一樣的生成和驗證數字簽名的技術,支撐它們工做的數學原理遠遠超出了本文的範疇。對於那些不熟悉密碼學的人來講,這裏所描述的過程最初聽起來可能使人難以置信。我很清楚地記得,當我四年前剛開始研究比特幣的時候就有過這樣的感受。

如今我將再次簡要提到,這些技術被用於許多常見的互聯網協議中,而且是信息科學的既有組成部分。

想象有Alice和Bob兩我的,他們已經在私下交換了公鑰。Alice想給Bob發送一條消息,但Bob是一個很是多疑的人,除非他可以以數學的方式進行肯定性地證實,不然他不相信該消息確實來自Alice。爲了便於證實,他們贊成使用數字簽名。

爲了生成簽名,Alice使用她計算機中的簽名生成算法,該算法將她的私鑰和完整的消息做爲輸入,生成一個數字簽名。而後,她將這個消息/簽名組合發送給Bob——但重要的是,她不會發送她的私鑰。

當Bob收到消息和簽名時,他能夠調用一個與之互補的簽名驗證算法。該算法將消息和簽名做爲輸入,以肯定Alice用於生成簽名所使用公私鑰對中的公鑰。當Bob看到他的算法輸出Alice的公鑰時,他就已經在數學上證實了該簽名確實是用Alice的公私鑰對生成的,即便他不知道也沒法計算Alice的公私鑰對中的私鑰。

更簡潔地說,這一數字簽名的過程容許Bob驗證該消息不是由某個第三方建立或修改,而是必須使用Alice的私鑰才能生成的,而沒必要(或不能)知道她的私鑰。他須要的只有消息/簽名組合和她的公鑰。

直覺上來看,這彷佛難以置信,你可能會以爲好像在哪裏產生了誤解。若是Alice的私鑰和公鑰密切相關,而且Alice使用她的私鑰生成Bob收到的簽名,那他爲何只能派生出她的公鑰而得不到她的私鑰?要理解這一問題的答案要求比大多數人對數學更深刻的理解,這遠遠超出了本書的範圍。

儘管如此,這項技術天天都在被賴以使用,而且在密碼學社區內被認爲是堅如磐石的。當你訪問某個地址以https開頭的網站時,「s」就表示該網站使用數字簽名認證了它本身。你的計算機使用了簽名驗證算法,就像上面例子中的Bob同樣,驗證網站確實來自正確的公私鑰對。數字簽名能夠確保你和網站之間的任何進一步交互都是通過加密和認證的。若是驗證失敗,瀏覽器則會警告你,並將該網站標記爲危險。

足夠大的整數

在此以前,我簡單地提到了私鑰和公鑰的功能就像用戶名和密碼同樣,但實際上它們只不過是具備特殊數學關係的大整數。鑑於此,我常常被問到如下問題:

「能不能使用計算機猜想或者計算出一堆數字,並嘗試將它們做爲私鑰使用?他們最終是否會碰到某個目標公私鑰對的私鑰,從而得到對該身份的控制權?」事實上,就比特幣而言,這將使攻擊者可能竊取一些公私鑰對所持有的比特幣。

這是一個很好的問題,但它並不會發生。如前所述,有幾個擁有價值數百萬美圓BTC的比特幣地址,但它們好幾年一直都沒有被轉移——儘管盜取它們須要的只是正確的私鑰——也就是正確的大整數!若是你能猜到這些地址的私鑰,那麼你就能夠將其中的錢發送給任何人。與密碼不一樣,你能夠在本身的機器上本地驗證私鑰,沒有服務器會限制你的嘗試次數或頻率。

那爲何尚未人偷​​走這些錢呢?答案在於用做私鑰的數字近乎荒謬的大小。它們足夠大。

咱們從一個簡單的思惟實驗開始。想象一下,你的私鑰足夠大,大到世界上全部的計算機一塊兒工做,他們須要24小時才能猜到。若是在你的私鑰上增長僅僅一位數字,計算機就須要十倍的計算量,也就是須要十天而不是一天。而增長六位數字會使這一時間達到27000年。

在任何狀況下,生成私鑰所需建立隨機數的計算能力都是微不足道的。使用私鑰生成簽名以及使用公鑰驗證這些簽名在計算上也是簡單的。但猜想私鑰所需的工做量卻隨着每添加一個額外數字呈指數增加。爲了使私鑰「免疫」於暴力破解,咱們只須要添加足夠的數字——咱們只須要使它們足夠大。

那多大是足夠大?比特幣中使用的私鑰是256比特的整數,至關於一個長度爲76位的數字。這一數字的大小是使人難以置信的。接下來的闡釋大部分來自於Bruce Schneier的圖書《Applied Cryptography(應用密碼學)》,對足夠大整數進行直觀說明。

首先,須要瞭解到熱力學第二定律的一個具體結論是改變單個二進制位信息存在所須要的最小能量(將1變爲0或反之)。這意味着不管所使用的硬件如何,任何計算過程都須要一些最小的能量來執行。

如今假設你可以利用太陽的所有能量輸出來驅動一臺專門設計的計算機,這臺計算機的工做是計算或猜想私鑰,以找到一個公私鑰對的私鑰(能夠控制BTC)。

使用一點點數學和熱力學,你會發現一臺具備太陽整年能量輸出計算能力的高效計算機能夠計算出2178個值。若是咱們將這個值除以可能的私鑰數量,即2256,咱們發現這個擁有太陽整年能量輸出計算能力的假想計算機只能猜想或計算出可能私鑰總數的0.0000000000000000000003%。

此外,這還只是計數,並不包括實際檢驗每一個私鑰以驗證它是否與正確的公鑰對應這一更復雜的任務。所以,這臺計算機在一年以內可能錯過這0.0000000000000000000003%機率的正確私鑰,而它甚至都不會意識到。

這些數字與設備的技術無關; 它們是根據20世紀30年代以來創建的熱力學定律所得出的可能達到的最大值。這些數字意味着對256位密鑰(比特幣使用的密鑰)的暴力攻擊將是不可行的,除非計算機是由物質之外的東西構建並佔用空間之外的東西。

這就是足夠大整數的能力。不管黑客有多厲害,除非他可以利用3×1023個太陽的能力計算一年,或者一個太陽的能力計算3×1023年,不然他的電腦甚至沒法完成對全部私鑰的計數——更不用說測試或者以其餘方式使用它們了。

相關文章
相關標籤/搜索