如何理解橢圓曲線加密並對其進行編碼

買賣虛擬貨幣
在我上一篇關於如何構建簡單區塊鏈的文章中,我介紹了區塊鏈技術的基本知識,並逐步指導您如何在您的區塊鏈上構建簡單區塊。現在我想向您展示加密貨幣和區塊鏈的密碼學部分。因為您可能在上一次使用過,所以我們從一點理論開始,然後直接進入程式設計。我們開始吧!簡介由於大多數人自己可能有一些加密貨幣資產,因此您可能聽說過“公鑰”和“私鑰”這兩個詞。在區塊鏈網路中,公鑰相當於你的地址。如果網路中的其他人想給您傳送一些資金,他或她會將其傳送到您的公鑰。您的私鑰可以被視為您的簽名——無論何時您想進行資金交易,您都需要證明您擁有屬於您的公鑰的私鑰,而無需向網路中的任何人展示它。網路的參與者檢查您的事務,可以證明您使用您的公鑰是私鑰的所有者,甚至不知道私鑰是什麼。很酷!但這在更基本的層面上是如何起作用的呢?我們來深入研究一下這個理論。橢圓曲線密碼學在這一部分中,我將簡要介紹使用的加密系統背後的魔力。因為它背後的數學是相當複雜的,沒有必要理解它的每一個方面。該密碼系統主要應用於區塊鏈網路,它基於橢圓曲線的數學原理。但這條橢圓曲線到底是什麼呢?用數學術語表示,它是滿足方程的所有點(x,y)的集合y²= x³+ ax + b

Such曲線可能會這個樣子的:

如果在此曲線上任意一點P = (x,y)並將其加到曲線上另一點Q上,就會得到這個橢圓曲線上的點。可以在下面的圖中看到這一點的視覺化新增。

您也可以選擇曲線上的某個點P,並將其加上x倍——您仍然會得到位於橢圓曲線上的一個點。


P+P+…+P = xP = R.

在這種情況下,x只是一個任意的自然數。在橢圓曲線密碼學中,人們使用這樣一個事實,即僅透過已知點P和r來計算數字x在計算上是不可行的。這通常被描述為求解離散對數的問題。對於密碼學來說,在橢圓曲線上選擇一個合適的點P就會產生一個足夠高的隨機自然數x,這個數字被稱為私鑰。用選定的點P和私鑰計算曲線上的點R,然後將其定義為公鑰。所以公鑰和私鑰是緊密相連的!

使用這種方法,可以“簽名”任何想要的訊息。設M為任意訊息,pub為傳送方的公鑰,priv為傳送方的私鑰。然後根據M和priv兩個引數計算簽名: 簽名=簽名(M,priv)

在上式中,函式符號()生成簽名。任何接收到訊息M的人都可以驗證簽名——證明傳送方公鑰確實也持有私鑰: 驗證= Ver(簽名,M, pub)

接收方只需要簽名本身、訊息和傳送方的公鑰。這就是橢圓曲線密碼學的基本原理。現在讓我們來編寫一些程式碼!

編碼密碼學

在python中,上述方法可以使用fastecdsa庫實現。然而,有更多的庫編寫用於橢圓曲線密碼學。首先,您需要使用“pip安裝”命令在您的終端。

pip install fastecdsa

安裝完成後,我們可以開啟python IDE並開始編碼。

從fastecdsa匯入按鍵,曲線,ecdsa
priv_key, pub_key = keys.gen_keypair(curve.P256)
列印(priv_key)

首先,我們從fastecdsa庫匯入一些類。CLASS金鑰包含一個使用橢圓曲線數學生成金鑰對的函式。CLASS曲線包含許多不同的橢圓曲線,您可以從中選擇一個來生成鍵。CLASSecdsa稍後用於生成和驗證簽名。在第二行中,使用curve P256生成一對公鑰和一個私鑰。然後,我們列印私鑰和公鑰。私鑰的結果應該是這樣的:20053020608649230331723442089943129241597707800309205888496491961204729412316

你看,私鑰是一個相當大的數字,有很多數字!我們來看看公鑰是什麼樣子的:

X: 0 xf8781fc1967637b0fe3e43cbd750051672fad09d0fd8f18d2d49ed1f84ebb5c9
Y: 0 x26a617f3fc7b1c34bf00b21445201299f9730bc7838994751ead5ddff511c622

(在曲線<P256>上)可以看到,公鑰是曲線P256上點的x座標和y座標的組合。讓我們繼續生成和驗證一些訊息的簽名。只需在上面的程式碼中新增以下幾行:

message = ' I am a message '
(r, s) = ecdsa.sign(訊息,priv_key)
print((r,s))

我們將一些字串定義為訊息,然後使用匯入的CLASS ecdsato生成簽名(r,s)。在這之後,我們列印它,應該得到類似如下的東西:

(5051796304674036363589800321627720065390968951281733524730, 24429916353425477548863857007437472287804761347218109)

現在我們可以繼續驗證這個簽名了。同樣,只需新增以下幾行程式碼:

valid = ecdsa.verify((r,s),message,pub_key)
print(valid)

我們再次使用CLASS ecdsa並從該類呼叫verify()函式,它依賴於三個引數簽名、訊息和生成訊息的那個引數的公鑰。然後,我們列印有效的變數,如果一切正常,應該會得到如下輸出: True

祝賀您!您剛剛瞭解了在區塊鏈網路中使用的公鑰加密的基礎知識。您可以進一步建立您自己的加密貨幣。

更多數字貨幣資訊:www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;