比特幣相關(guān)的密碼學(xué)知識(shí)

地址嫡意、交易、區(qū)塊劳曹、網(wǎng)絡(luò)是區(qū)塊鏈數(shù)據(jù)里面最基本最重要的概念奴愉。地址用來標(biāo)示一筆交易的支出方和接收方。所有的交易最終需要被記到統(tǒng)一的賬本——區(qū)塊鏈上铁孵,而這個(gè)賬本是通過區(qū)塊確認(rèn)并完成的锭硼。每一個(gè)新區(qū)塊,都會(huì)被打上時(shí)間戳蜕劝,最終生成依照時(shí)間前后排列并加以記錄檀头。每個(gè)獨(dú)立節(jié)點(diǎn)之間又通過比特幣網(wǎng)絡(luò)來建立聯(lián)系,這樣就為電子交易記錄建立了一個(gè)去中心化岖沛、分布式的時(shí)間戳服務(wù)器系統(tǒng)暑始。

很復(fù)雜,在這一節(jié)烫止,我們先講地址蒋荚。

1、公鑰密碼學(xué)

講到地址馆蠕,我們就不得不先說一說密碼學(xué)期升,作為保護(hù)信息傳輸安全的技術(shù)手段,密碼在人類社會(huì)中的應(yīng)用源遠(yuǎn)流長(zhǎng)互躬,凱撒密碼是古典密碼的典型代表播赁,它的基本思想是通過字符的代換來實(shí)現(xiàn)加解密。因此古典密碼的安全性主要依賴加密算法本身的安全性吼渡,如果算法泄露了容为,要加密的信息也就沒有秘密可言了。

如今密碼學(xué)相關(guān)技術(shù)已經(jīng)深入各個(gè)領(lǐng)域寺酪,它們的理論共識(shí)都遵循由奧古斯特?柯克霍夫在19世紀(jì)提出“柯克霍夫原則”—— 密碼系統(tǒng)應(yīng)該即使被所有人知道其運(yùn)作步驟坎背,仍然是安全的。即算法是公開的寄雀,唯一需要保護(hù)的是密鑰得滤。

1949年香農(nóng)發(fā)表了《保密系統(tǒng)的信息理論》,為對(duì)稱密碼系統(tǒng)建立了理論基礎(chǔ)盒犹,帶來了加密傳輸基于秘鑰安全而不是基于加密算法安全的理論和技術(shù)變革懂更。這是密碼學(xué)發(fā)展的里程碑眨业,標(biāo)志著現(xiàn)代密碼學(xué)時(shí)代的來臨。

公鑰密碼學(xué)興起之前沮协,對(duì)稱加密是主流的加密模式龄捡,人們基于秘鑰來對(duì)信息進(jìn)行加解密,通常情況下慷暂,密鑰越長(zhǎng)聘殖,代表著密文被破解的難度越大。由于加密算法和解密算法都是同一模式呜呐,只有一把密鑰保證加密數(shù)據(jù)的安全就斤,因此這種加密算法也叫做“對(duì)稱加密算法”悍募。對(duì)稱加密有一個(gè)最大弱點(diǎn):甲方必須把密鑰告訴乙方蘑辑,否則乙方無法解密。而保存和傳遞密鑰坠宴,就成了最頭疼的問題洋魂。

公鑰密碼學(xué)是現(xiàn)代密碼學(xué)最重要的進(jìn)展。公鑰密碼學(xué)可以在不直接傳遞密鑰的情況下喜鼓,完成密文的解密副砍。加密和解密可以使用不同的規(guī)則,只要這兩種規(guī)則之間存在某種對(duì)應(yīng)關(guān)系即可庄岖,系統(tǒng)的安全性既不依賴算法的保密豁翎,也不用直接傳遞密鑰∮绶蓿基于這種公鑰機(jī)制的思想心剥,開始出現(xiàn)了一系列非對(duì)稱加密算法。

