量子計(jì)算會(huì)終結(jié)區(qū)塊鏈技術(shù)的安全基因嗎
量子計(jì)算是一種遵循量子力學(xué)規(guī)律調(diào)控量子信息單元進(jìn)行計(jì)算的新型計(jì)算模式。從計(jì)算的效率來(lái)看,由于量子力學(xué)疊加性的存在,目前某些已知的量子算法在處理問(wèn)題時(shí)速度要明顯快于傳統(tǒng)的通用計(jì)算機(jī)。
在可見(jiàn)的將來(lái),如果利用更高量子位的計(jì)算機(jī)對(duì)區(qū)塊鏈的加密算法進(jìn)行破解,那么區(qū)塊鏈一直以來(lái)的安全性優(yōu)勢(shì)是否就不復(fù)存在了呢?
網(wǎng)友:區(qū)塊鏈所基于的nonce-SHA256能在可預(yù)見(jiàn)的未來(lái)被算力暴增所攻破嗎?
區(qū)塊鏈靠著大量變換nonce值尋求一個(gè)被指定區(qū)域的hash值來(lái)保證安全以及貨幣的有價(jià)值性(需要大量算力)。但是我一直覺(jué)得區(qū)塊鏈不靠譜的原因是這只是基于現(xiàn)在計(jì)算機(jī)計(jì)算速度不夠高的情況下,如果10、20年內(nèi)量子計(jì)算機(jī)或者其他革命技術(shù)被發(fā)明,那么不就整體攻破區(qū)塊鏈體系了嗎?
陳曉東:的確區(qū)塊鏈技術(shù)大量依賴了哈希算法的計(jì)算。舉一個(gè)例子:比特幣里面通用的地址生成過(guò)程如下表所示,里面包含了多次哈希值的計(jì)算,利用了兩種哈希算法:SHA256和RIPEMD160。
換一個(gè)場(chǎng)景,共識(shí)機(jī)制POW是如何尋(挖)找(礦)那個(gè)Nonce值得呢?基本過(guò)程如下:
假如說(shuō):已知明文Text,變換一個(gè)值 Nonce, 求SHA256(Text + Nonce)的結(jié)果是小于等于某個(gè)數(shù)值N,也就是說(shuō)32Bytes或者256比特的數(shù)值里面高位至少有n個(gè)0。其查詢偽代碼(pseucode)如下:
可以說(shuō)上面其實(shí)就是一種暴力(Brute force)破解法,這是因?yàn)槟壳癝HA256沒(méi)有任何快速高效解法來(lái)反向推導(dǎo)出來(lái)。那么假如這個(gè)數(shù)值等于1,也就是說(shuō)最多有可能要嘗試2^256次數(shù)才能找到那個(gè)Nonce值。而2^256是一個(gè)天文數(shù)字,是現(xiàn)在所有超級(jí)計(jì)算機(jī)加起來(lái)計(jì)算上億年都無(wú)法完成的計(jì)算(可能是現(xiàn)在全網(wǎng)計(jì)算能力的萬(wàn)億*萬(wàn)億*萬(wàn)億倍在71430540814238958387154年完成,而太陽(yáng)在5000000000年后能源耗凈)。
但是量子計(jì)算就是更擅長(zhǎng)暴力計(jì)算的一種技術(shù)。因?yàn)槠胀ǖ挠?jì)算是以一個(gè)輸入元素為基本運(yùn)算單位來(lái)進(jìn)行一次運(yùn)算,但是量子計(jì)算是以輸入一批元素或者是元素集合作為一次運(yùn)算。假如說(shuō)一種量子計(jì)算機(jī)有n個(gè)量子位(Qubit),那么它一次計(jì)算可以完成普通計(jì)算機(jī)的2^n次計(jì)算。但是目前全世界量子計(jì)算機(jī)可以實(shí)用的最高只有20個(gè)量子比特,也就是一次計(jì)算可以完成普通計(jì)算機(jī)的2^20次或者是1048576次。如果用它來(lái)破解SHA256,其實(shí)還是屬于蚍蜉撼樹。而且在區(qū)塊鏈里面的哈希值通常是經(jīng)過(guò)2次哈希的計(jì)算,也就是說(shuō)有2^256 x 2^256 = 2^512次計(jì)算可能。如果量子計(jì)算機(jī)有一天達(dá)到256個(gè)量子比特計(jì)算能力,那么仍然需要2^256次計(jì)算才能暴力破解。如果量子計(jì)算機(jī)有一天達(dá)到了512個(gè)量子比特計(jì)算能力,那么為啥不可以做三次或者以上的連續(xù)SHA256哈希呢?這就像是矛和盾的關(guān)系。
同樣的,我們來(lái)看一下密碼學(xué)里常用的像RSA/ECC/ECDSA之類的非對(duì)稱加密算法, 也就是說(shuō)由私鑰可以推導(dǎo)出公鑰,但是反之就不行。這個(gè)意思就是沒(méi)有快捷路徑由公鑰去算出私鑰。而私鑰通常由1024比特位,甚至很多系統(tǒng)或者應(yīng)用已經(jīng)改成默認(rèn)支持2048比特的私鑰生成和使用率。然而目前比特幣這樣的公鏈采用的是256比特位長(zhǎng)度的私鑰,也就是說(shuō)暴力破解私鑰需要計(jì)算接近2^256次。如果覺(jué)得因?yàn)榱孔佑?jì)算機(jī)出現(xiàn),這個(gè)計(jì)算次數(shù)不夠大了,那么很簡(jiǎn)單,我們可以加大私鑰的位數(shù),比如說(shuō)改成2048比特位,也就是需要大約2^2048次計(jì)算來(lái)暴力破解,那么現(xiàn)有或者未來(lái)很長(zhǎng)一段時(shí)間里面人類能發(fā)明的量子計(jì)算機(jī)都是無(wú)法破解的。而且可以持續(xù)水漲船高,來(lái)保持這種優(yōu)勢(shì)的。另外一種和哈希組合類似,我們也可以連續(xù)對(duì)一個(gè)明文組合加密,里面加上一定的Salt,那么也同樣相當(dāng)于增強(qiáng)了暴力破解所需的嘗試比特位數(shù)。除非是有人突然間發(fā)明了更高量子位的計(jì)算機(jī)而加密算法采用的比特位沒(méi)有提升,那么這種突然產(chǎn)生的優(yōu)勢(shì)可以讓這個(gè)人獲得壓倒性的優(yōu)勢(shì)而破解各種機(jī)密。不過(guò)這種可能性目前看來(lái)是小之又小的,大可不必杞人憂天。
另外再試想一下,如果我們改變哈希算法,利用量子加密技術(shù),以彼之盾,防彼之矛呢?是不是這個(gè)問(wèn)題就更加迎刃而解了。所以我們大家共同來(lái)拭目而待吧。