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

2021-09-25 03:34:31 字數 3494 閱讀 6470

鏈客,專為開發者而生,有問必答!

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

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

密碼學是應用數學函式以保證資料安全性的科學。

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

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

密碼學並不是一種未經考驗的新技術。位元幣所使用的所有密碼學技術自網際網路誕生以來一直都在使用著,是每天使用的許多常見網際網路協議的重要部分。計算機科學家認為密碼學是可靠和必要的,就像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小時才能猜到。如果在你的私鑰上增加僅僅一位數字,計算機就需要十倍的計算量,也就是需要十天而不是一天。而增加六位數字會使這一時間達到22023年。

在任何情況下,生成私鑰所需建立隨機數的計算能力都是微不足道的。使用私鑰生成簽名以及使用公鑰驗證這些簽名在計算上也是簡單的。但猜測私鑰所需的工作量卻隨著每新增乙個額外數字呈指數增長。為了使私鑰「免疫」於暴力破解,我們只需要新增足夠的數字——我們只需要使它們足夠大。

首先,需要了解到熱力學第二定律的乙個具體結論是改變單個二進位制位資訊存在所需要的最小能量(將1變為0或反之)。這意味著無論所使用的硬體如何,任何計算過程都需要一些最小的能量來執行。

現在假設你能夠利用太陽的全部能量輸出來驅動一台專門設計的計算機,這台計算機的工作是計算或猜測私鑰,以找到乙個公私鑰對的私鑰(可以控制btc)。

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

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

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

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

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

密碼學是應用數學函式以保證資料安全性的科學。許多風靡的影視作品都在向人們暗示 只要有足夠厲害的黑客,任何系統都可以被攻破。這種 好萊塢式黑客攻擊 並不是真實世界的場景 黑客必須發現系統暴露的漏洞,例如未上鎖的伺服器機房 易於猜測的密碼 未受保護的網路埠或者內部安裝的 後門 以進而實現未經授權的訪問。...

區塊鏈技術 密碼學

1 對稱加密 用相同金鑰對原文進行加密和解密 加密過程 金鑰 原文 密文 解密過程 密文 金鑰 原文 缺點 無法確保金鑰被安全傳遞 2 非對稱加密 公鑰 私鑰,ras演算法 公鑰用於加密,私鑰用於解密。私鑰簽名,公鑰解簽名。公鑰由私鑰生產,私鑰可以推導出公鑰 從公鑰無法推導出私鑰 優點 解決了金鑰傳...

區塊鏈與密碼學

在學完大概了密碼學的知識,其實也只是看完了dan boneh的那本密碼學的書,現在開始密碼學與區塊鏈的結合學習,因為我自己是主要針對密碼學和區塊鏈的,但是去學習密碼學在區塊鏈上面的一些應用,就可以使得對密碼學有更深刻的了解,因為密碼學擁有很龐大的體系,所以我只能這樣去慢慢摸索。因為我有很多學習的內容...