新聞中心
關(guān)于非對(duì)稱加密,小蔚已經(jīng)聊過很多次,這一次我們繼續(xù)更深入的探討一下。

創(chuàng)新互聯(lián)長(zhǎng)期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為周口企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),周口網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
近現(xiàn)代,密碼學(xué)已經(jīng)成為一個(gè)重要的學(xué)科,無(wú)論是軍事還是生活,處處都有密碼學(xué)的身影。
從密碼學(xué)誕生之日起,一個(gè)難題始終困擾著人們。為了讓接收信息的一方獲得原始信息,必須事先將解密的方法告訴對(duì)方。但這樣一來(lái),解密的方法就存在泄露的風(fēng)險(xiǎn),一旦泄露,所加密的信息就會(huì)在陽(yáng)光下裸奔。
有沒有一種方法,不需要事先告訴對(duì)方解密的方法,就可以讓對(duì)方輕易獲取被加密的信息呢?
如果甲寫了一封機(jī)密信件,打算發(fā)送給乙。甲所在的地區(qū)只有一個(gè)郵差,而且甲已經(jīng)知道這名郵差是個(gè)間諜,會(huì)千方百計(jì)找機(jī)會(huì)竊取機(jī)密信件。
于是甲將這封機(jī)密信鎖在一個(gè)無(wú)法被暴力破壞的鐵箱子里,打開箱子的唯一方法是獲得鑰匙,將機(jī)密信件鎖在鐵箱子里后,再讓郵差將箱子送給乙。
問題是,乙沒有鑰匙,也打不開這個(gè)鐵箱子。
先郵寄鐵箱子,再郵寄鑰匙?這樣也不行,郵差可以輕易獲得鑰匙,打開鐵箱子。
先讓乙郵寄一把鎖過來(lái),然后再用乙的鎖鎖鐵箱子?還是不行。只要鎖或者鑰匙經(jīng)過郵差的手,機(jī)密信就不安全。
在很久很久以前,人們只能通過“線下”的方式來(lái)解決這個(gè)問題。兩個(gè)人線下見面商量一個(gè)“密鑰”,再在通信時(shí)使用這個(gè)密鑰進(jìn)行加密。
但這樣做還是存在泄密的風(fēng)險(xiǎn),不懷好意的人總能找到破綻竊取秘密。
后來(lái),聰明的人想到了一個(gè)辦法:
甲先將上鎖的箱子郵寄給乙,乙雖然打不開,但可以在箱子上再加一把鎖,再郵寄回給甲。甲使用自己的鑰匙打開鎖后,又郵寄給乙,最終乙用自己的鑰匙打開箱子,拿到這封機(jī)密信件。
這個(gè)方法看起來(lái)行得通,整個(gè)過程郵差接觸不到鑰匙,打不開箱子。
不過這個(gè)方法有一個(gè)很大的問題——效率。以前只需要一趟,現(xiàn)在卻需要三趟。要知道,信息的時(shí)效性是非常重要的,李云龍?jiān)诠ゴ蚱桨部h城時(shí)說過:“你少來(lái)那一套!你我都知道一分鐘就能決定戰(zhàn)斗的勝負(fù)!”
要是傳遞信息的時(shí)間增加了兩倍,后果不堪設(shè)想。
兼具安全和效率的方法,一直沒有被找到,直到1977年,一種設(shè)計(jì)巧妙的方法被發(fā)明了出來(lái)。
它就是大名鼎鼎的“非對(duì)稱加密?!?/p>
非對(duì)稱加密算法需要兩把密鑰來(lái)進(jìn)行加密的解密,一把公開密鑰,只能用于加密,一把私有密鑰,只能用于解密。公鑰和密鑰合在一起形成“密鑰對(duì)?!?/p>
公鑰是公開的,任何人都可以用公鑰加密數(shù)據(jù),持有這一公鑰對(duì)應(yīng)私鑰的人,才能解密,這樣一來(lái),就不存在要傳遞“鑰匙”的情況,同時(shí)也兼顧了效率。
只要用我的公鑰加密數(shù)據(jù),全世界的鎖我都能解開,而且只有我行!
按照上面的例子進(jìn)行解釋,非對(duì)稱加密大致是這樣的過程:
- 甲將大量的鑰匙散發(fā)到全世界各地,并宣布凡是要與自己通信的,只需要將信息放到鐵箱子里,并用這些鑰匙(公鑰)上鎖即可。(假定鎖必須有鑰匙才能上鎖)
- 假如乙要和甲取得聯(lián)系,只需要將機(jī)密信件放入一個(gè)鐵箱子里,并用甲的公鑰上鎖,緊接著郵寄給甲,甲就可以用自己的私鑰開鎖拿到信件。
整個(gè)過程,甲、乙既不需要對(duì)方的密鑰,郵差只能拿到公鑰,公鑰只能加密不能解密,從而保證了信件的安全性。
接下來(lái)我們來(lái)真實(shí)地感受一下非對(duì)稱加密的藝術(shù)。
這種算法跟質(zhì)數(shù)分不開。
現(xiàn)在給你13和17兩個(gè)質(zhì)數(shù),讓你算出它們的乘積,我們很容易算出是221。
如果告訴你221這個(gè)數(shù)字,要求你算出這是哪兩個(gè)質(zhì)數(shù)的乘積,就比較難了。你得翻一翻質(zhì)數(shù)表,才能知道原來(lái)這個(gè)數(shù)是13和17。
這只是兩位數(shù)質(zhì)數(shù)的乘積,如果是幾十位、上百位甚至上千位的質(zhì)數(shù)乘積呢?逆向推理就變得十分困難。
舉個(gè)五位數(shù)的例子,請(qǐng)問9936899831是哪兩個(gè)質(zhì)數(shù)的乘積?
雖然有困難,但通過計(jì)算機(jī),還是可以得出這兩個(gè)數(shù)是99679和99689。但如果是上千位數(shù),就十分困難了。
以現(xiàn)在計(jì)算機(jī)的算力,要對(duì)一個(gè)2048位的數(shù)字進(jìn)行暴力破解,可能要用上幾百年的時(shí)間,可以被認(rèn)為是無(wú)法破解的。
為了方便計(jì)算和理解,我們還是使用13和17這兩個(gè)質(zhì)數(shù)。
假如甲要發(fā)送“15”給乙,為了數(shù)據(jù)傳輸安全,乙首先要生成一個(gè)密鑰對(duì),即一個(gè)公鑰和一個(gè)私鑰。
首先13*17=221。
然后我們把13和17各減去1,再乘起來(lái),也就是12 X 16 = 192。接下來(lái)我們要隨機(jī)選擇一個(gè)小于192且與192互質(zhì)的數(shù)。兩個(gè)數(shù)互質(zhì)的意思是他們沒有除了1以外的公約數(shù)。我們把192分解成因數(shù)相乘的形式:
192 = 2* 22222*3
選擇一個(gè)不能被2和3整除的數(shù),我們就選擇5這個(gè)數(shù)字。
(221,5)就是公鑰。
這個(gè)公鑰可以讓任何人知道,完全沒有關(guān)系,所有人都可以使用這個(gè)公鑰加密數(shù)據(jù),然后發(fā)送給你。
還記得我們之前算出來(lái)的192和我們隨機(jī)選擇的5嗎?我們要找到這樣一個(gè)數(shù):它是5的倍數(shù),然后除以192剛好余1。這個(gè)數(shù)很好找,它就是385。然后385除以5等于77。
于是我們得出了私鑰:(221,77)。
私鑰只能自己知道,一旦泄露,傳輸?shù)臄?shù)據(jù)就等于是在陽(yáng)光下裸奔。
好了,有了密鑰對(duì),我們終于可以進(jìn)行加密和解密了。
甲先將想要發(fā)送的信息,也就是“15”這個(gè)數(shù)字,使用乙的公鑰進(jìn)行加密。乙的公鑰是(221,5)。
首先甲算出15的5次方,得出759375這個(gè)數(shù)字。接著再用759375除以221,得出余數(shù)是19。
最后一步,甲將“19”發(fā)送給乙。
乙拿到“19”后,使用私鑰進(jìn)行解密。私鑰是(221,77)。
首先乙會(huì)先計(jì)算19的77次方,然后再用得到的數(shù)字除以221,求出該數(shù)的余數(shù),得出最終的答案就是“15!”
非對(duì)稱加密大體上就是這么一個(gè)過程,非常具有藝術(shù)感!
那么,非對(duì)稱加密有沒有缺點(diǎn)呢?
有!還是效率問題。
如果甲和乙商量好一個(gè)密鑰,假定這個(gè)密鑰是數(shù)字“5”,甲想發(fā)給乙“15”這個(gè)數(shù)字,甲首先會(huì)用15*5得到75,再將“75”這個(gè)數(shù)字發(fā)給乙,乙拿到數(shù)字后,再除以5,就能得到“15”這個(gè)數(shù)字。
上面這種方法就是對(duì)稱加密。它的缺點(diǎn)是安全性很差,加密和解密都使用同一個(gè)密鑰,一旦密鑰泄露,傳輸?shù)臄?shù)據(jù)就無(wú)安全性可言。
但它有一個(gè)好處,就是效率高。甲乙傳遞的信息,只需要乘以5和除以5即可,沒有非對(duì)稱加密這么復(fù)雜。
于是,有一個(gè)聰明的家伙,結(jié)合非對(duì)稱加密和對(duì)稱加密,使其具備效率和安全性的優(yōu)勢(shì)。
具體是怎么做的呢?
思路如下:
首先利用非對(duì)稱加密傳遞“密鑰”,對(duì)方擁有密鑰后,再使用密鑰傳輸數(shù)據(jù)即可,這樣一來(lái),既保證了安全性,又有效率。
還是上面的例子。數(shù)字“5”是密鑰,甲首先使用乙的公鑰(221,5)進(jìn)行加密。
5的5次方,除以221的余數(shù)是31,甲將31發(fā)送給乙,乙拿到這個(gè)數(shù)字后,再利用私鑰(221,77)解密,算出31的77次方除以221的余數(shù)是5。
此時(shí)乙已經(jīng)知道了“5”這個(gè)密鑰。
以后,甲和乙就用“5”這個(gè)密鑰進(jìn)行對(duì)稱加密的數(shù)據(jù)傳輸。
第二次通訊時(shí),甲要傳遞“6”,只要5*6=30,傳給乙30這個(gè)數(shù)字,乙再用30/5得到6即可。
第一次用非對(duì)稱加密傳遞密鑰,第二次之后用對(duì)稱加密進(jìn)行通訊加密,安全性有了,效率也有了。
可能熟悉的同學(xué)已經(jīng)知道了,對(duì),SSL證書就是這么干的!
網(wǎng)站名稱:手上只有一把鑰匙,怎么解開全世界的鎖?揭秘神奇的非對(duì)稱加密
鏈接分享:http://fisionsoft.com.cn/article/cohhjig.html


咨詢
建站咨詢
