原文地址
想像這樣一個(gè)場(chǎng)景,一堆情侶,每天早上alice站在東邊的山頭,bob找在西邊的山頭履恩,隔著大山用擴(kuò)音喇叭說(shuō)著羞羞臉的情話。這時(shí)候兩座山之間的山谷中總會(huì)坐著一個(gè)吃瓜群眾philippica,聽(tīng)著兩個(gè)人的小秘密呢蔫。alice和bob當(dāng)然不喜歡被他聽(tīng)到他們的情話切心,于是機(jī)智的alice就大聲的說(shuō):"bob,以后每次說(shuō)話我們都把說(shuō)的字母按著字母表順序往后數(shù)8個(gè)字母,也就是用凱撒密碼移動(dòng)8位片吊,這樣philippica就不知道我們?cè)谡f(shuō)什么了绽昏!"
接著bob想說(shuō):“I love u”,他按著字母表abcd的順序把字母移動(dòng)了8位,變成了q twdm c定鸟,然后他大聲地喊出了這些字母而涉,只見(jiàn)alice拿出小本將凱撒密碼解開(kāi)后熱淚迎眶,一對(duì)情侶淚眼朦朧联予,在看山谷里的吃瓜八卦者philippica,它也聽(tīng)到了alice說(shuō)凱撒密碼移動(dòng)8位啼县,于是他放下西瓜,也拿出了筆記本算了一下沸久,然后露出了意味深長(zhǎng)的笑容季眷,接著繼續(xù)吃瓜。
“這根本不起任何作用卷胯,我們說(shuō)的任何加密方式philippica也會(huì)聽(tīng)到子刮,他只要用聽(tīng)到的密鑰解開(kāi)我們的密碼,那我們做啥都是徒勞的窑睁⊥ο浚”bob絕望的說(shuō)。
alice說(shuō):“沒(méi)關(guān)系担钮,我們有rsa橱赠,現(xiàn)在我告訴你一組公鑰(3233, 17) 你現(xiàn)在腦子里想一個(gè)0~25的數(shù)字作為凱撒密碼的移動(dòng)位數(shù),假設(shè)這個(gè)數(shù)字是m箫津,那么你現(xiàn)在把m^17 Mod 3233這個(gè)結(jié)果告訴我狭姨≡桌玻”
bob覺(jué)得現(xiàn)在的alice很6,所以他選擇移動(dòng)位數(shù)為6,他會(huì)快速冪的方法,所以很快就把6^17 mod 3233的結(jié)果算了出來(lái)結(jié)果是824,他大聲喊出了這個(gè)數(shù)字饼拍。
alice聽(tīng)到后很開(kāi)心赡模,她這里有一組私鑰:(3233,2753),她用類(lèi)似的方法計(jì)算824^2753 mod 3233,結(jié)果發(fā)現(xiàn)是6师抄!于是她很開(kāi)心的和bob用密鑰是6的凱撒說(shuō)情話了漓柑。
再看pilippica這邊,他也知道rsa密碼的流程,也聽(tīng)到了兩人報(bào)的數(shù)字叨吮,他知道Bob想了一個(gè)數(shù)字m欺缘,并且m^17 mod 3233 = 824,可他沒(méi)有高效的方法去解這個(gè)方程挤安,只能看著alice和Bob媚眼傳情,共訴情話而自己在一邊郁悶的吃瓜了丧鸯。
因此rsa的本質(zhì)就是找這么三個(gè)數(shù)蛤铜,(e, d, n)使得對(duì)于任意的數(shù)字(在這里是指明文)m,(me)d mod n = m,接著把(e, n)公開(kāi)作為公鑰丛肢,自己留著d围肥,別人把要加密的數(shù)自乘e次后mod n,告訴自己蜂怎,自己只要把發(fā)來(lái)的結(jié)果再自乘d次mod n就是原來(lái)的明文了穆刻。
一、RSA的計(jì)算過(guò)程
上述過(guò)程中杠步,出現(xiàn)了公鑰(3233,17)和私鑰(3233,2753)氢伟,這兩組數(shù)字是怎么找出來(lái)的呢?參考RSA算法原理(二)
首字母縮寫(xiě)說(shuō)明:E是加密(Encryption)D是解密(Decryption)N是數(shù)字(Number)幽歼。
1.隨機(jī)選擇兩個(gè)不相等的質(zhì)數(shù)p和q朵锣。
alice選擇了61和53。(實(shí)際應(yīng)用中甸私,這兩個(gè)質(zhì)數(shù)越大诚些,就越難破解。)
2.計(jì)算p和q的乘積n皇型。
n = 61×53 = 3233
n的長(zhǎng)度就是密鑰長(zhǎng)度诬烹。3233寫(xiě)成二進(jìn)制是110010100001,一共有12位弃鸦,所以這個(gè)密鑰就是12位绞吁。實(shí)際應(yīng)用中,RSA密鑰一般是1024位寡键,重要場(chǎng)合則為2048位掀泳。
3.計(jì)算n的歐拉函數(shù)φ(n)雪隧。稱作L
根據(jù)公式φ(n) = (p-1)(q-1)
alice算出φ(3233)等于60×52,即3120员舵。
4.隨機(jī)選擇一個(gè)整數(shù)e脑沿,也就是公鑰當(dāng)中用來(lái)加密的那個(gè)數(shù)字
條件是1< e < φ(n),且e與φ(n) 互質(zhì)马僻。
alice就在1到3120之間庄拇,隨機(jī)選擇了17。(實(shí)際應(yīng)用中韭邓,常常選擇65537措近。)
5.計(jì)算e對(duì)于φ(n)的模反元素d。也就是密鑰當(dāng)中用來(lái)解密的那個(gè)數(shù)字
所謂"模反元素"就是指有一個(gè)整數(shù)d女淑,可以使得ed被φ(n)除的余數(shù)為1瞭郑。ed ≡ 1 (mod φ(n))
alice找到了2753,即17*2753 mode 3120 = 1
6.將n和e封裝成公鑰鸭你,n和d封裝成私鑰屈张。
在alice的例子中,n=3233袱巨,e=17阁谆,d=2753,所以公鑰就是 (3233,17)愉老,私鑰就是(3233, 2753)场绿。
上述故事中,blob為了偷偷地傳輸移動(dòng)位數(shù)6嫉入,使用了公鑰做加密焰盗,即6^17 mode 3233 = 824。alice收到824之后劝贸,進(jìn)行解密姨谷,即824^2753 mod 3233 = 6。也就是說(shuō)映九,alice成功收到了blob使用的移動(dòng)位數(shù)梦湘。
再來(lái)復(fù)習(xí)一下整個(gè)流程:
p=17,q=19
n = 1719 = 323
L = 1618 = 144
E = 5(E需要滿足以下兩個(gè)條件:1<E<144,E和144互質(zhì))
D = 29(D要滿足兩個(gè)條件,1<D<144,D mode 144 = 1)
假設(shè)某個(gè)需要傳遞123件甥,則加密后:123^5 mode 323 = 225
接收者收到225后捌议,進(jìn)行解密,225^ 29 mode 323 = 123
二引有、RSA的安全性和缺點(diǎn)
回顧上面的密鑰生成步驟瓣颅,一共出現(xiàn)六個(gè)數(shù)字:
p
q
n
L即φ(n)
e
d
這六個(gè)數(shù)字之中,公鑰用到了兩個(gè)(n和e)譬正,其余四個(gè)數(shù)字都是不公開(kāi)的宫补。其中最關(guān)鍵的是d檬姥,因?yàn)閚和d組成了私鑰,一旦d泄漏粉怕,就等于私鑰泄漏健民。那么,有無(wú)可能在已知n和e的情況下贫贝,推導(dǎo)出d秉犹?
(1)ed≡1 (mod φ(n))。只有知道e和φ(n)稚晚,才能算出d崇堵。
(2)φ(n)=(p-1)(q-1)。只有知道p和q客燕,才能算出φ(n)沸手。
(3)n=pq沼死。只有將n因數(shù)分解轩性,才能算出p和q闰渔。
結(jié)論:如果n可以被因數(shù)分解,d就可以算出还绘,也就意味著私鑰被破解。
可是栖袋,大整數(shù)的因數(shù)分解拍顷,是一件非常困難的事情。目前塘幅,除了暴力破解昔案,還沒(méi)有發(fā)現(xiàn)別的有效方法。維基百科這樣寫(xiě)道:"對(duì)極大整數(shù)做因數(shù)分解的難度決定了RSA算法的可靠性电媳。換言之踏揣,對(duì)一極大整數(shù)做因數(shù)分解愈困難,RSA算法愈可靠匾乓。假如有人找到一種快速因數(shù)分解的算法捞稿,那么RSA的可靠性就會(huì)極度下降。但找到這樣的算法的可能性是非常小的拼缝。今天只有短的RSA密鑰才可能被暴力破解娱局。到2008年為止,世界上還沒(méi)有任何可靠的攻擊RSA算法的方式咧七。只要密鑰長(zhǎng)度足夠長(zhǎng)衰齐,用RSA加密的信息實(shí)際上是不能被解破的。"
然而继阻,雖然RSA的安全性依賴于大數(shù)的因子分解耻涛,但并沒(méi)有從理論上證明破譯RSA的難度與大數(shù)分解難度等價(jià)废酷。即RSA的重大缺陷是無(wú)法從理論上把握它的保密性能如何。此外抹缕,RSA的缺點(diǎn)還有:
A)產(chǎn)生密鑰很麻煩澈蟆,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密歉嗓。
B)分組長(zhǎng)度太大丰介,為保證安全性,n 至少也要 600bits以上鉴分,使運(yùn)算代價(jià)很高哮幢,尤其是速度較慢,較對(duì)稱密碼算法慢幾個(gè)數(shù)量級(jí)志珍;且隨著大數(shù)分解技術(shù)的發(fā)展橙垢,這個(gè)長(zhǎng)度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化伦糯。因此柜某,使用RSA只能加密少量數(shù)據(jù),大量的數(shù)據(jù)加密還要靠對(duì)稱密碼算法敛纲。
三喂击、RSA的由來(lái)(數(shù)學(xué)證明過(guò)程參考原文)
加密和解密是自古就有技術(shù)了旁壮。經(jīng)臣嗍龋看到偵探電影的橋段,勇敢又機(jī)智的主角抡谐,拿著一長(zhǎng)串毫無(wú)意義的數(shù)字苦惱裁奇,忽然靈光一閃,翻出一本厚書(shū)麦撵,將第一個(gè)數(shù)字對(duì)應(yīng)頁(yè)碼數(shù)刽肠,第二個(gè)數(shù)字對(duì)應(yīng)行數(shù),第三個(gè)數(shù)字對(duì)應(yīng)那一行的某個(gè)詞免胃。數(shù)字變成了一串非常有意義的話:
Eat the beancurd with the peanut. Taste like the ham.
這種加密方法是將原來(lái)的某種信息按照某個(gè)規(guī)律打亂五垮。某種打亂的方式就叫做密鑰(cipher code)。發(fā)出信息的人根據(jù)密鑰來(lái)給信息加密杜秸,而接收信息的人利用相同的密鑰放仗,來(lái)給信息解密。就好像一個(gè)帶鎖的盒子撬碟。發(fā)送信息的人將信息放到盒子里诞挨,用鑰匙鎖上莉撇。而接受信息的人則用相同的鑰匙打開(kāi)。加密和解密用的是同一個(gè)密鑰惶傻,這種加密稱為對(duì)稱加密(symmetric encryption)棍郎。
如果一對(duì)一的話,那么兩人需要交換一個(gè)密鑰银室。一對(duì)多的話涂佃,比如總部和多個(gè)特工的通信,依然可以使用同一套密鑰蜈敢。但這種情況下辜荠,對(duì)手偷到一個(gè)密鑰的話,就知道所有交流的信息了抓狭。二戰(zhàn)中盟軍的情報(bào)戰(zhàn)成果伯病,很多都來(lái)自于破獲這種對(duì)稱加密的密鑰。
為了更安全否过,總部需要給每個(gè)特工都設(shè)計(jì)一個(gè)不同的密鑰午笛。如果是FBI這樣龐大的機(jī)構(gòu),恐怕很難維護(hù)這么多的密鑰苗桂。在現(xiàn)代社會(huì)药磺,每個(gè)人的信用卡信息都需要加密。一一設(shè)計(jì)密鑰的話煤伟,銀行怕是要跪了与涡。
對(duì)稱加密的薄弱之處在于給了太多人的鑰匙。如果只給特工鎖持偏,而總部保有鑰匙,那就容易了氨肌。特工將信息用鎖鎖到盒子里鸿秆,誰(shuí)也打不開(kāi),除非到總部用唯一的一把鑰匙打開(kāi)怎囚。只是這樣的話卿叽,特工每次出門(mén)都要帶上許多鎖,太容易被識(shí)破身份了恳守】加ぃ總部老大想了想,干脆就把造鎖的技術(shù)公開(kāi)了催烘。特工沥阱,或者任何其它人,可以就地取材伊群,按照?qǐng)D紙?jiān)戽i考杉,但無(wú)法根據(jù)圖紙?jiān)斐鲨€匙策精。鑰匙只有總部的那一把。
上面的關(guān)鍵是鎖和鑰匙工藝不同崇棠。知道了鎖咽袜,并不能知道鑰匙。這樣枕稀,銀行可以將“造鎖”的方法公布給所有用戶询刹。每個(gè)用戶可以用鎖來(lái)加密自己的信用卡信息。即使被別人竊聽(tīng)到萎坷,也不用擔(dān)心:只有銀行才有鑰匙呢凹联!這樣一種加密算法叫做非對(duì)稱加密(asymmetric encryption)。非對(duì)稱加密的經(jīng)典算法是RSA算法食铐。它來(lái)自于數(shù)論與計(jì)算機(jī)計(jì)數(shù)的奇妙結(jié)合匕垫。
1976年,兩位美國(guó)計(jì)算機(jī)學(xué)家Whitfield Diffie 和 Martin Hellman虐呻,提出了一種嶄新構(gòu)思象泵,可以在不直接傳遞密鑰的情況下,完成解密斟叼。這被稱為"Diffie-Hellman密鑰交換算法"偶惠。這個(gè)算法啟發(fā)了其他科學(xué)家。人們認(rèn)識(shí)到朗涩,加密和解密可以使用不同的規(guī)則忽孽,只要這兩種規(guī)則之間存在某種對(duì)應(yīng)關(guān)系即可,這樣就避免了直接傳遞密鑰谢床。這種新的加密模式被稱為"非對(duì)稱加密算法"兄一。
1977年,三位數(shù)學(xué)家Rivest识腿、Shamir 和 Adleman 設(shè)計(jì)了一種算法出革,可以實(shí)現(xiàn)非對(duì)稱加密。這種算法用他們?nèi)齻€(gè)人的名字命名渡讼,叫做RSA算法骂束。從那時(shí)直到現(xiàn)在,RSA算法一直是最廣為使用的"非對(duì)稱加密算法"成箫。毫不夸張地說(shuō)展箱,只要有計(jì)算機(jī)網(wǎng)絡(luò)的地方,就有RSA算法蹬昌。
四混驰、非對(duì)稱加密RSA通俗解釋和數(shù)字簽名
1.能“撞”上的保險(xiǎn)箱(非對(duì)稱/公鑰加密體制,Asymmetric / Public Key Encryption)
數(shù)據(jù)加密解密和門(mén)鎖很像。最開(kāi)始的時(shí)候账胧,人們只想到了那種只能用鑰匙“鎖”數(shù)據(jù)的鎖竞慢。如果在自己的電腦上自己加密數(shù)據(jù),當(dāng)然可以用最開(kāi)始這種門(mén)鎖的形式啦治泥,方便快捷筹煮,簡(jiǎn)單易用有木有。
但是我們現(xiàn)在是通信時(shí)代啊居夹,雙方都想做安全的通信怎么辦呢败潦?如果也用這種方法,通信就好像互相發(fā)送密碼保險(xiǎn)箱一樣…而且雙方必須都有鑰匙才能進(jìn)行加密和解密准脂。也就是說(shuō)劫扒,兩個(gè)人都拿著保險(xiǎn)箱的鑰匙,你把數(shù)據(jù)放進(jìn)去狸膏,用鑰匙鎖上發(fā)給我沟饥。我用同樣的鑰匙把保險(xiǎn)箱打開(kāi),再把我的數(shù)據(jù)鎖進(jìn)保險(xiǎn)箱湾戳,發(fā)送給你贤旷。
這樣看起來(lái)好像沒(méi)什么問(wèn)題。但是砾脑,這里面最大的問(wèn)題是:我們兩個(gè)怎么弄到同一個(gè)保險(xiǎn)箱的同一個(gè)鑰匙呢幼驶?好像僅有的辦法就是我們兩個(gè)一起去買(mǎi)個(gè)保險(xiǎn)箱,然后一人拿一把鑰匙韧衣,以后就用這個(gè)保險(xiǎn)箱了盅藻。可是畅铭,現(xiàn)代通信社會(huì)氏淑,絕大多數(shù)情況下別說(shuō)一起去買(mǎi)保險(xiǎn)箱了,連見(jiàn)個(gè)面都難硕噩,這怎么辦凹俨小?
于是榴徐,人們想到了“撞門(mén)”的方法。我這有個(gè)可以“撞上”的保險(xiǎn)箱匀归,你那里自己也買(mǎi)一個(gè)這樣的保險(xiǎn)箱坑资。通信最開(kāi)始,我把保險(xiǎn)箱打開(kāi)穆端,就這么開(kāi)著把保險(xiǎn)箱發(fā)給你袱贮。你把數(shù)據(jù)放進(jìn)去以后,把保險(xiǎn)箱“撞”上發(fā)給我体啰。撞上以后攒巍,除了我以外嗽仪,誰(shuí)都打不開(kāi)保險(xiǎn)箱了。這就是RSA了柒莉,公開(kāi)的保險(xiǎn)箱就是公鑰闻坚,但是我有私鑰,我才能打開(kāi)兢孝。
2.數(shù)字簽名
這種鎖看起來(lái)好像很不錯(cuò)窿凤,但是鎖在運(yùn)輸?shù)倪^(guò)程中有這么一個(gè)嚴(yán)重的問(wèn)題:你怎么確定你收到的開(kāi)著的保險(xiǎn)箱就是我發(fā)來(lái)的呢?對(duì)于一個(gè)聰明人跨蟹,他完全可以這么干:
(a)裝作運(yùn)輸工人雳殊。我現(xiàn)在把我開(kāi)著的保險(xiǎn)箱運(yùn)給對(duì)方。運(yùn)輸工人自己也弄這么一個(gè)保險(xiǎn)箱窗轩,運(yùn)輸?shù)臅r(shí)候把保險(xiǎn)箱換成他做的夯秃。
(b)對(duì)方收到保險(xiǎn)箱后,沒(méi)法知道這個(gè)保險(xiǎn)箱是我最初發(fā)過(guò)去的痢艺,還是運(yùn)輸工人替換的仓洼。對(duì)方把數(shù)據(jù)放進(jìn)去,把保險(xiǎn)箱撞上腹备。
(c)運(yùn)輸工人往回運(yùn)的時(shí)候衬潦,用自己的鑰匙打開(kāi)自己的保險(xiǎn)箱,把數(shù)據(jù)拿走植酥。然后復(fù)印也好镀岛,偽造也好,弄出一份數(shù)據(jù)友驮,把這份數(shù)據(jù)放進(jìn)我的保險(xiǎn)箱漂羊,撞上,然后發(fā)給我卸留。
從我的角度走越,從對(duì)方的角度,都會(huì)覺(jué)得這數(shù)據(jù)傳輸過(guò)程沒(méi)問(wèn)題耻瑟。但是旨指,運(yùn)輸工人成功拿到了數(shù)據(jù),整個(gè)過(guò)程還是不安全的喳整,大概的過(guò)程是這樣:
這怎么辦白还埂?這個(gè)問(wèn)題的本質(zhì)原因是框都,人們沒(méi)辦法獲知搬素,保險(xiǎn)箱到底是“我”做的,還是運(yùn)輸工人做的。那干脆熬尺,我們都別做保險(xiǎn)箱了摸屠,讓權(quán)威機(jī)構(gòu)做保險(xiǎn)箱,然后在每個(gè)保險(xiǎn)箱上用特殊的工具刻上一個(gè)編號(hào)粱哼。對(duì)方收到保險(xiǎn)箱的時(shí)候季二,在權(quán)威機(jī)構(gòu)的“公告欄”上查一下編號(hào),要是和保險(xiǎn)箱上的編號(hào)一樣皂吮,我就知道這個(gè)保險(xiǎn)箱是“我”的戒傻,就安心把數(shù)據(jù)放進(jìn)去。大概過(guò)程是這樣的:
如何做出刻上編號(hào)蜂筹,而且編號(hào)沒(méi)法修改的保險(xiǎn)箱呢需纳?這涉及到了公鑰體制中的另一個(gè)問(wèn)題:數(shù)字簽名。
要知道艺挪,刻字這種事情吧不翩,誰(shuí)都能干,所以想做出只能自己刻字麻裳,還沒(méi)法讓別人修改的保險(xiǎn)箱確實(shí)有點(diǎn)難度口蝠。那么怎么辦呢?這其實(shí)困擾了人們很長(zhǎng)的時(shí)間津坑。直到有一天妙蔗,人們發(fā)現(xiàn):我們不一定非要在保險(xiǎn)箱上刻規(guī)規(guī)矩矩的字,我們干脆在保險(xiǎn)箱上刻手寫(xiě)名字好了疆瑰。而且眉反,刻字有點(diǎn)麻煩,干脆我們?cè)谏厦媾獜埣埬乱郏屓酥苯釉谏厦鎸?xiě)寸五,簡(jiǎn)單不費(fèi)事。具體做法是耿币,我們?cè)诒kU(xiǎn)箱上嵌進(jìn)去一張紙梳杏,然后每個(gè)出產(chǎn)的保險(xiǎn)箱都讓權(quán)威機(jī)構(gòu)的CEO簽上自己的名字。然后淹接,CEO把自己的簽名公開(kāi)在權(quán)威機(jī)構(gòu)的“公告欄”上面十性。比如這個(gè)CEO就叫“學(xué)酥”,那么整個(gè)流程差不多是這個(gè)樣子:
這個(gè)方法的本質(zhì)原理是塑悼,每個(gè)人都能夠通過(guò)筆跡看出保險(xiǎn)箱上的字是不是學(xué)酥CEO簽的劲适。但是呢,這個(gè)字體是學(xué)酥CEO唯一的字體拢肆。別人很難模仿减响。如果模仿我們就能自己分辨出來(lái)了。要是實(shí)在分辨不出來(lái)呢郭怪,我們就請(qǐng)一個(gè)筆跡專家來(lái)分辨支示。這不是很好嘛。這個(gè)在密碼學(xué)上就是數(shù)字簽名鄙才。
上面這個(gè)簽字的方法雖然好颂鸿,但是還有一個(gè)比較蛋疼的問(wèn)題。因?yàn)楹炞值臉幼邮枪_(kāi)的攒庵,一個(gè)聰明人可以把公開(kāi)的簽字影印一份嘴纺,自己造個(gè)保險(xiǎn)箱,然后把這個(gè)影印的字也嵌進(jìn)去浓冒。這樣一來(lái)栽渴,這個(gè)聰明人也可以造一個(gè)相同簽字的保險(xiǎn)箱了。解決這個(gè)問(wèn)題一個(gè)非常簡(jiǎn)單的方法就是在看保險(xiǎn)箱上的簽名時(shí)稳懒,不光看字體本身闲擦,還要看字體是不是和公開(kāi)的字體完全一樣。要是完全一樣场梆,就可以考慮這個(gè)簽名可能是影印出來(lái)的墅冷。甚至,還要考察字體是不是和其他保險(xiǎn)柜上的字體一模一樣或油。因?yàn)槁斆魅藶榱似垓_大家寞忿,可能不影印公開(kāi)的簽名,而影印其他保險(xiǎn)箱上的簽名顶岸。這種解決方法雖然簡(jiǎn)單腔彰,但是驗(yàn)證簽名的時(shí)候麻煩了一些。麻煩的地方在于我不僅需要對(duì)比保險(xiǎn)箱上的簽名是否與公開(kāi)的筆跡一樣蜕琴,還需要對(duì)比得到的簽名是否與公開(kāi)的筆跡完全一樣萍桌,乃至是否和所有發(fā)布的保險(xiǎn)箱上的簽名完全一樣。有沒(méi)有什么更好的方法呢凌简?
當(dāng)然有上炎,人們想到了一個(gè)比較好的方法。那就是雏搂,學(xué)酥CEO簽字的時(shí)候吧藕施,不光把名字簽上,還得帶上簽字得日期凸郑,或者帶上這個(gè)保險(xiǎn)箱的編號(hào)裳食。這樣一來(lái),每一個(gè)保險(xiǎn)箱上的簽字就唯一了芙沥,這個(gè)簽字是學(xué)酥CEO的簽名+學(xué)酥CEO寫(xiě)上的時(shí)間或者編號(hào)诲祸。這樣一來(lái)浊吏,就算有人偽造,也只能偽造用過(guò)的保險(xiǎn)箱救氯。這個(gè)問(wèn)題就徹底解決了找田。這個(gè)過(guò)程大概是這么個(gè)樣子:
3 造價(jià)問(wèn)題(密鑰封裝機(jī)制,Key Encapsulation Mechanism)
解決了上面的各種問(wèn)題着憨,我們要考慮考慮成本了… 這種能“撞”門(mén)的保險(xiǎn)箱雖然好墩衙,但是這種鎖造價(jià)一般來(lái)說(shuō)要比普通的鎖要高,而且鎖生產(chǎn)時(shí)間也會(huì)變長(zhǎng)甲抖。在密碼學(xué)中漆改,對(duì)于同樣“結(jié)實(shí)”的鎖,能“撞”門(mén)的鎖的造價(jià)一般來(lái)說(shuō)是普通鎖的上千倍准谚。同時(shí)挫剑,能“撞”門(mén)的鎖一般來(lái)說(shuō)只能安裝在小的保險(xiǎn)柜里面。畢竟柱衔,這么復(fù)雜的鎖暮顺,裝起來(lái)很費(fèi)事啊秀存!而普通鎖安裝在多大的保險(xiǎn)柜上面都可以呢捶码。如果兩個(gè)人想傳輸大量數(shù)據(jù)的話,用一個(gè)大的保險(xiǎn)柜比用一堆小的保險(xiǎn)柜慢慢傳要好的多呀或链。怎么解決這個(gè)問(wèn)題呢惫恼?人們又想出了一個(gè)非常棒的方法:我們把兩種鎖結(jié)合起來(lái)。能“撞”上的保險(xiǎn)柜里面放一個(gè)普通鎖的鑰匙澳盐。然后造一個(gè)用普通的保險(xiǎn)柜來(lái)鎖大量的數(shù)據(jù)祈纯。這樣一來(lái),我們相當(dāng)于用能“撞”上的保險(xiǎn)柜發(fā)一個(gè)鑰匙過(guò)去叼耙。對(duì)方收到兩個(gè)保險(xiǎn)柜后腕窥,先用自己的鑰匙把小保險(xiǎn)柜打開(kāi),取出鑰匙筛婉。然后在用這個(gè)鑰匙開(kāi)大的保險(xiǎn)柜簇爆。這樣做更棒的一個(gè)地方在于,既然對(duì)方得到了一個(gè)鑰匙爽撒,后續(xù)再通信的時(shí)候入蛆,我們就不再需要能“撞”上的保險(xiǎn)柜了啊,在以后一定時(shí)間內(nèi)就用普通保險(xiǎn)柜就好了硕勿,方便快捷嘛哨毁。
以下參考數(shù)字簽名、數(shù)字證書(shū)源武、SSL扼褪、https是什么關(guān)系想幻?
4.數(shù)字簽名(Digital Signature)
數(shù)據(jù)在瀏覽器和服務(wù)器之間傳輸時(shí),有可能在傳輸過(guò)程中被冒充的盜賊把內(nèi)容替換了话浇,那么如何保證數(shù)據(jù)是真實(shí)服務(wù)器發(fā)送的而不被調(diào)包呢举畸,同時(shí)如何保證傳輸?shù)臄?shù)據(jù)沒(méi)有被人篡改呢,要解決這兩個(gè)問(wèn)題就必須用到數(shù)字簽名凳枝,數(shù)字簽名就如同日常生活的中的簽名一樣,一旦在合同書(shū)上落下了你的大名跋核,從法律意義上就確定是你本人簽的字兒岖瑰,這是任何人都沒(méi)法仿造的,因?yàn)檫@是你專有的手跡砂代,任何人是造不出來(lái)的蹋订。那么在計(jì)算機(jī)中的數(shù)字簽名怎么回事呢?數(shù)字簽名就是用于驗(yàn)證傳輸?shù)膬?nèi)容是不是真實(shí)服務(wù)器發(fā)送的數(shù)據(jù)刻伊,發(fā)送的數(shù)據(jù)有沒(méi)有被篡改過(guò)露戒,它就干這兩件事,是非對(duì)稱加密的一種應(yīng)用場(chǎng)景捶箱。不過(guò)他是反過(guò)來(lái)用私鑰來(lái)加密智什,通過(guò)與之配對(duì)的公鑰來(lái)解密。
第一步:服務(wù)端把報(bào)文經(jīng)過(guò)Hash處理后生成摘要信息Digest丁屎,摘要信息使用私鑰private-key加密之后就生成簽名荠锭,服務(wù)器把簽名連同報(bào)文一起發(fā)送給客戶端。
第二步:客戶端接收到數(shù)據(jù)后晨川,把簽名提取出來(lái)用public-key解密证九,如果能正常的解密出來(lái)Digest2,那么就能確認(rèn)是對(duì)方發(fā)的共虑。
第三步:客戶端把報(bào)文Text提取出來(lái)做同樣的Hash處理愧怜,得到的摘要信息Digest1,再與之前解密出來(lái)的Digist2對(duì)比妈拌,如果兩者相等拥坛,就表示內(nèi)容沒(méi)有被篡改,否則內(nèi)容就是被人改過(guò)了尘分。因?yàn)橹灰谋緝?nèi)容哪怕有任何一點(diǎn)點(diǎn)改動(dòng)都會(huì)Hash出一個(gè)完全不一樣的摘要信息出來(lái)渴逻。
5.數(shù)字證書(shū)(Certificate Authority)
數(shù)字證書(shū)簡(jiǎn)稱CA,它由權(quán)威機(jī)構(gòu)給某網(wǎng)站頒發(fā)的一種認(rèn)可憑證音诫,這個(gè)憑證是被大家(瀏覽器)所認(rèn)可的惨奕,為什么需要用數(shù)字證書(shū)呢,難道有了數(shù)字簽名還不夠安全嗎竭钝?有這樣一種情況梨撞,就是瀏覽器無(wú)法確定所有的真實(shí)服務(wù)器是不是真的是真實(shí)的雹洗,舉一個(gè)簡(jiǎn)單的例子:A廠家給你們家安裝鎖,同時(shí)把鑰匙也交給你卧波,只要鑰匙能打開(kāi)鎖时肿,你就可以確定鑰匙和鎖是配對(duì)的,如果有人把鑰匙換了或者把鎖換了港粱,你是打不開(kāi)門(mén)的螃成,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來(lái)差不多的查坪,但質(zhì)量差很多的寸宏,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的偿曙,那么這時(shí)候氮凝,你可以找質(zhì)檢部門(mén)來(lái)檢驗(yàn)一下,這套鎖是不是真的來(lái)自于A廠家望忆,質(zhì)檢部門(mén)是權(quán)威機(jī)構(gòu)罩阵,他說(shuō)的話是可以被公眾認(rèn)可的(呵呵)。
同樣的启摄, 因?yàn)槿绻腥耍◤埲┯米约旱墓€把真實(shí)服務(wù)器發(fā)送給瀏覽器的公鑰替換了稿壁,于是張三用自己的私鑰執(zhí)行相同的步驟對(duì)文本Hash、數(shù)字簽名歉备,最后得到的結(jié)果都沒(méi)什么問(wèn)題常摧,但事實(shí)上瀏覽器看到的東西卻不是真實(shí)服務(wù)器給的,而是被張三從里到外(公鑰到私鑰)換了一通威创。那么如何保證你現(xiàn)在使用的公鑰就是真實(shí)服務(wù)器發(fā)給你的呢落午?我們就用數(shù)字證書(shū)來(lái)解決這個(gè)問(wèn)題。數(shù)字證書(shū)一般由數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)(Certificate Authority)頒發(fā)肚豺,證書(shū)里面包含了真實(shí)服務(wù)器的公鑰和網(wǎng)站的一些其他信息溃斋,數(shù)字證書(shū)機(jī)構(gòu)用自己的私鑰加密后發(fā)給瀏覽器,瀏覽器使用數(shù)字證書(shū)機(jī)構(gòu)的公鑰解密后得到真實(shí)服務(wù)器的公鑰吸申。這個(gè)過(guò)程是建立在被大家所認(rèn)可的證書(shū)機(jī)構(gòu)之上得到的公鑰梗劫,所以這是一種安全的方式。
五截碴、常見(jiàn)的對(duì)稱梳侨,非對(duì)稱加密算法應(yīng)用
常見(jiàn)的對(duì)稱加密算法有DES、3DES日丹、AES走哺、RC5、RC6哲虾。非對(duì)稱加密算法應(yīng)用非常廣泛丙躏,如SSH,
HTTPS, TLS择示,電子證書(shū),電子簽名晒旅,電子身份證等等栅盲。
參考DES/3DES/AES區(qū)別