1976年Whitfield Diffie & Martin Hellman首次提出了基于數(shù)學(xué)難題的公鑰密碼機(jī)制背桐,1978年RSA公鑰密碼機(jī)制的出現(xiàn)优烧,成為公鑰密碼的杰出代表并成為事實(shí)標(biāo)準(zhǔn),在密碼學(xué)史上創(chuàng)造了又一個(gè)新的里程碑链峭。90年代公鑰密碼學(xué)進(jìn)一步發(fā)展畦娄,基于橢圓曲線乘法、素?cái)?shù)冪等數(shù)學(xué)函數(shù)的公鑰算法誕生弊仪,使得數(shù)字密鑰和不可偽造的數(shù)字簽名成為可能熙卡。

數(shù)據(jù)簽名算法的核心在于證明數(shù)據(jù)的發(fā)送方是簽名者發(fā)出的、不可抵賴励饵,而不是待簽名數(shù)據(jù)的保密性驳癌。

下圖比較說明非對(duì)稱加密與對(duì)稱加密算法的區(qū)別:

非對(duì)稱加密需要兩個(gè)(一對(duì))密鑰:公開密鑰(publickey)和私有密鑰(privatekey),用公鑰對(duì)數(shù)據(jù)進(jìn)行加密后,只有對(duì)應(yīng)的私鑰才能解密;反之如果私鑰用于加密疮丛,則只有對(duì)應(yīng)的公鑰才能解密壹置。通信雙方無須交換密鑰就可以建立保密通信昌执。

公鑰算法用到的是私鑰與公鑰荣茫,他們和比特幣體系中常常說到的地址有什么關(guān)系丧慈?在比特幣系統(tǒng)中馍迄,私鑰由32字節(jié)的隨機(jī)數(shù)組成艳吠,通過私鑰可以算出公鑰麦备,公鑰經(jīng)過一系列哈希及編碼算法就得到了比特幣中的地址。所以地址其實(shí)是公鑰的另一種表現(xiàn)形式昭娩,可以理解為公鑰的摘要凛篙。

2、相關(guān)的加密算法

在私鑰栏渺、公鑰及地址的相關(guān)運(yùn)算中呛梆,用到了基于secp256k1橢圓曲線乘法的簽名算法、SHA-256磕诊、RIPEMD-160填物,和Base58編碼。

2.1橢圓曲線簽名算法

橢圓曲線在密碼學(xué)中的使用是在1985年由Neal Koblitz和Victor Miller分別獨(dú)立提出的霎终。它的主要優(yōu)勢(shì)是在某些情況下它比其他的算法(比如RSA)使用更小的密鑰但提供相當(dāng)?shù)幕蚋叩燃?jí)的安全性滞磺。

比特幣使用了基于secp256k1橢圓曲線數(shù)學(xué)的公鑰密碼學(xué)算法。它包含私鑰與公鑰莱褒,私鑰用于對(duì)交易進(jìn)行簽名击困,將簽名與原始數(shù)據(jù)發(fā)送給整個(gè)比特幣網(wǎng)絡(luò),公鑰則用于整個(gè)網(wǎng)絡(luò)中的節(jié)點(diǎn)對(duì)交易有效性進(jìn)行驗(yàn)證广凸。簽名算法保證了交易是由擁有對(duì)應(yīng)私鑰的人所發(fā)出的阅茶。

2.2 哈希函數(shù)

SHA-256是一種哈希函數(shù),已經(jīng)在上一節(jié)的講解中做了介紹炮障,這里不再贅述[1]目派。

RIPEMD-160也是在生成地址時(shí)用到的一種哈希函數(shù),其輸出長(zhǎng)度為20字節(jié)(160位)胁赢。比特幣用它減少標(biāo)識(shí)接收方的字節(jié)數(shù)企蹭。

2.3 Base58編碼

