欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

當(dāng)前位置:主頁 > 區(qū)塊鏈 > 錢包知識 > hd錢包實(shí)現(xiàn)原理

區(qū)塊鏈錢包-hd錢包的奧秘與實(shí)現(xiàn)原理

2025-03-05 01:37:16 | 來源: | 作者:佚名
HD是Hierarchical-Deterministic(分層確定性)的縮寫,這個概念是在BIP32中被首次提出,這里的分層可以理解成,一個大公司擁有一個種子,它可以為各個子部門派生子私鑰,各個子部門又可以給子子部門派生子子私鑰

錢包發(fā)展

在比特幣早期,中本聰就提出了每次交易使用一個地址這個概念,即假設(shè)你A地址上有100塊,那么你向B地址轉(zhuǎn)賬20塊之后,你剩下的80塊會轉(zhuǎn)入C地址,A地址徹底棄用,這樣意味著A私鑰也徹底棄用了。在早期的非確定性錢包,會一次性為用戶生成100個私鑰/地址對,使用完再繼續(xù)生成,可想而知,這樣管理資產(chǎn)非常麻煩。在這種背景下,有人提出了確定性錢包的概念,只要有一個種子,就能派生出海量的私鑰/地址對,妥當(dāng)保管好種子,就能完全掌控整個派生樹,而HD錢包就是目前最常用的確定性錢包模型。
HD是Hierarchical-Deterministic(分層確定性)的縮寫,這個概念是在BIP32中被首次提出。這里的分層可以理解成,一個大公司擁有一個種子,它可以為各個子部門派生子私鑰,各個子部門又可以給子子部門派生子子私鑰…

這樣做有很多好處:
○ 樹狀特征非常適用于有組織結(jié)構(gòu)的公司使用
○ 每個父能看到自己派生的子的財(cái)務(wù)流向,而子不能看到父
○ 能夠在不需知道私鑰的前提下生成大量的公鑰,非常適用于只負(fù)責(zé)收款的服務(wù)

Tips!

principle of avoiding address reuse: 提倡避免地址重復(fù)使用,當(dāng)數(shù)字貨幣地址已經(jīng)發(fā)生過一次轉(zhuǎn)賬就存在私鑰泄漏的可能性。
BIP: Bitcoin Improvement Proposals(比特幣改進(jìn)提案),比特幣是開源項(xiàng)目,所有人都可以給核心開發(fā)者提出建議。詳見BIP項(xiàng)目地址:bips

種子與助記詞

本質(zhì)上,種子是一個數(shù)字,不方便記憶。
在BIP39中,提出了助記詞方案來試圖解決種子的存放問題。它的核心是通過隨機(jī)生成 12 ~ 24 個容易記住便于抄錄的單詞,再由該單詞序列通過 PBKDF2 與 HMAC-SHA512 函數(shù)創(chuàng)建出隨機(jī)種子作為 BIP32 的種子。它有幾個特性:

○ 規(guī)定熵的位數(shù)必須是 32 的整數(shù)倍,所以熵的長度取值位 128 到 256 之間取 32 的整數(shù)倍的值,分別為 128, 160, 192, 224, 256;
○ 校驗(yàn)和的長度為熵的長度/32 位, 所以校驗(yàn)和長度可為 4,5,6,7,8 位;
○ 助記詞庫有 2048 個詞,用 11 位可全部定位詞庫中所有的詞,作為詞的索引,故一個詞用 11 位表示,助記詞的個數(shù)可為 (熵+校驗(yàn)和)/11,值為 12,15,18,21,24。
作為創(chuàng)建錢包的第一步,下面將以目前常用的128強(qiáng)度為例,簡單闡述下生成助記詞的過程:
1. 隨機(jī)生成一個16字節(jié)的熵;
2. 對熵進(jìn)行哈希計(jì)算,得到一個長度為32的數(shù)組;
3. 取熵的比特位,得到一個長度為128的數(shù)組;
4. 將熵hash前4比特作為校驗(yàn)位放于熵比特?cái)?shù)組之后,得到一個長度為132的數(shù)組;
5. 以長度11切割第4步得到的數(shù)組,并轉(zhuǎn)為10進(jìn)制,得到12個數(shù);
6. 以數(shù)字為序號,從助記詞庫取出對應(yīng)的單詞,得到助記詞。

以下為一個示例實(shí)現(xiàn):

