0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

區(qū)塊鏈干貨:關(guān)于錢包的基礎(chǔ)密碼學(xué)

如意 ? 來(lái)源:ETHFANS ? 作者:阿樹(shù) ? 2020-06-28 09:38 ? 次閱讀

通過(guò)區(qū)塊鏈,人類歷史上首次通過(guò)技術(shù)徹底、純粹地保障「私有財(cái)產(chǎn)神圣不可侵犯」。

讓人沉思,讓人興奮的一段話。

可在這背后的基礎(chǔ)技術(shù)「密碼學(xué)」是如何工作,以及保障數(shù)字資產(chǎn)的安全呢?無(wú)論你是愛(ài)好者亦或投資客,應(yīng)該需要多少了解背后的原理,免得誤解,輕則鬧笑話,重則損失資產(chǎn)。因?yàn)槲覀兛倳?huì)聽(tīng)到一些鬼扯的故事(幫我找回密碼吧!私鑰發(fā)到群里了誒?。?,皆是由于對(duì)錢包本質(zhì)的不了解。

本文僅談?wù)撳X包原型涉及的相關(guān)密碼學(xué),不包含 keystore,助記詞,轉(zhuǎn)賬交易等。

錢包如何生成

區(qū)塊鏈干貨:關(guān)于錢包的基礎(chǔ)密碼學(xué)

這是以太坊黃皮書(shū)關(guān)于錢包(私鑰、公鑰、地址)的描述,僅僅 2 行文字。主要講解私鑰通過(guò) ECDSA(橢圓曲線簽名算法)推導(dǎo)出公鑰,繼而經(jīng)過(guò) Keccak 單向散列函數(shù)推導(dǎo)出地址。

分解為 3 個(gè)步驟:

1. 創(chuàng)建隨機(jī)私鑰 (64 位 16 進(jìn)制字符 / 256 比特 / 32 字節(jié))

2. 從私鑰推導(dǎo)出公鑰 (128 位 16 進(jìn)制字符 / 512 比特 / 64 字節(jié))

3. 從公鑰推導(dǎo)出地址 (40 位 16 進(jìn)制字符 / 160 比特 / 20 字節(jié))

區(qū)塊鏈干貨:關(guān)于錢包的基礎(chǔ)密碼學(xué)

這是我從 ethereumjs/keythereum 中剝離出來(lái)的 JavaScript 代碼,關(guān)于黃皮書(shū)上的公式的具體實(shí)現(xiàn),僅僅 6 行代碼。

這是一件很奇妙的事情,2 行文字,6 行代碼承載著億萬(wàn)級(jí)別的資產(chǎn),但往往越簡(jiǎn)單,越奧妙。以上的 6 行代碼,就已經(jīng)囊括密碼學(xué)中大多數(shù)技術(shù),比如隨機(jī)數(shù)生成器、非對(duì)稱加密,單向散列函數(shù)等。以下我會(huì)為大家解剖這 6 行代碼,逐一介紹背后相關(guān)的密碼學(xué)知識(shí)。

隨機(jī)數(shù)

隨機(jī)數(shù)用于生成私鑰,若隨機(jī)數(shù)可以被預(yù)測(cè)或重現(xiàn),則私鑰就會(huì)立刻形同虛設(shè)。所以保證隨機(jī)數(shù)擁有下列三項(xiàng)特征,至關(guān)重要:

隨機(jī)性:不存在統(tǒng)計(jì)學(xué)偏差,完全雜亂的數(shù)列

不可預(yù)測(cè)性:不能從過(guò)去的數(shù)列推測(cè)下一個(gè)出現(xiàn)的數(shù)

不可重現(xiàn)性:除非將數(shù)列保存下來(lái),否則不能重現(xiàn)相同的數(shù)列

軟件本身是無(wú)法生成具有不可重現(xiàn)性的隨機(jī)數(shù),因?yàn)檫\(yùn)行軟件的計(jì)算機(jī)本身僅具備有限的內(nèi)部狀態(tài)。所以通過(guò)確定性的代碼,在周期足夠長(zhǎng)的情況下,必然會(huì)出現(xiàn)相同的隨機(jī)數(shù)。因此要生成具備不可重現(xiàn)性的隨機(jī)數(shù),需要從不確定的物理現(xiàn)象中獲取信息,比如周圍溫度、環(huán)境噪音、鼠標(biāo)移動(dòng),鍵盤輸入間隔等。

Linux 內(nèi)核中維護(hù)了一個(gè)熵池用來(lái)收集來(lái)自設(shè)備驅(qū)動(dòng)程序和其它來(lái)源的環(huán)境噪音。熵(entropy)是描述系統(tǒng)混亂無(wú)序程度的物理量,一個(gè)系統(tǒng)的熵越大則說(shuō)明該系統(tǒng)的有序性越差,即不確定性越大。