可讀性編碼算法,類似古典密碼學(xué)里的置換算法智末,理論上并不是密碼學(xué)理論的核心內(nèi)容谅摄。可讀性編碼算法不是為了保護(hù)數(shù)據(jù)的安全性系馆,而是為了可讀性送漠。以二進(jìn)制進(jìn)行傳輸?shù)男畔⑹遣痪邆淇勺x性的,數(shù)字與字母組成的字符串才更容易被識(shí)別由蘑∶龉眩可讀性編碼不改變信息內(nèi)容代兵,只改變信息內(nèi)容的表現(xiàn)形式(部分編碼算法還加入了容錯(cuò)校驗(yàn)功能,以保證傳輸過程中數(shù)據(jù)的準(zhǔn)確性和完整性)爷狈。

Base64是常見的可讀性編碼算法植影,所謂Base64,即是說在編碼過程中使用了64種字符:大寫A到Z涎永、小寫a到z思币、數(shù)字0到9、“+”和“/”羡微。

Base58是Bitcoin中使用的一種編碼方式谷饿,主要用于產(chǎn)生Bitcoin的錢包地址。相比Base64妈倔,Base58不使用數(shù)字"0"博投,字母大寫"O",字母大寫"I"启涯,和字母小寫"i"贬堵,以及"+"和"/"符號(hào)。

設(shè)計(jì)Base58主要的目的是:

避免混淆结洼。在某些字體下,數(shù)字0和字母大寫O叉跛,以及字母大寫I和字母小寫l會(huì)非常相似松忍。

不使用"+"和"/"的原因是,非字母或數(shù)字的字符串難以作為賬號(hào)的一部分被接受筷厘。

沒有標(biāo)點(diǎn)符號(hào)鸣峭,通常不會(huì)被從中間分行。

使大部分的軟件支持雙擊選擇整個(gè)字符串酥艳。

比特幣中使用Base58算法來對(duì)公鑰的Hash160及私鑰進(jìn)行編碼摊溶,以生成以1或3開頭的比特幣地址及WIF(Wallet import Format)格式的私鑰。

3充石、私鑰與公鑰

比特幣私鑰其實(shí)是使用SHA-256生成的32字節(jié)(256位)的隨機(jī)數(shù)莫换,有效私鑰的范圍則取決于比特幣使用的secp256k1 橢圓曲線數(shù)字簽名標(biāo)準(zhǔn)。大小介于0x1 到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140之間的數(shù)幾乎都是合法的私鑰骤铃。

在私鑰的前面加上版本號(hào)拉岁,后面添加壓縮標(biāo)志和附加校驗(yàn)碼,(所謂附加校驗(yàn)碼惰爬,就是對(duì)私鑰經(jīng)過2次SHA-256運(yùn)算喊暖,取兩次哈希結(jié)果的前四字節(jié)),然后再對(duì)其進(jìn)行Base58編碼撕瞧,就可以得到我們常見的WIF(Wallet import Format)格式的私鑰陵叽。

私鑰經(jīng)過橢圓曲線乘法運(yùn)算狞尔,可以得到公鑰。公鑰是橢圓曲線上的點(diǎn)巩掺,并具有x和y坐標(biāo)沪么。公鑰有兩種形式:壓縮的與非壓縮的。早期比特幣均使用非壓縮公鑰锌半,現(xiàn)在大部分客戶端默認(rèn)使用壓縮公鑰禽车。

由于數(shù)學(xué)原理,從私鑰推算公鑰是可行的刊殉,從公鑰逆推私鑰是不可能的殉摔。

初識(shí)比特幣的人常有一種誤解,認(rèn)為比特幣公鑰就是地址记焊,這是不正確的逸月。從公鑰到地址還要經(jīng)過一些運(yùn)算。

4遍膜、地址的生成

橢圓曲線算法生成的公鑰信息比較長(zhǎng)碗硬,壓縮格式的有33字節(jié),非壓縮的則有65字節(jié)瓢颅。地址是為了減少接收方所需標(biāo)識(shí)的字節(jié)數(shù)恩尾。比特幣地址的生成步驟如下:

生成私鑰與公鑰

將公鑰通過SHA256哈希算法處理得到32字節(jié)的哈希值

后對(duì)得到的哈希值通過RIPEMD-160算法來得到20字節(jié)的哈希值 —— Hash160