在得到助記詞之后,根據(jù)BIP39,我們將使用PBKDF2函數(shù)推算出根種子,其約定的參數(shù)如下:
1. 將助記詞序列作為密碼
2. “mnemonic” + passphrase 作為鹽
3. 以 2048 為重復(fù)計(jì)算的次數(shù)
4. 以 HMAC-SHA512 為隨機(jī)算法
5. 期望得到長度為512位(64字節(jié))的密鑰作為種子

主密鑰與主鏈碼

得到種子之后,我們需要通過種子推導(dǎo)出主密鑰 (master key) 和主鏈碼 (master chain code)。
根種子通過不可逆 HMAC-SHA512 算法推算出 512 位的哈希串,左 256 位是 Master Private key(m), 右 256 位是 master chain code, 通過 m 結(jié)合推導(dǎo)公鑰的橢圓曲線算法能推導(dǎo)出與之對應(yīng)的 264 位 master public Key (M)。chain code 作為推導(dǎo)下級密鑰的熵。

Tips!

什么是擴(kuò)展密鑰?
密鑰和鏈碼的結(jié)合統(tǒng)稱為擴(kuò)展密鑰 (Extended keys)。即256位的密鑰和256位的鏈碼串聯(lián)起來的512位就是擴(kuò)展密鑰。
包含私鑰的擴(kuò)展密鑰用以推導(dǎo)子私鑰,從子私鑰又可推導(dǎo)對應(yīng)的公鑰和比特幣地址。
包含公鑰的擴(kuò)展密鑰用以推導(dǎo)子公鑰。
擴(kuò)展密鑰使用Base58Check算法加上特定的前綴編碼,編碼得到的包含私鑰的前綴為xprv,包含公鑰的擴(kuò)展密鑰前綴為xpub,相比比特幣的公私鑰,擴(kuò)展密鑰編碼之后得到的長度為512或513位。

路徑

當(dāng)獲得了主密鑰和主鏈碼之后,我們需要設(shè)計(jì)一套規(guī)則來推導(dǎo)子密鑰和子鏈碼以供交易使用。其中有個重要的概念就是路徑。
路徑是一套索引規(guī)范?,F(xiàn)在我們假設(shè)整個HD錢包是一顆樹,將主密鑰視為樹干,子私鑰視為葉子,那么路徑就可以視為葉子的坐標(biāo),可以準(zhǔn)確的描述出葉子相對于樹干的位置。
在比特幣社區(qū)的BIP44協(xié)議中,提出了目前常用的5層路徑建議,如下:
m/purpse’/coin_type’/account’/change/address_index每一層都有特別的含義,分別是:
1. purpse:目前固定為44’(或者0x8000002C),表示遵守BIP44協(xié)議。該層使用硬化衍生。
2. coin_type:幣種類型,使得一個主私鑰可以管理多幣種。其中比特幣是0。該層使用硬化衍生。
3. account:賬戶,從0開始按順序嚴(yán)格遞增。它將密鑰空間拆分為獨(dú)立的賬戶身份,從而使得各個賬戶的資產(chǎn)永遠(yuǎn)不會攪在一起。該層使用硬化衍生。
4. change:是否為找零地址。常數(shù)0代表對外地址,常數(shù)1代表內(nèi)部可見地址。在實(shí)際使用過程中,應(yīng)當(dāng)將對外地址用于收款,內(nèi)部地址用于接收交易找零。該層使用正常衍生。
5. address_index:地址索引編號,從0開始按順序嚴(yán)格遞增。該層使用正常衍生。
例如:
○ 比特幣6號賬戶22號找零地址:m/44’/0’/6’/1/22
○ 以太坊0號賬戶0號非找零地址:m/44’/60’/0’/0/0
最初,設(shè)計(jì)者出于安全考慮引入了硬化衍生。正常衍生的索引號范圍為 [0x0, 0x7FFFFFFF],而硬化衍生的索引號范圍為 [0x80000000, 0xFFFFFFFF];硬化衍生的索引號太長,一般為了便于閱讀,都是會將索引號右上角加上撇號,譬如:0x80000000 記為 0’,0x80000001 記為 1’,以此類推。

Tips!

