毫無(wú)疑問(wèn),比特幣的技術(shù)支撐中密碼學(xué)可謂是勞苦功高焕盟,特別是公鑰密碼學(xué)秋秤,也叫做非對(duì)稱密碼學(xué)。如果你沒(méi)有接觸或者學(xué)習(xí)過(guò)密碼學(xué)的人可能是不了解密碼學(xué)的脚翘,首先我們要清楚一些密碼學(xué)的概念灼卢。
密碼學(xué)中有兩個(gè)分支,一個(gè)是分組密碼體制(對(duì)稱密碼)来农,公鑰密碼體制(非對(duì)稱密碼)鞋真。
分組密碼體制
對(duì)于一個(gè)小白來(lái)說(shuō)并不知道什么是秘鑰,密文這些名詞究竟是什么意思沃于,沒(méi)關(guān)系涩咖,我這里簡(jiǎn)單的給大家說(shuō)一下概念。
明文 密文
比如現(xiàn)在有個(gè)消息“i love my darling”繁莹,我們并不想別看看到檩互,朱這是看到這個(gè)也不知道是什么意思,就可以利用加密蒋困,加密成看不懂的“*********”盾似,那么在加密前的“i love my darling”也就是叫做明文了。加密后看不懂的信息“*********”就是密文了
秘鑰
還是接著上一個(gè)例子繼續(xù)說(shuō)雪标,針對(duì)明文“i love my darling”零院,我們把明文變成十六進(jìn)制的一個(gè)數(shù)字,假設(shè)這個(gè)數(shù)字是A村刨,并且這個(gè)數(shù)字是10告抄,我們要是把這個(gè)10傳給你的darling,當(dāng)然這是明文嵌牺,你的darling肯定是能看懂的打洼,但是你想對(duì)其他的人保密龄糊,我們就加密這個(gè)10,然后就用我自己想得一個(gè)算法去加密募疮,比如現(xiàn)在我就選定了一個(gè)私鑰位250炫惩,然后把10與250相加,得到密文260阿浓,然后我們把密文發(fā)給你的darling他嚷,并且把250這個(gè)秘鑰發(fā)給你的darling,然后你的darling拿到這個(gè)密文和密碼就可以進(jìn)行解密了芭毙,解密過(guò)程就是260-250 然后得到10筋蓖,自然就得到了密文,但是如果別人截獲到了消息的密文260但是他并沒(méi)有秘鑰退敦,也就自然無(wú)法解密即使是他知道解密的算法是什么粘咖。(我這里所舉例的加密解密是很簡(jiǎn)單的數(shù)學(xué)運(yùn)算,并不是真正的加密算法侈百,所以可以破解的瓮下,但是真正的密碼算法幾乎都是不可破解的,或者說(shuō)是以目前計(jì)算機(jī)的算力還不足以破解)设哗。
以前別人這樣給我形象的給我講的:秘鑰好比一把鑰匙唱捣,加密算法好比一個(gè)把鎖,明文好比你的家网梢,如果你要出門肯定就要鎖門把震缭,你選擇一個(gè)怎樣的鎖,好比你選擇用什么加密算法來(lái)加密明文战虏,如果你想家里安全就去買一個(gè)很貴的高大上的鎖拣宰。你出門用你的這個(gè)鑰匙去鎖上這個(gè)門后,你爸爸烦感,媽媽也可以開(kāi)這個(gè)門巡社,因?yàn)樗麄冇泻湍阋粯拥蔫€匙。對(duì)稱密碼學(xué)中也是一樣手趣,只要?jiǎng)e人有你的秘鑰或者一樣的秘鑰晌该,也可以解密你這個(gè)密文。
這里再提一下密碼學(xué)的安全性绿渣,接著說(shuō)朝群,就算你家里用的是世界上最牛逼的鎖,但是你偏偏沒(méi)有保存好把你的鑰匙中符,給了別人姜胖,或者別人去做了一個(gè)和你一樣的鑰匙,他也就可以進(jìn)你家的大門了淀散。密碼學(xué)中也是一樣右莱,密碼的安全性是基于秘鑰的安全性蚜锨。
為什么叫對(duì)稱密碼呢?慢蜓,因?yàn)榧用芎徒饷艿拿荑€只有一個(gè)亚再,也就是是說(shuō):我用密碼A加密了一個(gè)消息M得到密文C,如果我們要在網(wǎng)絡(luò)中把消息發(fā)給別人胀瞪,為了不讓別人監(jiān)聽(tīng)到我和那個(gè)人交流的內(nèi)容针余,就需要加密傳輸。比如就把密文C發(fā)給別人凄诞,但是他收到的密文,并不知道消息真實(shí)的內(nèi)容是什么忍级,所以就需要解密這個(gè)密文C帆谍。因?yàn)槭怯脤?duì)稱密碼算法用秘鑰A加密的。所有解密也是用秘鑰A解密轴咱。
總的來(lái)說(shuō)也就是解密加密用的同一個(gè)秘鑰汛蝙。
公鑰密碼體制
公鑰密碼學(xué)中有兩個(gè)秘鑰,一個(gè)是公開(kāi)的秘鑰(所有人都可以去得到它)朴肺,稱為公共秘鑰窖剑,也叫公開(kāi)鑰,但是普遍都叫做公鑰戈稿,還有一個(gè)是私密秘鑰西土,也叫做私鑰;只用用戶自己知道鞍盗,并且用戶也應(yīng)該保存好自己的私鑰需了。比如現(xiàn)在你的darling生成了一對(duì)秘鑰分別是私鑰SK,公鑰PK般甲。
公鑰密碼學(xué)的特點(diǎn)(重要)
我們用私鑰SK加密一個(gè)明文M肋乍,則只能用公鑰PK解密。
我們用私鑰SK加密一個(gè)明文M敷存,則只能用公鑰PK解密墓造。
這有什么用呢?首先我們舉這樣一個(gè)場(chǎng)景锚烦。
天天埋頭擼碼掙錢的你感動(dòng)了你的darling觅闽,一天你darling想告訴全世界人她愛(ài)你,于是她在5月22日這天用她的私鑰SK加密明文“2501314”挽牢,然后把密文在網(wǎng)上廣播谱煤,別人看到這個(gè)消息后找到你darling的公鑰PK然后解密后就知道了這個(gè)消息(因?yàn)楣€是公開(kāi)的所以別人是可以得到的,具體是怎么得到的大家不用糾結(jié))禽拔。同時(shí)刘离,用你darling的私鑰SK加密的消息室叉,只有用你darling的公鑰PK才能解密,同時(shí)說(shuō)明了這個(gè)消息肯定是你darling發(fā)出的硫惕,這樣也就起到了簽名的作用茧痕,也就是說(shuō)你darling在這個(gè)消息上簽名了,這是它發(fā)出來(lái)的恼除。所有公鑰密碼學(xué)可以用到數(shù)字簽名中踪旷。
在前面的分組密碼體制中講到這樣的一個(gè)例子,你想給你darling發(fā)“i love my darling”但是你不想別人知道豁辉,所以你就加密令野,這里講下怎么用公鑰密碼學(xué)來(lái)加密。你用你darling的公鑰來(lái)加密這個(gè)消息徽级,然后發(fā)出給你darling气破,然后你darling可以用她的私鑰解密這個(gè)消息,如果這個(gè)消息被人截獲了也不用怕餐抢,只要他沒(méi)有你darling的私鑰肯定也是不能解密的现使,如果那個(gè)人是你darling的小情人這種情況也就另當(dāng)別論了。所以公鑰密碼學(xué)還可以用到加密消息中旷痕。
比特幣中的公鑰密碼學(xué)
比特幣中是用的是橢圓曲線密碼學(xué)(ECC)的secp256k1算法碳锈。
密碼學(xué)是基于數(shù)學(xué)難題的,比如著名的RSA算法欺抗,就是基于大整數(shù)因數(shù)分解難題售碳。
而橢圓密碼體制則是基于離散對(duì)數(shù)難題的。
這些數(shù)學(xué)原理我自然是講不清楚的佩迟,最多也是理解理解团滥。
下面我找了一些資料:
https://www.zhihu.com/question/22399196 #幽默的語(yǔ)言
http://www.8btc.com/btc_ecc_dsa_a
http://kakaroto.homelinux.net/2012/01/how-the-ecdsa-algorithm-works/
http://www.freebuf.com/articles/database/155912.html
http://www.freebuf.com/articles/database/165851.html
<u>下面我截取了很多我們教材上講解的橢圓曲線,可以這些資料都看一些报强,實(shí)在不懂請(qǐng)教一下大佬好了</u>
推薦一下這是楊波老師出的第四版《現(xiàn)代密碼學(xué)》清華大學(xué)出版社