區(qū)塊鏈技術(shù)為什么不能脫離密碼學(xué)而單獨(dú)存在
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
關(guān)于中央第十八次集體學(xué)習(xí)時(shí)強(qiáng)調(diào)區(qū)塊鏈技術(shù)的報(bào)道,行業(yè)媒體們已經(jīng)給予了充分的重視。然而,人們卻對(duì)兩天之后的另一條重要報(bào)道,沒(méi)有表現(xiàn)出應(yīng)有的重視。
這條報(bào)道是,10月26日,十三屆全國(guó)人大常委會(huì)第十四次會(huì)議26日下午表決通過(guò)《中華人民共和國(guó)密碼法》,將自2020年1月1日起施行。
從中央開(kāi)展對(duì)區(qū)塊鏈技術(shù)的學(xué)習(xí),在戰(zhàn)略層面對(duì)區(qū)塊鏈技術(shù)予以承認(rèn),到正式出臺(tái)的密碼法,偶然中也蘊(yùn)含著必然。
區(qū)塊鏈技術(shù)分布式、防篡改、可溯源的好處已經(jīng)人盡皆知,但所謂萬(wàn)物相生,事實(shí)證明,區(qū)塊鏈技術(shù)難以脫離密碼學(xué)而單獨(dú)存在,原因有二:
第一,與傳統(tǒng)技術(shù)思路不同,區(qū)塊鏈技術(shù)大大削弱了單一中心的控制力,各參與方的數(shù)據(jù)安全性離不開(kāi)密碼學(xué)的保護(hù)。比特幣誕生已超過(guò)十年,在恰當(dāng)?shù)拿艽a學(xué)的保障下,去中心化的比特幣始終保持著較為平穩(wěn)安全的運(yùn)行。
第二,在實(shí)際應(yīng)用中,許多參與節(jié)點(diǎn)不希望自己的數(shù)據(jù)被完全公開(kāi)出來(lái),因此不愿意數(shù)據(jù)上鏈,這顯然限制了區(qū)塊鏈技術(shù)的應(yīng)用落地。如何維護(hù)鏈上數(shù)據(jù)的隱私性成為區(qū)塊鏈應(yīng)用的一大難題,密碼學(xué)則大大有利于為這一點(diǎn)提供補(bǔ)充。
談到區(qū)塊鏈,就繞不開(kāi)比特幣,更加離不開(kāi)密碼學(xué)。本文旨在探討以橢圓加密算法(以下簡(jiǎn)稱ECC)為代表的密碼學(xué)的由來(lái)、價(jià)值、現(xiàn)狀,以及在未來(lái)量子計(jì)算機(jī)時(shí)代中密碼學(xué)的前景。
從RSA到ECC
區(qū)塊鏈最著名的應(yīng)用莫過(guò)于比特幣,而作為比特幣的保鏢,基于ECC的橢圓曲線數(shù)字簽名算法(以下簡(jiǎn)稱ECDSA)對(duì)區(qū)塊鏈的價(jià)值不可謂不顯著。可以說(shuō),ECC與區(qū)塊鏈可謂休戚相關(guān)。在談ECC之前,我們先介紹一下RSA算法。
密碼本是二戰(zhàn)影視劇有一個(gè)重要的題材。對(duì)交戰(zhàn)國(guó)來(lái)說(shuō),國(guó)之重器不是大炮坦克,也不是金銀鈔票,甚至不是航母飛機(jī),而是那個(gè)不太起眼的密碼本。
1942年,太平洋海戰(zhàn)重要的轉(zhuǎn)折點(diǎn)——中途島海戰(zhàn)中,美軍之所以取得勝利,一個(gè)重要的因素就是美軍獲得了日本的加密文件,并破譯出日本即將攻擊中途島的重要情報(bào)。
1943年,日本聯(lián)合艦隊(duì)司令,海軍大將山本五十六在視察部隊(duì)時(shí),座機(jī)被美軍擊落而斃命,直接原因就是通訊密碼被美軍破譯。
二戰(zhàn)前后,諸如此類的事例不勝枚舉。即便到了冷戰(zhàn)時(shí)期,破譯密電也是美蘇情報(bào)部門的一項(xiàng)主要工作。到了1977年,Rivest、Shamir和Adleman三位教授用名字的首字母命名一種新算法:RSA。不同于以往的對(duì)稱加密需要厚厚的密碼本,RSA算法屬于非對(duì)稱加密。所謂非對(duì)稱加密,是指將秘鑰分為公鑰和私鑰,公鑰和私鑰必須成對(duì)出現(xiàn),不能單獨(dú)生成。公鑰任何人都可以知道,用以加密;私鑰只有接受信息的人才能知道,用以解密。
RSA的誕生可謂歷史性突破,堪稱古典與現(xiàn)代密碼學(xué)的分水嶺。只要RSA的質(zhì)數(shù)足夠大,解密將會(huì)耗費(fèi)巨大的算力和時(shí)間,短期內(nèi)難以破解。
但所謂福禍相依,為了追求安全性,RSA需要非常大的質(zhì)數(shù)作為基礎(chǔ),拉長(zhǎng)秘鑰會(huì)大大增加加密成本,降低速度。更要命的是,RSA算法在應(yīng)對(duì)量子計(jì)算機(jī)的威脅時(shí)頗為力不從心。
此時(shí),ECC應(yīng)運(yùn)而生。ECC于1985年由Koblitz和Miller兩位教授發(fā)明。與RSA算法一樣,ECC同樣屬于非對(duì)稱加密,但ECC在使用中的便捷性和安全性大大強(qiáng)過(guò)RSA。
什么是ECC呢?可能大家對(duì)這一點(diǎn)很感興趣。
我們定義平行線相交于無(wú)窮遠(yuǎn)點(diǎn)P∞,使平面上所有直線都統(tǒng)一為有唯一的交點(diǎn),而區(qū)別于無(wú)窮遠(yuǎn)點(diǎn)的原來(lái)平面上的點(diǎn)為平常點(diǎn)。通過(guò)無(wú)窮遠(yuǎn)點(diǎn)和平常點(diǎn)我們可以引入射影平面的概念。
射影平面:平面上全體無(wú)窮遠(yuǎn)點(diǎn)與全體平常點(diǎn)構(gòu)成射影平面。
而橢圓曲線,指的就是在射影平面上滿足威爾斯特拉斯方程(Weierstrass)所有點(diǎn)的集合,且曲線上所有點(diǎn)都是非奇異的。
所謂非奇異,指的是曲線上任意一點(diǎn)的偏導(dǎo)數(shù)不能同時(shí)為0。
明白了橢圓曲線的由來(lái),我們?cè)賮?lái)看橢圓曲線在密碼學(xué)上應(yīng)用的方案。首先面對(duì)的問(wèn)題就是橢圓曲線是連續(xù)的,并不適合用于加密。因此,橢圓曲線密碼學(xué)的第一要?jiǎng)?wù)就是把橢圓曲線定義在有限域上,(有限域Fp ,p為素?cái)?shù)),并提出一條適于加密的曲線:y2=x3+ax+b (modp)。
相比起在商業(yè)中被廣泛采用的RSA加密算法,ECC優(yōu)勢(shì)是可以使用更短的密鑰,來(lái)實(shí)現(xiàn)與RSA相當(dāng)或更高級(jí)別的安全。
通過(guò)下圖我們清楚的發(fā)現(xiàn),160位ECC加密安全性相當(dāng)于1024位RSA加密,而210位ECC加密安全性甚至相當(dāng)于2048位RSA加密。ECC中256位數(shù)的密鑰與RSA算法中3072位數(shù)密鑰所提供的安全強(qiáng)度相同。
因此,ECC具備計(jì)算量更小,處理速度更快,占據(jù)存儲(chǔ)空間更小的優(yōu)點(diǎn),在資源、算力有限的前提下,ECC比RSA具備顯著的優(yōu)勢(shì)。這些優(yōu)勢(shì)已經(jīng)使得ECC逐漸完成了對(duì)RSA的取代,成為了新一代的通用公鑰加密算法。
如今,ECC早已無(wú)處不在:我們的第二代身份證都基于ECC,美國(guó)政府部門也用ECC加密內(nèi)部通信,F(xiàn)ireFox和Chrome瀏覽器、蘋果的iMessage服務(wù)都使用ECC。
那么,ECC、ECDSA等密碼技術(shù)在應(yīng)用過(guò)程中有哪些值得關(guān)注的地方呢?另外,近期火熱的“量子霸權(quán)”講的又是什么,它會(huì)對(duì)密碼學(xué)產(chǎn)生什么影響呢?
在后續(xù)的系列文章中,我們將會(huì)繼續(xù)對(duì)其展開(kāi)討論。
推薦閱讀:RSA的基本原理
我在此前的文章寫道,密碼學(xué)問(wèn)題,本質(zhì)上是數(shù)學(xué)問(wèn)題。RSA算法自然也不例外,其原理并不復(fù)雜,幾個(gè)數(shù)字即可講明白。
我們先引入三個(gè)中學(xué)數(shù)學(xué)概念,質(zhì)數(shù),互質(zhì)、取模。
質(zhì)數(shù):指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。比如,2、3、5、7…
互質(zhì):是指公約數(shù)只有1的兩個(gè)數(shù)。比如,2和3,3和5,4和5均互質(zhì)。
取模:指求余運(yùn)算,運(yùn)算符是mod,比如4 ÷ 3 = 1余1,所以,4mod 3 = 1。
在明白上述概念后,我們來(lái)看一組簡(jiǎn)單的RSA加密方案:
1、找到一組互質(zhì)數(shù),P和Q,相乘后得到N
2、將P和Q分別減去1,再次相乘,得到M
3、確定加密公鑰E,使得E與M互質(zhì)
4、確定解密私鑰D,使得D乘以E除以M余1,即(D × E) mod M = 1
比如,挑兩個(gè)互質(zhì)數(shù),P=5和Q=8,N=P*Q=40,M=(P-1)*(Q-1)=28
隨機(jī)選取公鑰E=5,則私鑰D=45.
從這里,我們可以設(shè)計(jì)出一對(duì)公鑰私鑰,加密公鑰KU={E,N}={5,40},解密私鑰KR={D,N}={45,40}。
1、在加密過(guò)程中,需要將加密數(shù)字自乘(E-1)次,當(dāng)自乘結(jié)果超過(guò)N時(shí),需要將結(jié)果取模后再乘,最后得到安全密文。
2、在解密過(guò)程中,用密文自乘(D-1)次,同樣,當(dāng)自乘結(jié)果超過(guò)N時(shí),需要將結(jié)果取模后再乘,最后得到加密數(shù)字。
感興趣的朋友可以通過(guò)我們給出的加密方案來(lái)對(duì)一些簡(jiǎn)單的數(shù)字進(jìn)行加密,由于秘鑰數(shù)字P和Q很小,用紙筆或者簡(jiǎn)易的計(jì)算器就能夠計(jì)算出來(lái)。