前言
這篇文章將會(huì)講解比特幣的加密原理。比特幣之所以這么安全,就是因?yàn)樗募用軝C(jī)制。
1.對(duì)稱加密和非對(duì)稱加密
-
對(duì)稱加密
以前加密用的都是對(duì)稱加密裂明,就是用相同的密碼對(duì)原文進(jìn)行加密和解密。常見(jiàn)的有AES太援、DES等闽晦,優(yōu)點(diǎn)是效率高。但由于加密方和解密方都需要秘鑰提岔,因此秘鑰在傳送過(guò)程中容易泄露出去仙蛉。 -
非對(duì)稱加密
后來(lái)科學(xué)家發(fā)明了非對(duì)稱加密。常見(jiàn)的有RSA碱蒙、橢圓曲線等荠瘪。非對(duì)稱加密有兩把秘鑰,分為公鑰個(gè)私鑰赛惩。私鑰是隨機(jī)生成的哀墓,而公鑰是私鑰推導(dǎo)出來(lái)的。公鑰能不能推出私鑰呢坊秸?以目前的計(jì)算機(jī)算力麸祷,很難澎怒。非對(duì)稱加密是用公鑰進(jìn)行加密褒搔,私鑰進(jìn)行解密,公鑰可以暴露出去喷面。具體就是加密方用解密方的公鑰進(jìn)行加密星瘾,解密方用自己的私鑰進(jìn)行解密。因?yàn)檎麄€(gè)過(guò)程不需要傳遞私鑰惧辈,只需要將公鑰暴露出去琳状,而公鑰不能解密,因此就解決了秘鑰傳輸不安全問(wèn)題盒齿。- 缺點(diǎn):非對(duì)稱加密能保證內(nèi)容不會(huì)泄露出去念逞,但不能保證內(nèi)容不被篡改。另外加密效率比較低边翁。
舉個(gè)例子:A給B發(fā)了一條消息被C截獲了翎承,C沒(méi)有私鑰,雖然不能看到內(nèi)容符匾,但他可以將內(nèi)容修改成其他內(nèi)容叨咖,然后再用B的公鑰進(jìn)行加密(因?yàn)楣€是公開(kāi)的)。B收到后依然可以用私鑰進(jìn)行解密,但其實(shí)B無(wú)發(fā)確認(rèn)內(nèi)容是否被別人篡改甸各。
2.哈希
哈希又稱為散列垛贤,簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。
特性
- 不可逆性趣倾。哈希具有單向性聘惦,幾乎無(wú)法根據(jù)哈希運(yùn)行的結(jié)果到推出原文。
- 無(wú)碰撞性儒恋。幾乎不可能找到一個(gè)y值部凑,使得y的哈希值等于x的哈希值。
3.數(shù)字簽名
那么怎么保證原文沒(méi)用被第三方篡改呢碧浊?答案就是數(shù)字簽名涂邀。
這個(gè)類似于現(xiàn)實(shí)中的簽名,就是在信息后面加上另一段內(nèi)容箱锐,作為發(fā)送者的證明并證明信息沒(méi)有被篡改比勉。
如上圖所示,
- 首先驹止,發(fā)送方用接收方的公鑰對(duì)信息進(jìn)行加密浩聋。
- 發(fā)送方對(duì)原信息進(jìn)行哈希運(yùn)算得到一個(gè)結(jié)果(稱為摘要),再用自己的私鑰對(duì)摘要進(jìn)行加密得到一個(gè)簽名(這里用私鑰加密得到的簽名臊恋,可以用公鑰進(jìn)行解密衣洁,這里和之前的公鑰加密私鑰解密用的不是同一套算法)。
- 把密文和簽名一起發(fā)送給接收方抖仅。
- 接收方首先用自己的私鑰對(duì)密文進(jìn)行解密得到原文坊夫,再對(duì)原文進(jìn)行哈希運(yùn)算得到摘要。
- 接收方用發(fā)送方的公鑰對(duì)發(fā)送方的簽名進(jìn)行解密得到發(fā)送方簽名前的摘要撤卢。
- 接收方把兩次得到的摘要進(jìn)行比對(duì)环凿,如果是一樣的,則證明原文沒(méi)有被篡改放吩,并且確實(shí)是發(fā)送方發(fā)送的智听。
分析:假設(shè)C截取信息,他想篡改內(nèi)容渡紫。首先簽名無(wú)法篡改到推,因?yàn)樗麤](méi)有發(fā)送方的私鑰,如果用自己的私鑰進(jìn)行簽名惕澎,那么接收方用發(fā)送方的公鑰解密時(shí)是解不開(kāi)的莉测。所以他只能篡改密文。但接收方解出密文并進(jìn)行哈希運(yùn)算后得到的摘要必然和原來(lái)的摘要不同集灌,而用發(fā)送方的公鑰解密出簽名得到的摘要肯定不會(huì)被篡改悔雹,所以兩次摘要就會(huì)出現(xiàn)不一致复哆,就能確認(rèn)內(nèi)容被篡改了。
小結(jié)
非對(duì)稱加密和數(shù)字簽名這一塊稍微有點(diǎn)繞腌零,不過(guò)你看懂了之后一定會(huì)說(shuō)一句:中本聰666L菡摇!益涧!
To be continued...