A. 姣旂壒甯佹庝箞鏍瘋繍綆
姣旂壒甯佹庝箞榪愮畻鐨
姣旂壒甯佹槸涓縐嶅熀浜庡瘑鐮佸﹀師鐞嗙殑鏁板瓧璐у竵錛屽叾榪愮畻涓昏佹秹鍙婂埌鍔犲瘑綆楁硶鍜屽垎甯冨紡璁$畻鐨勬妧鏈銆
姣旂壒甯佺殑榪愮畻榪囩▼涓昏佸寘鎷浠ヤ笅鍑犱釜姝ラわ細
1.鐢熸垚鍏縐侀掗瀵癸細姣旂壒甯佷嬌鐢ㄦき鍦嗘洸綰垮姞瀵嗙畻娉(ECDSA)鐢熸垚鍏縐侀掗瀵癸紝鍏朵腑縐侀掗鐢ㄤ簬絳懼悕浜ゆ槗錛屽叕閽ョ敤浜庨獙璇佺懼悕銆
2.鐢熸垚浜ゆ槗淇℃伅錛氫氦鏄撲俊鎮鍖呮嫭鍙戦佽呭湴鍧銆佹帴鏀惰呭湴鍧銆佽漿璐﹂噾棰濈瓑淇℃伅錛岀敤浜庢弿榪版瘮鐗瑰竵鐨勪氦鏄撹繃紼嬨
3.楠岃瘉浜ゆ槗淇℃伅錛氬皢浜ゆ槗淇℃伅鍔犱笂鏃墮棿鎴熾佸彂閫佽呭叕閽ャ佸搱甯岀瓑淇℃伅錛岀粍鎴愪氦鏄撹板綍錛屽苟閫氳繃緗戠粶騫挎挱緇欏叾浠栬妭鐐歸獙璇併
4.鎸栫熆璁$畻錛氭瘮鐗瑰竵鐨勬寲鐭挎槸鎸囧皢浜ゆ槗璁板綍鎵撳寘鎴愬尯鍧楀苟娣誨姞鍒板尯鍧楅摼涓鐨勮繃紼嬨傛寲鐭胯繃紼嬮渶瑕佽繘琛屼竴緋誨垪鐨勮$畻錛屽寘鎷鍝堝笇璁$畻銆侀毦搴﹁$畻絳夛紝榪欎簺璁$畻闇瑕侀氳繃鍒嗗竷寮忚$畻鏉ュ畬鎴愩
5.鑾峰緱鍖哄潡濂栧姳錛氬畬鎴愭寲鐭跨殑鑺傜偣鍙浠ヨ幏寰椾竴瀹氱殑姣旂壒甯佸栧姳錛屽悓鏃朵篃鍙浠ヨ幏寰椾氦鏄撴墜緇璐逛綔涓哄栧姳銆
鎬諱箣錛屾瘮鐗瑰竵鐨勮繍綆椾富瑕佹秹鍙婂埌鍔犲瘑綆楁硶銆佸垎甯冨紡璁$畻銆佸搱甯岃$畻絳夋妧鏈錛岄渶瑕侀氳繃澶氫釜鑺傜偣鍗忓悓瀹屾垚錛岀『淇濅氦鏄撹板綍鐨勫畨鍏ㄥ拰鍙闈犳с
比特幣與以太坊的地址類型及其生成機制解析如下:
以太坊地址類型及其生成機制: 類型:以太坊地址主要分為EOA與智能合約賬戶。EOA地址關聯私鑰,由用戶控制;智能合約賬戶則關聯合約代碼,由合約邏輯控制。 生成機制: EOA地址生成:涉及私鑰、公鑰與哈希值的計算。私鑰通過加密演算法生成,公鑰由私鑰通過橢圓曲線演算法推導得出,地址則是公鑰的哈希值的特定編碼形式。 智能合約地址生成:結合部署智能合約的EOA的公鑰與nonce生成。當智能合約被部署時,一個新的地址會根據這些參數計算得出。
比特幣地址類型及其生成機制: 類型:比特幣地址類型包括Legacy、PaytoScriptHash、Segwit與Taproot。Legacy地址是比特幣最早的地址類型;P2SH地址用於多重簽名交易;Segwit地址旨在提高交易效率與減少費用;Taproot地址則進一步提升了隱私性與靈活性。 生成機制:比特幣地址的生成遵循與以太坊類似的原理,但使用不同的演算法與編碼方式。私鑰通過加密演算法生成,公鑰由私鑰推導得出,地址則是公鑰經過一系列哈希與編碼操作後得出的結果。不同的地址類型在哈希與編碼階段採用不同的規則以適應其特定的使用場景。
總結:比特幣與以太坊的地址類型及其生成機制均基於加密操作,確保了地址的唯一性與安全性。不同類型的地址適應了不同的使用場景與需求,為用戶提供了靈活、安全的交易方式。
C. 區塊鏈技術(二) -- 比特幣中使用的加密演算法ECC
橢圓曲線加密演算法(ECC),是一種基於橢圓曲線數學理論實現的非對稱加密演算法。相較於RSA,ECC的優勢在於使用更短的密鑰即可達到與RSA相等或更高的安全級別。ECC在公開密鑰加密和電子商業領域得到廣泛應用,特別是比特幣(Bitcoin)採用的secp256k1橢圓曲線。
比特幣使用了特定的橢圓曲線secp256k1進行加密。加密過程涉及橢圓曲線上的加法運算,定義為:對於橢圓曲線上的兩個點A和B,過這兩個點的直線與橢圓曲線相交於第三個點,該點關於原點的對稱點即為A和B的和。此外,對於同一個點的二倍運算,即點與自身相加,定義為通過該點的切線與橢圓曲線的交點,再對該交點關於原點對稱得到。
加密演算法中還涉及到同餘運算、有限域的概念以及乘法逆元的定義。橢圓曲線密碼在有限域內進行,例如模數為質數的域,能夠保證加密過程中的數據在同一個有限集合內,避免了連續數加密解密後可能出現的偏差。
為了說明,我們以模數為2的有限域為例,展示乘法逆元的概念:在群G中,對任意元素a,存在唯一元素b,使得a*b等於群的單位元。而橢圓曲線加密演算法選擇的一類適合加密的曲線為secp256k1,這類曲線關於y軸對稱,且滿足特定條件,適用於安全加密。
ECC加密演算法的核心在於計算私鑰與公鑰的關系。已知公鑰和基點,計算出私鑰是非常困難的,這就為加密提供了強大的安全性。同時,ECDSA(ECC數字簽名演算法)用於生成和驗證簽名,通過將私鑰與消息摘要進行運算,生成不可逆的簽名。簽名的生成和驗證過程依賴於隨機數的引入,確保即使對相同消息,生成的簽名也不同,提高了安全性。
驗證過程涉及從簽名中提取出的兩個值,利用公開密鑰計算得到的值與接收到的值進行比較,若一致則驗證成功,否則失敗。整個過程確保了消息的真實性和完整性,是區塊鏈技術中確保數據安全和交易可信的重要手段。
D. 【區塊鏈】比特幣私鑰、公鑰、簽名
在 了解區塊鏈的基礎名詞概念 提到地址由字元和數字組成,但沒有說明怎樣產生的。銀行卡號由銀行核心系統生成,那比特幣地址是通過什麼生成的呢?看下圖:
對於剛接觸比特幣的小白來說,看到這張圖就蒙圈了,究竟什麼是私鑰、公鑰,為什麼生成個地址要這么麻煩嗎?
現在請大家記住這句話: 私鑰通過橢圓曲線相乘生成公鑰,使用公鑰不能導推出私鑰;公鑰通過哈希函數生成比特幣地址,地址也無法導推出公鑰 。
通過這么復雜演算法才算出地址,那私鑰和公鑰只是為了生成地址嗎?不是的,他們還有其他用途,我們先了解下私鑰和公鑰。
現在已經講解地址、挖礦、工作量證明、算力、區塊、區塊鏈等等的概念,不知大家還有印象嗎?如果忘記請溫習這些概念,因為後續很多地方都會用到這些概念。明天講解下區塊鏈有哪些特點。
參考書籍:《精通比特幣》
區塊鏈知識專題:
比特幣記賬方式(區塊鏈知識2)
了解塊鏈的基礎名詞概念(區塊鏈知識1)
E. 如何生成一個比特幣地址(含代碼實現)
生成比特幣地址的流程和代碼實現如下:
首先,生成一個256位的數作為私鑰。
然後,使用ECDSA-secp256k1演算法計算公鑰,並在開頭加上0x04成為非壓縮公鑰。
如果需要,將非壓縮公鑰轉為壓縮公鑰,通常從完整公鑰中取出x坐標,根據y坐標最後一個位元組是偶數或奇數,在x坐標開頭添加0x02或0x03。
計算公鑰的SHA-256哈希值。
接著,計算上述哈希值的RIPEMD-160哈希值。
在哈希值結果中加入地址版本號,例如比特幣主網版本號"0x00"。
計算上一步結果的SHA-256哈希值。
再次計算上一步結果的SHA-256哈希值。
取上一步結果的前4個位元組(8位十六進制數),D61967F6,將其加在第五步結果的後面,作為校驗,這就是比特幣地址的16進制形態。
最後,將上一步結果用base58編碼,得到的是最常見的比特幣地址形態。
下面附上代碼實現示例:
使用Python生成隨機私鑰並轉換成地址:
指定私鑰並轉換成地址:
代碼實現中,Python因其簡潔易用,使得生成比特幣地址的過程更為高效。對Python感興趣的知友不妨一試,快速上手,完成任務。
F. 比特幣背後的技術1 - 橢圓曲線簽名演算法
本文使用 Zhihu On VSCode 創作並發布
本文同步發表於個人blog
在傳統的金融模型中,當人們需要在銀行等金融機構中創建新的賬戶時,人們必須提供用於證明其身份的憑證(身份證,護照,etc)。然而,在比特幣的新型隱私模型中,雖然每個賬戶之間的交易記錄是公開的,但是賬戶擁有者的身份確不會被公開。為了防止比特幣賬戶被冒用,比特幣交易系統中使用了橢圓曲線簽名的機制來確保賬戶操作者就是賬戶擁有者。
擁有這樣的解析式的一類曲線被稱作橢圓曲線:
[公式]
這樣的曲線擁有這如下圖所示的形狀:
這樣的曲線有兩個非常重要的性質:
有了這兩個性質,我們可以在橢圓曲線上定義「加法」和「乘法」這兩種運算
假設我們有任意兩點[公式]在橢圓曲線 [公式] 上,我們可以將兩點鏈接起來得到一條直線,這條直線與橢圓曲線的第三個交點 [公式] 。這時候,我們將得到的點 [公式] 關於 [公式]軸對稱,得到點 [公式]。 這樣的一串操作可以被記錄為 [公式]
如果我們把一次加法操作畫在圖上,那麼[公式]的計算過程會是下面這樣:
從上面的途中,我們可以發現橢圓曲線上的點乘是滿足交換律的,因為點[公式] 定義的直線與點 [公式] 定義的直線是同一條。
一種特殊的情況是[公式]。這樣的情況下,我們得到的直線會是橢圓曲線在[公式]點上的切線,也就是……
如果一個橢圓曲線上進行了[公式] 次[公式]這樣的加法操作,我們可以將其簡寫為 [公式]。例如:[公式]的計算過程可以用這樣的幾何方法表現出來:
上面這個網站提供了橢圓曲線加法和乘法的可視化
定義了這兩種橢圓曲線上的運算以後,我們下面看看為了在計算機上更好的實現這個函數,我們都做了哪些改進。
為了在計算機上更准確的處理橢圓曲線,我們對橢圓曲線做了以下這些改進:
所以,一個橢圓曲線是由這些參數所決定的:
[公式]
這樣的一條橢圓曲線擁有這樣的代數表達式:
[公式]
說了那麼多,人們到底是怎麼用橢圓曲線進行身份驗證的呢?
比特幣所使用的橢圓函數簽名協議是SECP256K1,這個簽名協議中包括了一個橢圓函數[公式] 和一個起始點 [公式]。現在,如果有一個人擁有一個數字[公式],他可以很快的用計算機算出在橢圓函數上的[公式]。然而,給定[公式],計算出[公式]的值卻是幾乎不可能的。
這樣一個非對稱的難度讓身份驗證變得十分簡單,只要私鑰[公式]的持有者不公開自己手中的私鑰,其他人就幾乎不可能通過私鑰的生成結果[公式]逆向獲得私鑰[公式]。
假如Bob要使用橢圓簽名函數來驗證Alice的身份,在此之前,Bob已經通過公開渠道得知Alice的公鑰(橢圓函數計算結果是[公式]),Alice也通過公開渠道知道Bob的公鑰(Bob用自己的橢圓函數私鑰[公式]計算出的結果[公式])。那麼Alice要做的事情就是向Bob傳輸[公式]。因為[公式]實際上是[公式]的結果,我們也可以將傳輸的信息寫作[公式]。
當Bob收到Alice發來的[公式]的結果後,他可以通過計算[公式] 並與Alice發出的結果相比對進行驗證。如果對面確實是Alice在對賬戶進行操作,那麼應該有[公式]。證明如下:
[公式]
通過這樣的方式,就可以在雙方不透露自己私鑰的情況下完成身份認證了。
在比特幣的交易系統中,每個用戶都會有一個隨機生成的私鑰,並且用SECP256K1演算法計算出自己私鑰所對應的公鑰,在下面這張描述比特幣交易流程的圖中,最關鍵的部分之一就是通過上述的身份驗證演算法確定確實是比特幣的所有者在進行轉賬操作。
G. 比特幣的地址、公鑰、私鑰,你都了解了嗎
了解比特幣,就不可避免地要掌握什麼是比特幣的地址、公鑰、私鑰。下面我們逐一解釋這些概念。
1. 地址:類似於銀行的賬戶號碼,是在創建數字錢包時自動生成的。簡單來說,創建錢包時會生成一對私鑰和公鑰,然後公鑰通過特定演算法生成地址。這個地址實質上是一串字元,例如。地址用於接收比特幣,就像銀行賬戶用於接收存款一樣。
2. 公鑰:可以看作是比特幣地址的「密碼」。它是一串很長的由錢包生成的隨機數,例如 LBB9ZXMCJ。公鑰用於驗證比特幣的所有權,並且是公開的。
3. 私鑰:相當於銀行密碼,也是一串很長的隨機數。私鑰是唯一能夠證明你擁有比特幣的密鑰,只有使用私鑰才能進行比特幣的轉賬、交易和使用。私鑰必須保密,絕不能泄露給他人。
4. 比特幣的交易是透明的,所有的交易記錄都存儲在一個公開的賬本中。每個交易記錄包括交易流水單號、發幣人的發幣地址、收幣人地址以及發幣人的找零地址。
5. 在比特幣交易中,私鑰會被加密成簽名,並與公鑰一起寫入交易信息中。礦工會將這些信息放入驗證函數中,如果結果為「true」,則交易被認為是真實有效的;如果結果為「false」,則交易存在問題,無法通過驗證。
通過以上解釋,希望能幫助您對比特幣的地址、公鑰和私鑰有一個初步的了解。感謝您的閱讀!
H. 比特幣背後的技術1 - 橢圓曲線簽名演算法
比特幣背後的技術之一——橢圓曲線簽名演算法,主要作用在於確保賬戶操作者就是賬戶擁有者。以下是關於橢圓曲線簽名演算法的詳細解釋:
1. 橢圓曲線的基本概念 定義:橢圓曲線是一類滿足特定數學方程的曲線,這些方程定義了曲線上的點如何相加和相乘。 重要性:橢圓曲線的這些運算特性使得它們成為密碼學中的重要工具,特別是在數字簽名和密鑰交換協議中。
2. 橢圓曲線簽名演算法的工作原理 私鑰與公鑰:在比特幣中,每個用戶都會有一個隨機生成的私鑰。使用這個私鑰和一個特定的橢圓曲線演算法,可以計算出對應的公鑰。 簽名過程:當用戶想要對一條消息進行簽名時,她會使用自己的私鑰和消息內容,通過橢圓曲線簽名演算法生成一個簽名。這個簽名實際上是私鑰、消息和橢圓曲線特定參數的一個數學組合。 驗證過程:接收者可以使用Alice的公鑰、消息內容和簽名,通過橢圓曲線簽名演算法的驗證步驟來檢查簽名的有效性。如果簽名正確,這證明了消息確實是由Alice發送的,且消息在傳輸過程中沒有被篡改。
3. 橢圓曲線簽名演算法的安全性 非對稱難度:給定私鑰,計算公鑰是容易的;但給定公鑰,逆向計算出私鑰在計算上是幾乎不可能的。這種非對稱難度保證了私鑰的安全性。 防止冒用:由於私鑰的唯一性和難以逆向計算的特點,橢圓曲線簽名演算法能夠有效地防止比特幣賬戶被冒用。
4. 在比特幣交易系統中的應用 身份驗證:在比特幣的交易流程中,最關鍵的部分之一就是通過橢圓曲線簽名演算法來確定確實是比特幣的所有者在進行轉賬操作。這保證了交易的合法性和安全性。
綜上所述,橢圓曲線簽名演算法是比特幣等加密貨幣中保障交易安全性和身份驗證的重要技術之一。