把版本號(hào)[2]+Hash160組成的21字節(jié)數(shù)組進(jìn)行雙次SHA256哈希運(yùn)算,得到的哈希值的頭4個(gè)字節(jié)作為校驗(yàn)和挽懦,放置21字節(jié)數(shù)組的末尾翰意。

對(duì)組成25位數(shù)組進(jìn)行Base58編碼,就得到地址信柿。

下圖以非壓縮格式的65字節(jié)公鑰示意上述過程:

由于橢圓曲線乘法以及哈希函數(shù)的特性冀偶,我們可以從私鑰推導(dǎo)出公鑰,也可以從公鑰推導(dǎo)出地址渔嚷,而這個(gè)過程是不可逆的进鸠。也正因如此,在整個(gè)比特幣系統(tǒng)中形病,私鑰是最關(guān)鍵的部分客年。私鑰泄露也就意味著丟失了一切。

我們要花掉一個(gè)地址上的資產(chǎn)窒朋,需要構(gòu)造一筆交易搀罢,同時(shí)使用這個(gè)地址對(duì)應(yīng)的私鑰簽名。而如果我們要將資產(chǎn)轉(zhuǎn)移到某個(gè)地址上侥猩,只需要轉(zhuǎn)賬給他公開的地址就行了榔至。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欺劳,隨后出現(xiàn)的幾起案子唧取,更是在濱河造成了極大的恐慌铅鲤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枫弟,死亡現(xiàn)場(chǎng)離奇詭異邢享,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)淡诗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門骇塘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人韩容,你說我怎么就攤上這事款违。” “怎么了群凶?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵插爹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我请梢,道長(zhǎng)赠尾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任毅弧,我火速辦了婚禮气嫁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘形真。我一直安慰自己杉编,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布咆霜。 她就那樣靜靜地躺著,像睡著了一般嘶朱。 火紅的嫁衣襯著肌膚如雪蛾坯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天疏遏,我揣著相機(jī)與錄音脉课,去河邊找鬼。 笑死财异,一個(gè)胖子當(dāng)著我的面吹牛倘零,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戳寸,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼呈驶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了疫鹊?” 一聲冷哼從身側(cè)響起袖瞻,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤司致,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后聋迎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脂矫,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年霉晕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庭再。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牺堰,死狀恐怖拄轻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萌焰,我是刑警寧澤哺眯,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站扒俯,受9級(jí)特大地震影響奶卓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撼玄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一夺姑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掌猛,春花似錦盏浙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慕蔚,卻和暖如春丐黄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孔飒。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工灌闺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坏瞄。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓桂对,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸠匀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕉斜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 〇、序言 貨幣由于其天然屬性決定了其與安全不可分割的聯(lián)系,從最早的金庫(kù)蛛勉、保險(xiǎn)柜鹿寻、鏢局到后來的ATM機(jī)、運(yùn)鈔車诽凌;從存...
    怒馬2048閱讀 38,804評(píng)論 4 79
  • 本文出自于金馬老師課程——“金馬帶你定投區(qū)塊鏈”的課程毡熏,還有“白話區(qū)塊鏈”公眾號(hào)中的概念,我的目的就是把對(duì)同一個(gè)概...
    丁昆朋閱讀 2,360評(píng)論 5 8
  • 三個(gè)夢(mèng) 我和媽媽侣诵,老公一起在窗前看著要去遠(yuǎn)方的路痢法,很陡峭,翻過窗戶杜顺,就可以順著幾乎90度的陡壁下去财搁。我一看到這么陡...
    Apple圓閱讀 313評(píng)論 0 0
  • 【墨竹的菜園】0369——昨天到米東的秀美新疆和胡總溝通,在交談的過程中躬络,我腦中一直閃爍著一個(gè)詞——情懷尖奔。 什么是...
    墨竹的菜園閱讀 534評(píng)論 0 0
  • 終于等到鬼怪16集齊,等這塊肉肥了穷当,再一口氣把它嚼爛提茁,吃下去!昨晚終于天時(shí)地利人和馁菜,想一口氣看完茴扁,無奈追到六集,終...
    三千晚風(fēng)閱讀 784評(píng)論 0 3