路徑是允許不完整的。比如:如果公司總部僅僅推導(dǎo)到m/44’/0’/0,并將該層的密鑰和鏈碼給了財(cái)務(wù)部,那么就相當(dāng)于財(cái)務(wù)部擁有了0號賬戶的衍生權(quán)。財(cái)務(wù)部就可以獨(dú)立的用0/0、0/1、0/2…作為路徑去接著推導(dǎo)總部HD錢包這個分支的子密鑰。甚至可以將0號賬戶作為自己的主密鑰,重新構(gòu)建一個HD錢包。

增強(qiáng)擴(kuò)展子密鑰推導(dǎo)

至此,我們已經(jīng)定義好了樹干和坐標(biāo),可以準(zhǔn)確定位到每個枝頭,每片樹葉了。根據(jù)BIP32的HKD(hardened key derivation formula)函數(shù),結(jié)合父私鑰、父鏈碼和路徑,推導(dǎo)出增強(qiáng)子私鑰和增強(qiáng)子鏈碼。

總結(jié)

區(qū)塊鏈錢包-私鑰與地址

私鑰

私鑰(yuè)本質(zhì)上是一個256位隨機(jī)數(shù)
那么什么是256位隨機(jī)數(shù)呢?首先256位是指由256個0或1組成,如:1001001010001...,其次隨機(jī)是指某一位上是0或1是隨機(jī)沒有規(guī)律的。舉個例子,A想獲得一個獨(dú)屬于自己的比特幣私鑰,那么他可以通過擲硬幣來生成,正面朝上是1,反面朝上是0,擲了256次之后,他得到了一個數(shù)字序列,即為A的私鑰。
看到這里,你可能會想,私鑰的規(guī)則也太隨意了吧,我隨便寫個數(shù),只要不超過最大值,就是一個私鑰?或者萬一別人隨機(jī)出了我的私鑰,不是可以把我的資產(chǎn)拿走嗎?
你想的沒錯,以上兩個問題的答案都是肯定的…
但是,即使私鑰只是一個數(shù)字,它仍然非常非常非常難以被破解!它的安全性來自于它包含的數(shù)字集合非常大,大到難以去窮盡所有數(shù)字,并進(jìn)行一一驗(yàn)證。即使存在客觀的重復(fù)的概率,但我們?nèi)匀豢梢苑Q私鑰在密碼學(xué)上是安全的。如果你仍然心存疑慮,那么我們可以感性的感受下:
○ 私鑰共有2^256個可能,近似于10??。
○ 到目前為止,人類可觀測的宇宙中的原子數(shù)約為10??;
○ “雙色球”一等獎的中獎概率是8×10ˉ?;
ok,我們現(xiàn)在知道了比特幣的安全來自于非常嚴(yán)格的隨機(jī)性,可以說我們選取的隨機(jī)算法的強(qiáng)度影響了我們資產(chǎn)的安全性。使用一個可能會被預(yù)測的隨機(jī)算法,不如擲硬幣…

Tips!

如前文所述,私鑰的本體就是一個數(shù)字,本身是不容易記憶和抄錄的。為了便于使用,大部分錢包會對私鑰進(jìn)行編碼,方便用戶進(jìn)行導(dǎo)入導(dǎo)出操作。目前主流的格式有HEX、WIF、WIF-compressed等。

地址

在傳統(tǒng)銀行用戶模型中,用戶需要賬號+密碼來操控自己的資產(chǎn)。而在比特幣體系中,資產(chǎn)其實(shí)是存在每個私鑰下的,用戶只需要私鑰即可以完全操控自己的資產(chǎn)。私鑰的隱私性太強(qiáng),是不可能讓別人得知的,那么如何實(shí)現(xiàn)在不暴露自己私鑰的前提下,讓別人給自己轉(zhuǎn)賬呢?地址應(yīng)運(yùn)而生。
通過橢圓曲線算法(ECDSA),私鑰可以計(jì)算出一個唯一且不可逆的公鑰, 公鑰通過特定的哈希計(jì)算得到公鑰哈希,在對公鑰哈希進(jìn)行編碼,即可得到地址。簡單來說,因?yàn)楣€本身太長了,不利于交易的進(jìn)行,所以通過一些變換得到地址。地址就是公鑰的一種表現(xiàn)形式。

在比特幣體系中,生成一個地址的流程大致為:

可以看出,比特幣用于公開交易的地址是由公鑰進(jìn)行一系列數(shù)學(xué)計(jì)算得來的。順理成章的,如果改變其中的哈希算法或者編碼方式,就可以得到一個不同的結(jié)果,也就是一個新地址!這個特性使得一個私鑰管理多種加密貨幣變?yōu)榭赡埽?br />○ A私鑰->A公鑰-比特幣地址算法->比特幣地址
○ A私鑰->A公鑰-以太坊地址算法->以太坊地址
○ …

