當前位置:首頁 » 比特幣問答 » 棱鏡計劃比特幣secp

棱鏡計劃比特幣secp

發布時間: 2025-01-18 08:38:31

1. 橢圓曲線加密演算法中的密謀

公鑰加密演算法有兩種,RSA 和 ECC,RSA 簡單易懂但效率低,ECC 效率高,用 256 位秘鑰抵得過 RSA 3072 位秘鑰,但 ECC 數學原理復雜,實現也比 RSA 難。

要理解 ECC 橢圓曲線加密演算法,就得順藤摸瓜,一路搞定下面這些原理。

於是得到了這樣的曲線:

這個方程式用來加解密的過程,就不解釋了,網上資料不少,密碼學的書中也有。

其原理基於,射影平面上的加法演算法,其正向過程是簡單容易的,而加法的逆向過程,則是困難的。我們可以用打檯球來比喻,確定一個球的初始位置為 p1,對 p1 進行 n 次擊球(假設 n 次擊球的力度和方向一致),最終獲得位置為 p2。已知 p1 和 n,則獲得 p2 非常容易,進行 n 次擊球便可。但若已知 p1 和 p2,要倒推出 n 來,則很難。這個道理,人人皆知。 橢圓曲線在射影平面上的加法之不可逆,和上面的檯球游戲類似。

用來加解密和簽名的 ECC 曲線,由如下幾個參數確定:(p,a,b,G,n,h)。 p 便是有限域的整數范圍, a,b 則是確定曲線的形狀, G 是曲線上選擇的初始點,n 則是用來進行加法的次數, h 是協因子,不知道幹嘛用的,一般取 1。

比特幣所用 Secp256k1 曲線的參數如下:

p = 2^256 − 2^32 − 2^9 − 2^8 − 2^7 − 2^6 − 2^4 − 1 = 2^256 – 2^32 – 977

a = 0

b = 7

這就是中本聰挑選的曲線,並非一條流行通用的曲線。去掉模運算,用 x y 方程簡單表示為 y^2 = x^3 + 7。

Secp256k1 中 「sec」 的意思是 Standards for Efficient Cryptography,"p" 則代表有限域參數 p,256 代表 p 的位數,而 「k」 則大有深意。

「k」 代表 Koblitz,這是橢圓曲線加密演算法發明人 Koblitz 的名字,在這里指的一類曲線,這一類曲線的參數是刻意挑選出來的。比如上面的 a 和 b,一個 0,一個 7,一看就知道是刻意挑選出來的。

k 後面的 1 代表序號。

與 「k」 對應的叫 「r」,所謂 r 指代 Random,就是隨機數的意思。大家就明白了,曲線所用參數是隨機挑選出來的。比如 Secp256r1 的參數如下:

p = 2^224(2^32 − 1) + 2^192 + 2^96 − 1

a = 97853948

b = 7401291

這個 Secp256r1 還有一個名字,叫 NIST P256,NIST 是 National Institute of Standards and Technology,也就是美國國家標准技術委員會,隸屬商務部,專門為政府機構制定技術標准。所以,Secp256r1 那算是閃耀著官方光環的技術。這個標準是 1999 年 NIST 發布的。

既然 p,a,b這些參數都是隨機挑選出來的,那麼自然應該更安全了。理論上是這樣的,但「隨機」 這兩個字可不是那麼容易的,不是上嘴唇一碰下嘴唇就能出來一個隨機數。 計算機里的隨機數一直是個難題。 

Secp256r1 的隨機數生成是用哈希演算法 SHA1 實現的,用SHA1演算法對某個字元串進行哈希,每次都能生成非常隨即的數字。 而 Secp256r1 的 p,a,b 做 SHA1 的字元串是:。

密碼學界以及加密學應用技術行業的疑心由此而起:NIST 為何挑選了這個字元串?

哈希運算的特點,大家都清楚,NIST 無法根據一條既定曲線,返過去計算出 SHA1 的種子字元串。

所以大家就懷疑,NIST 很可能測試了無數的種子字元串,最終選擇了一條較弱的曲線。這是一種暴力的挑選方法,據傳 NIST 測試了 10 億條曲線。2014 年密碼學者 Daniel J. Bernstein1 和 Tung Chou 便發表過文章 「How to manipulate curve standards: a white paper for the black hat」 介紹了如何操控 ECC 曲線標準的制定。

大家的擔心雖然並無實證,但 NIST 在橢圓曲線上做手腳,並非第一次,而且之前那次是有實錘證據的。2007 年 NIST 發布了 130 頁的技術標准文書: NIST Special Publication 800-90,其中介紹了 「Deterministic Random Bit Generators」,也就是隨機數生成的技術,和上面所說用 SHA1 生成隨機數類似。 介紹的技術中,有一種叫 Dual_EC_DRBG,也就是用雙橢圓曲線生成隨機數的技術。 技術原理和用橢圓曲線做加法進行加密類似。