所以在選擇生成私鑰的隨機(jī)數(shù)方法時(shí),需要選擇滿足密碼學(xué)強(qiáng)度的隨機(jī)數(shù)方法,比如 Node 中的 crypto.randomBytes。當(dāng)你調(diào)用 crypto.randomBytes(32) 方法時(shí),它會(huì)等待熵池搜集足夠的信息后,返回 64 位的隨機(jī)數(shù),即私鑰。

區(qū)塊鏈干貨:關(guān)于錢包的基礎(chǔ)密碼學(xué)

另外,在以太坊中想要獲得隨機(jī)數(shù)是一件不容易的事情,因?yàn)榈V工需要得到同樣的結(jié)果,并經(jīng)過(guò)驗(yàn)證提交到區(qū)塊鏈上。但如果 EVM 存在 random opcode,礦工會(huì)生成不一致隨機(jī)數(shù),無(wú)法達(dá)成共識(shí)。

目前社區(qū)也提出相應(yīng)的方案,Mist 的作者 Alex van de Sande 提出使用 blockhashes 生成隨機(jī)數(shù),但由于礦工擁有操縱區(qū)塊數(shù)據(jù)的能力,如果有能力且愿意放棄 5 個(gè)區(qū)塊的獎(jiǎng)勵(lì),理論上可以間接影響隨機(jī)數(shù),所以不是完全足夠安全可靠。

為了解決礦工有可能作惡的問(wèn)題,國(guó)內(nèi)社區(qū)提出 RANDAO: A DAO working as RNG of Ethereum 項(xiàng)目,構(gòu)建一個(gè)人人可以參與的 DAO,通過(guò)經(jīng)濟(jì)激勵(lì),由所有參與者共同決定一個(gè)隨機(jī)數(shù)。在 RANDAO 的基礎(chǔ)上,Vitalik Buterin 也提出 RANDAO++ 方案,感興趣可以看看。

非對(duì)稱加密

在對(duì)稱密碼中,由于加密和解密的密鑰相同,所以必須向接收者配送密鑰用于解密。但發(fā)送密鑰過(guò)程中,竊聽(tīng)者可以竊取密鑰解密,不發(fā)送密鑰吧,接收者無(wú)法解密,密鑰必須發(fā)送,但又不能發(fā)送,這問(wèn)題稱為密鑰配送問(wèn)題。一般采取事先共享密鑰、密鑰分配中心、Diffie-Hellman 密鑰交換等方案來(lái)解決,但直到非對(duì)稱加密方案的出現(xiàn),無(wú)需向接收者配送解密密鑰,密鑰配送問(wèn)題才完美解決。

在非對(duì)稱加密中,將密鑰分為加密密鑰和解密密鑰,也就是我們常說(shuō)的公鑰和私鑰。公鑰和私鑰一一對(duì)應(yīng),由公鑰加密的密文,必須使用公鑰配對(duì)的私鑰才可以解密。

看似有點(diǎn)復(fù)雜,我們祭出密碼學(xué)的男女主角 Alice 和 Bob,來(lái)通俗地梳理一下:

發(fā)送者: Bob,接收者:Alice,竊聽(tīng)者:Eve

1. Alice 生成密鑰對(duì)(私鑰和公鑰),私鑰由 Alice 自身妥善保管

2. Alice 將自己的公鑰發(fā)送給 Bob,即使被 Eve 竊取也沒(méi)關(guān)系

3. Bob 使用 Alice 的公鑰對(duì)消息加密,發(fā)送給 Alice

4. 密文可能被 Eve 竊取,但他無(wú)法使用公鑰解密

5. Alice 使用自己的私鑰解密密文

當(dāng)我們調(diào)用 secp256k1.publicKeyCreate 獲得公鑰時(shí),實(shí)際使用的是非對(duì)稱加密中的橢圓曲線算法。通過(guò)該算法可以從私鑰推導(dǎo)出公鑰,這是一個(gè)不可逆的過(guò)程:K = k * G。給出常數(shù)點(diǎn) G 時(shí),使用已知私鑰 k 求公鑰 K 的問(wèn)題并不困難,但反過(guò)來(lái),已知公鑰 K 求私鑰 k,則非常困難。這就是橢圓曲線算法上的離散對(duì)數(shù)問(wèn)題,也是為什么你可以分享地址(或公鑰)給別人,但不能暴露自己的私鑰。

const publicKey = secp256k1.publicKeyCreate(privateKey, false).slice(1)

// publicKey.toString(‘hex’): 1e3f1532e3285b02.。.45d91a36a8d78cb6bef8

