私鑰(Private key)在密碼貨幣的世界里是最敏感、最重要的東西。我們建議所有有志成為老手的用戶(hù)學(xué)學(xué)私鑰的本源、相關(guān)推理和作用。在本文中,我們會(huì)解釋私鑰是怎么來(lái)的,它跟你的密碼學(xué)貨幣資產(chǎn)有何關(guān)聯(lián)。
私鑰對(duì)于密碼學(xué)貨幣來(lái)說(shuō)意味著什么
歸根結(jié)底,持有密碼學(xué)貨幣就是持有私鑰。在現(xiàn)實(shí)世界中,擁有實(shí)物財(cái)產(chǎn)通常指的是擁有寫(xiě)有你的名字的契據(jù)或收據(jù),但是在密碼學(xué)貨幣世界中,擁有某個(gè)資產(chǎn)就是掌握某個(gè)信息。簡(jiǎn)言之,掌握了私鑰就等于擁有了(這把私鑰所能掌控的)密碼學(xué)資產(chǎn)。
在密碼學(xué)貨幣世界,“所知即所得”就是絕對(duì)真理
所有資產(chǎn)都可以通過(guò)交易來(lái)操控。在現(xiàn)實(shí)世界,交易通常都需要簽名授權(quán)。然而,在密碼學(xué)貨幣世界,所有交易的授權(quán)都必須使用相關(guān)的私鑰。私鑰的作用是配合密碼學(xué)算法,生成一筆交易的數(shù)字簽名。簽過(guò)名的交易表示私鑰持有人許可了他人對(duì)自己所持有資產(chǎn)的權(quán)限。雖然任何人都能生成與你的數(shù)字資產(chǎn)相關(guān)的交易,但是只有持有對(duì)應(yīng)私鑰的人才能簽署該交易。
雖然在現(xiàn)實(shí)世界中虛假簽名是個(gè)問(wèn)題,但是密碼學(xué)貨幣世界的安全性受其密碼學(xué)性質(zhì)保護(hù)。迄今為止,還沒(méi)有聽(tīng)說(shuō)過(guò)哪個(gè)黑客在沒(méi)有私鑰的情況下成功簽署交易的。
幣圈有句名言“沒(méi)有私鑰,幣就不是你的”,這是因?yàn)楹灻灰住⑥D(zhuǎn)移資產(chǎn)的能力完全系之于私鑰,拿到一把私鑰之后,不管是誰(shuí),都能轉(zhuǎn)走這把私鑰對(duì)應(yīng)的資產(chǎn)。
什么是私鑰?
從實(shí)際角度來(lái)看,私鑰就是一個(gè)數(shù)字(這個(gè)數(shù)字的大小在一定范圍內(nèi)),可以用來(lái)花費(fèi)資金(這就是我們?yōu)槭裁匆煤帽9芩借€的原因)。從數(shù)學(xué)角度來(lái)看,私鑰就是一個(gè)隨機(jī)生成的正整數(shù)。以下是從技術(shù)角度給出的更準(zhǔn)確的描述:
私鑰是一個(gè)在特定的正數(shù)范圍內(nèi)通過(guò)隨機(jī)數(shù)生成器得到的數(shù)字,具有密碼學(xué)意義上的強(qiáng)隨機(jī)性特點(diǎn)。
在大多數(shù)情況下,計(jì)算機(jī)使用偽隨機(jī)數(shù)生成器(PRNG)生成這些隨機(jī)正整數(shù)(真正的隨機(jī)數(shù)生成器很難找到。這些生成器通常需要專(zhuān)門(mén)的硬件,并使用物理源,如電路中的熱噪聲或蓋革計(jì)數(shù)器的精確計(jì)時(shí))。PRNG是一種密碼學(xué)加強(qiáng)型函數(shù),需要輸入一個(gè)熵足夠大的值作為隨機(jī)種子。
熵是一個(gè)復(fù)雜的概念,但是它的目的很簡(jiǎn)單:為函數(shù)帶來(lái)不可預(yù)測(cè)性。通過(guò)使用安全的熵源,PRNG可以創(chuàng)建出偽隨機(jī)數(shù),其非隨機(jī)性概率是可以忽略不計(jì)的(在可接受的特定范圍內(nèi))。
Linux系統(tǒng)中的“/dev/urandom”和Microsoft Windows系統(tǒng)中的“rand_s”常作為PRNG的熵源,用來(lái)生成安全的隨機(jī)數(shù)。在上圖中,“range”既是數(shù)學(xué)概念里的范圍,又指計(jì)算機(jī)用來(lái)生成隨機(jī)數(shù)的字節(jié)大小。(由圖可看出,RPNG的作用就是在一個(gè)很大的范圍內(nèi)取出一個(gè)值;而熵保證了這個(gè)過(guò)程是足夠隨機(jī)的)
在創(chuàng)建以太坊或比特幣私鑰時(shí),PRNG的取值范圍是從1到2256-1(想象一個(gè)由數(shù)字0到9組成、長(zhǎng)達(dá)78位的密碼鎖)。由于這個(gè)范圍很大,生成兩個(gè)相同私鑰的概率低到可以忽略不計(jì),這就是為什么其他用戶(hù)不太可能創(chuàng)建出跟你一模一樣的私鑰。你的私鑰是從一個(gè)巨大的整數(shù)集合中選出來(lái)的——幾乎與整個(gè)宇宙中可見(jiàn)原子的總數(shù)差不多。
比特幣和以太坊都采用了1到2256-1的范圍,在這兩條鏈的公鑰生成算法下是可行的。例如,以太坊采用橢圓曲線(xiàn)(尤其是SECP-256k1)來(lái)生成公鑰。在最初的黃皮書(shū)中,Gavin Wood博士將私鑰定義成是在[1,secp256k1n−1]范圍內(nèi)隨機(jī)選出的正整數(shù)(大端格式下長(zhǎng)度為32的字節(jié)數(shù)組)。關(guān)于所有正式定義,請(qǐng)查閱黃皮書(shū)。
私鑰、公鑰和地址
由于私鑰必須保密,我們還需要一種機(jī)制來(lái)標(biāo)記發(fā)帳的目的地。因此,所有區(qū)塊鏈都引入了地址(根據(jù)私鑰計(jì)算出的一串獨(dú)一無(wú)二的數(shù)字)這一概念。地址就是密碼學(xué)資產(chǎn)的存儲(chǔ)位置,(如有需要)可以分享給任何人,這樣他們就能給你轉(zhuǎn)賬(也能知道你的密碼學(xué)資產(chǎn)余額)。
區(qū)塊鏈地址是通過(guò)公鑰創(chuàng)建的,以確保你是這個(gè)地址的所有者。再往回推,公鑰是通過(guò)私鑰生成的。這個(gè)過(guò)程是單向的,也就是說(shuō)你可以通過(guò)私鑰計(jì)算出賬戶(hù)地址,但是不能通過(guò)賬戶(hù)地址倒推計(jì)算出私鑰(哪怕是您自己,也做不到)。
私鑰可以推出公鑰,公鑰可以推出區(qū)塊鏈地址。但是,區(qū)塊鏈地址無(wú)法用來(lái)推出公鑰,公鑰也無(wú)法用來(lái)推出私鑰。
這一單向過(guò)程是通過(guò)密碼學(xué)陷門(mén)函數(shù)(cryptographic trapdoor function)實(shí)現(xiàn)的。陷門(mén)函數(shù)是一種單向函數(shù),一個(gè)輸入值只能導(dǎo)致唯一的輸出值,但是不能根據(jù)輸出值倒推原始的輸入值。不同的區(qū)塊鏈生態(tài)系統(tǒng)采用不同的單向函數(shù)。例如,最流行的區(qū)塊鏈系統(tǒng)使用基于橢圓曲線(xiàn)的代數(shù)結(jié)構(gòu)來(lái)生成公鑰。無(wú)論這些代數(shù)結(jié)構(gòu)具備哪些特征,其結(jié)果始終是確定的:公鑰是與私鑰一一對(duì)應(yīng)的,同一個(gè)私鑰永遠(yuǎn)只能生成同樣的公鑰。
雖然比特幣或以太坊等流行的區(qū)塊鏈?zhǔn)褂肊CDSA算法,用橢圓曲線(xiàn)secp256k1上的固定點(diǎn)乘以私鑰,即得出公鑰。其它區(qū)塊鏈項(xiàng)目也采用類(lèi)似的方法。例如,門(mén)羅使用的是EdDSA算法和Curve25519曲線(xiàn),Polkadot和Substrate使用的是sr25519算法和Ed25519曲線(xiàn)。所有這些區(qū)塊鏈都基于1到2256-1范圍內(nèi)的私鑰生成公鑰。
區(qū)塊鏈地址也是用單向函數(shù)計(jì)算出來(lái)的,用的就是所謂的哈希函數(shù)。比特幣和以太坊地址都是在公鑰的基礎(chǔ)上通過(guò)一個(gè)或多個(gè)密碼學(xué)加強(qiáng)型哈希函數(shù)創(chuàng)建的,只不過(guò)不同的區(qū)塊鏈會(huì)采用不同的算法。鑒于這些哈希函數(shù)的運(yùn)作方式,你絕對(duì)可以相信你的公鑰和私鑰對(duì)應(yīng)的區(qū)塊鏈地址是唯一的。
以太坊賬戶(hù)是公鑰的Keccak-256哈希值,但是只保留計(jì)算結(jié)果最右邊的20個(gè)字節(jié)。比特幣私鑰使用SHA-256和RIPEMD-160,Polkadot和ZCash使用Blake2b。所有這些哈希函數(shù)都是抗碰撞的,因此兩個(gè)公鑰生成同一個(gè)賬戶(hù)地址的可能性很低,而且保證了用地址反推私鑰的唯一方式是經(jīng)濟(jì)效率極低的暴力破解。我們并不能保證這些哈希函數(shù)不會(huì)被破解,但是迄今為止,還沒(méi)有哪個(gè)區(qū)塊鏈?zhǔn)褂玫墓:瘮?shù)已被證明遭到破解。
一點(diǎn)點(diǎn)數(shù)學(xué)就可以保守秘密
密碼學(xué)資產(chǎn)的安全性源自私鑰背后的密碼學(xué)和數(shù)學(xué)——只要我們保管好自己的私鑰即可。迄今為止,還沒(méi)有人可以通過(guò)暴力破解方式找到與你的區(qū)塊鏈地址對(duì)應(yīng)的私鑰,因?yàn)檫@需要消耗的能量比太陽(yáng)存儲(chǔ)的能量都多。在Portis,我們采取了謹(jǐn)慎的措施,來(lái)確保你的私鑰是基于只有你知道的數(shù)據(jù)安全生成的(欲知詳情,請(qǐng)閱讀我們的白皮書(shū))。