還用檯球做比,為了生成隨機數,在巨大巨大的 「有限域」 檯球桌上擺放兩個檯球在 p1 和 p2 位置。對在 p1 的第一個檯球進行 n 次擊打,n是一個秘密數字,獲得位置 p1『,這就是生成的隨機數。完事後 p2 也進行 n 次擊打,獲得位置 p2』,將 p2『 替代 n,作為下一次生成隨機數的秘密數字。最後,將 p1 和 p2 擺回最初的位置 p1 和 p2,等待下次。

從原理上來說,這種演算法生成隨機數是沒問題的。就是比起其它隨機數生成演算法,效率要慢一些,有些密碼學家就提出這個問題,這種演算法的效率比該標准中的其他演算法要慢三個數量級。

詭異的是,Dual_EC_DRBG 是 NSA 推薦到 NIST,並強力支持的。 NSA 是誰?大名鼎鼎的美國國家安全局,與美國民間密碼學界斗爭多年的強力部門。

2007 年,牛逼的 CRYPTO 大會上,密碼學者 Dan Shumow 和 Niels Ferguson 指出,Dual_EC_DRBG 不僅是慢的問題,它有後門啊,NIST 指定的演算法也許沒問題,但 P1 和 P2 這兩個初始位置有問題:這兩個參數之間是有關系的,可以推算的。

這真是打了 NIST 和 NSA 的臉。當然,密碼學者們並沒有實錘證據,到底這個是 NIST 和 NSA 惡意設計,還是一個為他們工作的科研人員私下作惡。

直到 2013 年棱鏡門爆發,斯諾登披露的政府文件顯示,NSA 刻意在加密演算法中植入後門。之後,路透社披露,NSA 收買了 RSA 公司,在其軟體中植入 Dual_EC_DRBG,以利於破解加密技術,對互聯網信息進行竊聽。一切水落石出真相大白,就是 NSA 協同 NIST 搗的鬼。

比特幣中對 Secp256r1 棄而不用,選擇了 Secp256k1,而中本聰開發比特幣軟體,是在 2008 年之前。所以應當是在 2007 年 CRYPTO 大會上對 Dual_EC_DRBG 的責難,引起了中本聰的警覺。那時候棱鏡門還沒爆發,對於 NSA 的惡意操縱,還並沒有證據。

機構作惡,人們無可奈何,無人臉紅,也無人為其負責。放個後門,放了就放了吧,大家躲著走就是。

2. 如何生成一個比特幣地址(含代碼實現)

生成比特幣地址的流程和代碼實現如下:

首先,生成一個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感興趣的知友不妨一試,快速上手,完成任務。

3. 比特幣地址是怎麼產生的

比特幣使用橢圓曲線演算法生成公鑰和私鑰,選擇的是secp256k1曲線。生成的公鑰是33位元組的大數,私鑰是32位元組的大數,錢包文件wallet.dat中直接保存了公鑰和私鑰。我們在接收和發送比特幣時用到的比特幣地址是公鑰經過演算法處理後得到的,具體過程是公鑰先經過SHA-256演算法處理得到32位元組的哈希結果,再經過RIPEMED演算法處理後得到20位元組的摘要結果,再經過字元轉換過程得到我們看到的地址。這個字元轉換過程與私鑰的字元轉換過程完成相同,步驟是先把輸入的內容(對於公鑰就是20位元組的摘要結果,對於私鑰就是32位元組的大數)增加版本號,經過連續兩次SHA-256演算法,取後一次哈希結果的前4位元組作為校驗碼附在輸入內容的後面,然後再經過Base58編碼,得到字元串。喬曼特區塊鏈專業站鏈喬教育在線是從事區塊鏈相關培訓,且獲得教育部認證的區塊鏈專業培訓工作站。

熱點內容
棱鏡計劃比特幣secp 發布:2025-01-18 08:38:31 瀏覽:559
trx路虎衛士攀爬車開箱 發布:2025-01-18 08:37:36 瀏覽:370
7p怎麼看是不是合約機 發布:2025-01-18 08:36:26 瀏覽:245
榮耀v9電信合約機怎麼樣 發布:2025-01-18 08:35:38 瀏覽:2
寬頻合約沒到期違約金怎麼算 發布:2025-01-18 08:06:38 瀏覽:105
ep區塊鏈垃圾分類 發布:2025-01-18 08:02:02 瀏覽:617
挖以太坊用什麼顯卡合適 發布:2025-01-18 07:58:42 瀏覽:371
a9礦機的風險 發布:2025-01-18 07:58:37 瀏覽:478
以太坊萊特幣區別 發布:2025-01-18 07:44:06 瀏覽:329
關於天線trx 發布:2025-01-18 07:35:24 瀏覽:94