密碼學(xué)原理

比特幣被稱作是加密貨幣,但實(shí)際上加密貨幣是不加密的,區(qū)塊鏈上所有的交易內(nèi)容都是公開(kāi)的,包括賬戶的地址、轉(zhuǎn)賬的金額等等。比特幣中主要用到密碼學(xué)中的兩個(gè)內(nèi)容:哈希簽名。

哈希

密碼中的哈希函數(shù)被稱作:cryptographic hash function,它有兩個(gè)重要的性質(zhì):collision resistance和 hiding 。

collision resistance

其中的collision是指哈希碰撞,什么是哈希碰撞?

若有哈希函數(shù)H(),假設(shè)兩個(gè)輸入 x , y 且 x 不等于 y ,使得H(x) = H(y),則稱為哈希碰撞。

collision resistance 的解釋是:Collision resistance is a property of cryptographic hash functions: a hash function H is collision resistant?if it is hard to find two inputs that hash to the same output; that is, two inputs a and b such that H(a) = H(b), and a ≠ b.

it is hard to find?意思是很難找到兩個(gè)不同的輸入使得二者的哈希值相等,也就是說(shuō)想要人為地制造哈希碰撞是非常難的,但哈希碰撞是客觀存在的,例如當(dāng)我們使用哈希表的時(shí)候,不同的輸入可能會(huì)被映射到哈希表中的同一個(gè)位置,因?yàn)檩斎肟臻g大于輸出空間。

那么collision resistance這個(gè)性質(zhì)有什么用呢?

它可以用來(lái)對(duì)一個(gè)massage求digest,例如有一個(gè)massage ?m ,取它的哈希值H( m )作為digest 用來(lái)檢測(cè)m是否被篡改,因?yàn)楫?dāng)m被篡改時(shí),它所對(duì)應(yīng)的哈希值H(m)就會(huì)發(fā)生變化,而根據(jù)collision resistance性質(zhì)可以知道,很難找到另一個(gè)輸入m ' ?使得H( m ' ) =H( m ),因此想要篡改內(nèi)容而不被檢測(cè)出來(lái)幾乎是不可能的。

舉個(gè)例子:你想要把一個(gè)文件存到云存儲(chǔ)服務(wù)上,當(dāng)你某一天要用需要下載回來(lái)的時(shí)候,如何確定下載的文件就是當(dāng)初保存的那份文件呢?這時(shí)就可以用到哈希函數(shù)的collision resistance性質(zhì),在上傳的時(shí)候用文件的內(nèi)容作為輸入算一個(gè)哈希值出來(lái),保存到本地,將來(lái)取文件的時(shí)候再算一個(gè)哈希值出來(lái),與原先本地的哈希值進(jìn)行比較,如果一致則說(shuō)明文件沒(méi)有被篡改。

但需要注意的是,哈希函數(shù)的 collision resistance 這一性質(zhì)從理論上是無(wú)法證明出來(lái)的,它是由實(shí)踐經(jīng)驗(yàn)得出的,而有的哈希函數(shù)則可以人為地制造哈希碰撞,很著名的一個(gè)例子就是MD5,它之前是一個(gè)很流行的哈希函數(shù),當(dāng)初人們認(rèn)為它很安全,但是現(xiàn)在已經(jīng)能夠人為地制造哈希碰撞了。

hiding

這一性質(zhì)是指哈希函數(shù)的計(jì)算過(guò)程是單向的、不可逆的。

意思是給定一個(gè)輸入 x ,可以算出它的哈希值H(x),但無(wú)法根據(jù)哈希值H(x)反推出原來(lái)的輸入x ,也就是說(shuō),哈希值H(x)沒(méi)有泄露有關(guān)輸入 x 的任何信息。

但是仔細(xì)一想,真的就沒(méi)有辦法通過(guò)H(x)反推出 x 嗎?其實(shí)是可以通過(guò)蠻力求解的方法得出輸入 x 的,只要把輸入所有可能的取值遍歷一遍,將每一個(gè)取值的結(jié)果與目標(biāo)H(x)作比較,直到找到相同的結(jié)果就可以知道對(duì)應(yīng)的輸入了。

因此,hiding這一性質(zhì)成立的前提是輸入空間要足夠的大,使得上述這種蠻力求解的方式行不通,而且輸入的分布要比較均勻,各種取值的可能性是差不多的。這一點(diǎn)很好理解,因?yàn)榧词馆斎肟臻g足夠大,但是如果常用的輸入都比較集中在某一些值,那么也是可以通過(guò)蠻力破解的。

hiding這一性質(zhì)有什么用呢?

hiding可以和collision resistance 這一性質(zhì)結(jié)合在一起用來(lái)實(shí)現(xiàn) digital commitment,有時(shí)候也把它稱作 digital equivalent of a sealed envelope,直譯過(guò)來(lái)可以理解為 數(shù)字加密信封。

舉個(gè)例子來(lái)說(shuō)明下sealed envelope(加密信封)在現(xiàn)實(shí)生活中的意義:比方說(shuō)有一個(gè)人,他想要預(yù)測(cè)第二天的股票是否會(huì)漲,那么如何來(lái)證明他的預(yù)測(cè)是否是準(zhǔn)確的呢?

一種方法是,他提前一天對(duì)外公布第二天的某某股票會(huì)漲,等到第二天的結(jié)果出來(lái)后再判斷他的預(yù)言是否準(zhǔn)確,那么這種方法是否存在問(wèn)題呢?如果這個(gè)人是股票界的權(quán)威人士,那么他的預(yù)測(cè)勢(shì)必會(huì)直接影響到第二天股票是否會(huì)漲,可能使得原本不會(huì)漲的股票反倒?jié)q了。

這說(shuō)明預(yù)測(cè)結(jié)果不能公開(kāi),那如果預(yù)測(cè)結(jié)果不公開(kāi),等到第二天結(jié)果出來(lái)后再公開(kāi),那又如何保證預(yù)測(cè)的結(jié)果是否被篡改過(guò)呢?這就需要用到sealed envelope,將預(yù)測(cè)結(jié)果寫(xiě)下來(lái),放入一個(gè)信封,把信封交由第三方公證機(jī)構(gòu)保管,等到第二天結(jié)果出來(lái)后再驗(yàn)證預(yù)測(cè)是否準(zhǔn)確。這就是現(xiàn)實(shí)生活中sealed envelope的用處。

那在電子世界中,如何實(shí)現(xiàn)一個(gè)digital sealed envelope呢?

將預(yù)測(cè)結(jié)果作為輸入 x 算出一個(gè)哈希值,將這個(gè)哈希值公布出去,由于hiding這個(gè)性質(zhì),只知道公布的哈希值是無(wú)法反推出輸入,也就是預(yù)測(cè)結(jié)果;而又由于collision resistance性質(zhì),使得輸入無(wú)法被篡改,因?yàn)檩斎胍坏┐鄹?,得出的哈希值就?huì)和當(dāng)初公布的不一樣。這就起到了digital sealed envelope的功能。

但在實(shí)際操作中有一些細(xì)節(jié)需要注意,因?yàn)閔iding性質(zhì)的前提是輸入空間要足夠大,分布要比較均勻,而在上述股票預(yù)測(cè)的例子中,它的輸入空間卻不是足夠大,因?yàn)楣善钡闹?shù)是有限的。常用的解決方法是:在輸入后面拼接一個(gè)隨機(jī)數(shù)作為整體取哈希,來(lái)保證拼接之后的輸入足夠隨機(jī),分布足夠均勻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容