Tips!

為什么比特幣地址要采用Base58編碼呢?與Base64的是,Base58去掉了幾個看起來可能會產(chǎn)生歧義的字母,如0(零)、O(大寫字母O)、I(大寫的字母i) 和 l(小寫的字母L),以及兩個影響雙擊選擇的字符,如/和+。在設(shè)計(jì)層面盡可能降低地址輸錯帶來的資金損失。

到此這篇關(guān)于區(qū)塊鏈錢包-hd錢包實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)hd錢包實(shí)現(xiàn)原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

聲明:文章內(nèi)容不代表本站觀點(diǎn)及立場,不構(gòu)成本平臺任何投資建議。本文內(nèi)容僅供參考,風(fēng)險(xiǎn)自擔(dān)!
Tag:HD錢包  

幣圈快訊

  • 伊朗政府:沒有美國的協(xié)調(diào)和允許,攻擊不可能發(fā)生

    2025-06-13 16:46
    ChainCatcher消息,據(jù)金十報(bào)道,伊朗政府稱,沒有美國的協(xié)調(diào)和允許,攻擊不可能發(fā)生。
  • Bitget鏈上交易(Onchain)功能升級,支持雙重限價(jià)觸發(fā)模式

    2025-06-13 16:35
    ChainCatcher消息,Bitget對其鏈上交易(Onchain)產(chǎn)品進(jìn)行多項(xiàng)優(yōu)化,以全面提升用戶交易體驗(yàn),更新BitgetApp至最新版本即可體驗(yàn)。本次升級主要包括: 交易金額多模式可選:支持買入金額、賣出比例自定義設(shè)置 限價(jià)單功能更新:支持?jǐn)?shù)值與比例兩種觸發(fā)模式,便于靈活操作 最低賣出金額調(diào)整:最小下單金額1U起,可輕松處置小額倉位
  • 內(nèi)塔尼亞胡辦公室:以色列已準(zhǔn)備好應(yīng)對與伊朗全面開戰(zhàn)的可能性

    2025-06-13 16:31
    金色財(cái)經(jīng)報(bào)道,以色列總理內(nèi)塔尼亞胡辦公室告訴塔斯社,以色列已準(zhǔn)備好應(yīng)對與伊朗全面開戰(zhàn)的可能性。
  • 分析:以伊沖突僅為市場短期波動因素,把握“逢低買入”時機(jī)需謹(jǐn)慎

    2025-06-13 16:29
    ChainCatcher消息,經(jīng)濟(jì)學(xué)家AlexKrüger就近期以色列-伊朗沖突發(fā)表分析稱,此次事件僅為短期市場噪音,不會引發(fā)新趨勢,其影響更接近2024年的局部沖突而非全面戰(zhàn)爭。關(guān)鍵問題在于如何精準(zhǔn)判斷“抄底”時機(jī)。他回顧2024年市場反應(yīng)時間線:4月12日:謠言傳播,市場首次下跌。 4月13日:伊朗首次直接對以色列發(fā)射導(dǎo)彈,市場再次下跌。 4月14日至18日:市場因等待以色列報(bào)復(fù)而保持緊張。 4月18日:以色列實(shí)施報(bào)復(fù),采取克制攻擊,避免打擊主要目標(biāo)。市場飆升。雙方隨后表示暫停,回歸秘密行動。
  • 英媒:兩個伊朗軍事基地出現(xiàn)火焰和煙霧

    2025-06-13 16:13
    ChainCatcher消息,英國廣播公司(BBC)稱證實(shí)了以色列襲擊伊朗兩處軍事基地的畫面。從不同角度拍攝的幾段視頻顯示,伊朗西北部的皮蘭沙爾(Piranshahr)一處地點(diǎn)升起了火焰和煙霧,據(jù)信那里是伊朗的一個彈道導(dǎo)彈基地。第二個地點(diǎn)據(jù)信是伊朗革命衛(wèi)隊(duì)在西部克爾曼沙阿省的一個基地。在克爾曼沙阿省一個工業(yè)區(qū),一輛行駛中的汽車拍攝到的畫面顯示,一條主要高速公路旁的山區(qū)至少升起了三團(tuán)煙柱。
  • 查看更多