為了形象的表現(xiàn)橢圓曲線算法如何將私鑰推導(dǎo)出公鑰,我們將使用簡(jiǎn)單的整數(shù)作為私鑰 k,找到公鑰 K = k * G,也就是 G 相加 k 次(數(shù)學(xué)原理一致)。在橢圓曲線中, 點(diǎn)的相加等同于從該點(diǎn)畫(huà)切線找到與曲線相交的另?點(diǎn), 然后映射到 x 軸。下圖展示了從曲線上獲得 G、2G、4G、8G 的幾何操作。

區(qū)塊鏈干貨:關(guān)于錢包的基礎(chǔ)密碼學(xué)

單向散列函數(shù)

單向散列函數(shù) (one-way hash function) 有一個(gè)輸入和一個(gè)輸出,其中輸入稱為消息 (message) ,輸出稱為散列值 (hash value) 。散列值也稱為消息摘要 (message digest) 或者指紋 (fingerprint) 。單向散列函數(shù)可以根據(jù)消息的內(nèi)容計(jì)算出散列值,而散列值就可以用來(lái)檢查消息的完整性。

單向散列函數(shù)擁有下列四項(xiàng)特征:

1. 根據(jù)任意長(zhǎng)度的消息計(jì)算出固定長(zhǎng)度的散列值

2. 能夠快速計(jì)算出散列值

3. 具備單向性

4. 消息不同散列值也不同

當(dāng)我們調(diào)用 createKeccakHash(“keccak256”) 方法時(shí),Keccak 使用海綿函數(shù),對(duì)公鑰與初始的內(nèi)部狀態(tài)做 XOR 運(yùn)算得到 32 字節(jié)散列值,取其后 20 字節(jié),轉(zhuǎn)成 40 位的 16 進(jìn)制字符,即為地址。

區(qū)塊鏈干貨:關(guān)于錢包的基礎(chǔ)密碼學(xué)

在以太坊中還有許多地方應(yīng)用了單向散列函數(shù),例如:

1. 礦工需要不斷計(jì)算特定數(shù)據(jù)的散列值,當(dāng)散列值滿足難度要求時(shí),礦工便可以廣播該區(qū)塊,獲得獎(jiǎng)勵(lì)。

2. 根據(jù)默克爾樹(shù)根哈希的值前后是否一致來(lái)判斷區(qū)塊中的交易是否被篡改

題外話,有一陣子我很好奇單向散列函數(shù)或哈希函數(shù)中的 ”Hash“ 代表什么意思呢?后來(lái)經(jīng)過(guò)查詢得知, ”Hash“ 在古法語(yǔ)中的原意時(shí)「斧頭」,后來(lái)被引申為「剁碎」,正好形象的比喻單向散列函數(shù),將消息剁碎,混合成固定長(zhǎng)度的散列值。后來(lái)通過(guò) Herbert Hellerman 的《Digital Computer System Principles》成為廣為流傳的術(shù)語(yǔ)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 對(duì)稱密碼學(xué)

    關(guān)注

    0

    文章

    5

    瀏覽量

    6328
  • 數(shù)字錢包
    +關(guān)注

    關(guān)注

    2

    文章

    79

    瀏覽量

    10157
  • 區(qū)塊鏈
    +關(guān)注

    關(guān)注

    111

    文章

    15562

    瀏覽量

    106208
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    簡(jiǎn)單學(xué)學(xué)之課堂二:區(qū)塊的透明性指的是什么?

    者對(duì)密碼學(xué)有基礎(chǔ)的了解后,第四節(jié)課作者君會(huì)介紹密碼學(xué)區(qū)塊之間的關(guān)系,其中會(huì)涉及到私鑰、公鑰和地址之間的聯(lián)系、錢包哪些信息可以公開(kāi)等等內(nèi)容
    發(fā)表于 01-05 14:19

    區(qū)塊錢包軟件開(kāi)發(fā),區(qū)塊錢包源碼搭建

    什么是區(qū)塊錢包區(qū)塊錢包本質(zhì)上是一個(gè)工具,目前絕大多數(shù)的
    發(fā)表于 05-26 16:30

    密碼學(xué)中的加密技術(shù)

    密碼學(xué)中的加密技術(shù):密碼學(xué)的基本概念密碼編碼學(xué)密碼體制的設(shè)計(jì)學(xué),而
    發(fā)表于 06-16 23:50 ?0次下載

    區(qū)塊的底層技術(shù)是密碼學(xué)

    密碼學(xué)區(qū)塊的底層技術(shù),沒(méi)有密碼學(xué)就沒(méi)有區(qū)塊,沒(méi)有密碼學(xué)
    發(fā)表于 11-22 11:22 ?2093次閱讀

    密碼學(xué)區(qū)塊中有著怎樣的作用

    張驍表示,區(qū)塊之所以能夠解決人與人之間的信任問(wèn)題,是因?yàn)樗牟豢纱鄹男裕@種特性本質(zhì)上又是基于密碼學(xué)算法來(lái)實(shí)現(xiàn)的。因此密碼學(xué)區(qū)塊
    發(fā)表于 12-27 15:51 ?4709次閱讀

    區(qū)塊系統(tǒng)中采用密碼學(xué)技術(shù)是否存在安全威脅

    量子計(jì)算與區(qū)塊是當(dāng)下兩個(gè)熱門技術(shù),二者因?yàn)?b class='flag-5'>密碼學(xué)技術(shù)聯(lián)系在一起。區(qū)塊使用密碼學(xué)技術(shù)保障系統(tǒng)安
    發(fā)表于 01-10 14:51 ?1190次閱讀

    區(qū)塊密碼學(xué)技術(shù)將開(kāi)啟下一場(chǎng)變革

    摩根大通從2015年就積極地探討研究區(qū)塊底層技術(shù),我本人參與了很多內(nèi)部早期的區(qū)塊技術(shù)和商業(yè)模式分享會(huì)。JPM從一開(kāi)始就專注于區(qū)塊
    發(fā)表于 04-03 11:26 ?798次閱讀

    應(yīng)用密碼學(xué)的資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是應(yīng)用密碼學(xué)的資料概述包括了:1.密碼的由來(lái),2.密碼技術(shù)發(fā)展簡(jiǎn)介,3.密碼學(xué)基本概念
    發(fā)表于 04-04 08:00 ?2次下載
    應(yīng)用<b class='flag-5'>密碼學(xué)</b>的資料概述

    區(qū)塊密碼學(xué)的基礎(chǔ)內(nèi)容介紹

    密碼學(xué)是數(shù)學(xué)和計(jì)算機(jī)科學(xué)的分支,同時(shí)其原理大量涉及信息論。密碼學(xué)不只關(guān)注信息保密問(wèn)題,還同時(shí)涉及信息完整性驗(yàn)證(消息驗(yàn)證碼)、信息發(fā)布的不可抵賴性(數(shù)字簽名)、以及在分布式計(jì)算中產(chǎn)生的來(lái)源于內(nèi)部和外部的攻擊的所有信息安全問(wèn)題。
    發(fā)表于 05-08 10:33 ?1213次閱讀

    區(qū)塊技術(shù)的基石密碼學(xué)探討

    越來(lái)越顯得重要。它已不僅僅局限于使用在軍事、政治和外交方面,而更多的是與人們的生活息息相關(guān):如人們?cè)谶M(jìn)行網(wǎng)上購(gòu)物,與商務(wù)交流,使用信用卡等等,都需要密碼學(xué)的知識(shí)來(lái)保護(hù)人們的個(gè)人信息和隱私,當(dāng)然對(duì)于我們關(guān)注的區(qū)塊技術(shù),
    發(fā)表于 07-12 10:35 ?1120次閱讀

    密碼學(xué)貨幣錢包的發(fā)展方向分析

    錢包密碼學(xué)貨幣世界里重要的基礎(chǔ)設(shè)施。所有跟密碼學(xué)貨幣相關(guān)的操作,包括買賣密碼學(xué)貨幣、持有密碼學(xué)貨幣、轉(zhuǎn)賬,乃至質(zhì)押獲利(staking),
    發(fā)表于 02-22 18:20 ?900次閱讀

    區(qū)塊錢包是什么_區(qū)塊錢包可以做什么

     區(qū)塊錢包是一種存儲(chǔ)加密幣的軟件程序。區(qū)塊錢包密碼
    發(fā)表于 07-21 17:08 ?5629次閱讀

    區(qū)塊依靠密碼學(xué)和經(jīng)濟(jì)激勵(lì)手段逐步發(fā)展

    2015 年,英國(guó)《經(jīng)濟(jì)學(xué)人》雜志首次報(bào)道區(qū)塊,并將其喻為“制造信任的機(jī)器”(The trust machine)。如今,在經(jīng)歷了市場(chǎng)信心的快速膨脹、冷卻再到理性的起伏之后, 區(qū)塊
    的頭像 發(fā)表于 09-30 14:37 ?3186次閱讀

    區(qū)塊密碼學(xué)中的應(yīng)用及技術(shù)綜述

    區(qū)塊密碼學(xué)中的應(yīng)用及技術(shù)綜述
    發(fā)表于 06-25 15:06 ?12次下載

    密碼學(xué)原理的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《密碼學(xué)原理的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 08-02 10:28 ?0次下載
    <b class='flag-5'>密碼學(xué)</b>原理的應(yīng)用