自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

物聯(lián)網(wǎng)安全:RSA加解密算法

安全 物聯(lián)網(wǎng)安全 算法
傳統(tǒng)的加密方法是加密、解密使用同樣的密鑰,由發(fā)送者和接收者分別保存,在加密和解密時(shí)使用。采用這種方法的主要問(wèn)題是密鑰的生成、注入、存儲(chǔ)、管理、分發(fā)等很復(fù)雜,特別是隨著用戶(hù)數(shù)量的增加,密鑰的需求量成倍增加。在網(wǎng)絡(luò)通信中,大量密鑰的分配是一個(gè)難以解決的問(wèn)題。

[[357279]]

微信公眾號(hào):計(jì)算機(jī)與網(wǎng)絡(luò)安全

ID:Computer-network

傳統(tǒng)的加密方法是加密、解密使用同樣的密鑰,由發(fā)送者和接收者分別保存,在加密和解密時(shí)使用。采用這種方法的主要問(wèn)題是密鑰的生成、注入、存儲(chǔ)、管理、分發(fā)等很復(fù)雜,特別是隨著用戶(hù)數(shù)量的增加,密鑰的需求量成倍增加。在網(wǎng)絡(luò)通信中,大量密鑰的分配是一個(gè)難以解決的問(wèn)題。

為了解決常規(guī)密鑰密碼體制的密鑰分配問(wèn)題,滿(mǎn)足用戶(hù)對(duì)數(shù)字簽名的需求,1976年,美國(guó)學(xué)者Diffie和Hellman發(fā)表了著名論文《密碼學(xué)的新方向》,提出了建立“公開(kāi)密鑰密碼體制”:若用戶(hù)A有加密密鑰ka(公開(kāi)),不同于解密密鑰ka′(保密),要求ka的公開(kāi)不影響ka′的安全;若用戶(hù)B要向用戶(hù)A保密傳送明文m,則可查用戶(hù)A的公開(kāi)密鑰ka,若用ka加密得到密文c,則用戶(hù)A收到c后,用只有用戶(hù)A自己才掌握的解密密鑰ka′對(duì)c進(jìn)行解密以得到m。

1978年,美國(guó)麻省理工學(xué)院的研究小組成員李維斯特(Rivest)、沙米爾(Shamir)和艾德曼(Adleman)(如圖1所示)提出了一種基于公鑰密碼體制的優(yōu)秀加密算法——RSA算法。RSA算法是第一個(gè)比較完善的公開(kāi)密鑰算法,它既能用于加密,也能用于數(shù)字簽名。RSA算法以它的三個(gè)發(fā)明者Rivest,Shamir,Adleman的名字首字母命名,這個(gè)算法經(jīng)受住了多年深入的密碼分析。密碼分析者既不能證明也不能否定RSA算法的安全性,但這恰恰說(shuō)明該算法有一定的可信性。目前,RSA算法已經(jīng)成為最流行的公開(kāi)密鑰算法。

 

 

 

[[357280]]

 

圖1 RSA公開(kāi)密鑰算法的發(fā)明人

注:從左到右依次為李維斯特、沙米爾和艾德曼,照片拍攝于1978年

1、RSA算法原理

RSA是最著名且應(yīng)用最廣泛的公開(kāi)密鑰算法,可以同時(shí)用于加密和數(shù)字簽名。國(guó)際標(biāo)準(zhǔn)化組織(International Organization for Standardization,ISO)在1992年頒布的國(guó)際標(biāo)準(zhǔn)X.509中,將RSA算法正式納入國(guó)際標(biāo)準(zhǔn)。1999年,美國(guó)參議院通過(guò)立法,規(guī)定了數(shù)字簽名與手寫(xiě)簽名的文件、郵件在美國(guó)具有同等的法律效力。

RSA算法是一種分組密碼體制算法,它的保密強(qiáng)度是建立在具有大素?cái)?shù)因子的合數(shù)上的,其因子分解較困難。RSA算法的公鑰和私鑰選擇一對(duì)大素?cái)?shù)(100到200位十進(jìn)制數(shù)或更大的數(shù))的函數(shù)。而從一個(gè)公鑰和密文恢復(fù)出明文的難度,等價(jià)于分解兩個(gè)大素?cái)?shù)之積(這是公認(rèn)的數(shù)學(xué)難題),但是否為NP問(wèn)題尚不確定。表1給出了大數(shù)分解難度的例子。

 

 

 

 

表1 大數(shù)分解難度舉例

RSA算法體制包括:一個(gè)公開(kāi)密鑰KU={e,n},一個(gè)私有密鑰KR={d,n}。其公鑰、私鑰的組成以及加密、解密的公式如表2所示。

 

 

 

 

表2 RSA算法

① 有可能找到e、d、n的值,使得對(duì)所有的M

② 對(duì)于所有的M

③ 在給定e和n時(shí),計(jì)算出d是不可行的。

(1)RSA算法的數(shù)論基礎(chǔ)

下面介紹RSA算法中需要使用的幾個(gè)術(shù)語(yǔ)。

1)素?cái)?shù)

素?cái)?shù)又稱(chēng)為質(zhì)數(shù),是指在大于1的自然數(shù)中,除了1和此數(shù)自身外,不能被其他自然數(shù)整除的數(shù)。例如,15=3×5,所以15不是素?cái)?shù);又如,12=6×2=4×3,所以12也不是素?cái)?shù)。而13除了等于13×1以外,不能再表示為其他任何兩個(gè)整數(shù)的乘積,所以13是一個(gè)素?cái)?shù)。

2)互為素?cái)?shù)

公約數(shù)只有1的兩個(gè)自然數(shù),叫作互質(zhì)數(shù),即互素?cái)?shù)。兩個(gè)自然數(shù)是否互為素?cái)?shù)的判別方法主要有以下8種(不限于此)。

① 兩個(gè)質(zhì)數(shù)一定是互質(zhì)數(shù),例如,2與7,13與19。

② 一個(gè)質(zhì)數(shù)如果不能整除另一個(gè)合數(shù),那么這兩個(gè)數(shù)為互質(zhì)數(shù),例如,3與10,5與26。

③ 1不是質(zhì)數(shù)也不是合數(shù),它和任何一個(gè)自然數(shù)都是互質(zhì)數(shù),例如,1和9908。

④ 相鄰的兩個(gè)自然數(shù)是互質(zhì)數(shù),例如,15與16。

⑤ 相鄰的兩個(gè)奇數(shù)是互質(zhì)數(shù),例如,49與51。

⑥ 大數(shù)是質(zhì)數(shù)的兩個(gè)數(shù)是互質(zhì)數(shù),例如,97與88。

⑦ 小數(shù)是質(zhì)數(shù),大數(shù)不是小數(shù)的倍數(shù)的兩個(gè)數(shù)是互質(zhì)數(shù),例如,7與16。

⑧ 兩個(gè)數(shù)都是合數(shù)(兩數(shù)之差又較大),小數(shù)所有的質(zhì)因數(shù)都不是大數(shù)的約數(shù),這兩個(gè)數(shù)是互質(zhì)數(shù)。例如,357與715,357=3×7×17,而3、7和17都不是715的約數(shù),所以這兩個(gè)數(shù)為互質(zhì)數(shù)。

3)模運(yùn)算

模運(yùn)算是整數(shù)運(yùn)算,有一個(gè)整數(shù)m,以n為模做模運(yùn)算,即mmod n。令m被n整除,只取所得的余數(shù)作為結(jié)果,就叫作模運(yùn)算。例如,10 mod 3=1,26 mod 6=2,28 mod 2=0等。

模運(yùn)算有以下性質(zhì)。

① 同余性:若amod n=bmod n,則正整數(shù)a與b同余。

② 對(duì)稱(chēng)性:若a=b mod n,則b=amod n。

③ 傳遞性:若a=b mod n,b=cmod n,則a=cmod n。

4)Euler函數(shù)

任意給定正整數(shù)n,計(jì)算在小于或等于n的正整數(shù)之中有多少個(gè)與n能構(gòu)成互質(zhì)關(guān)系的方法叫作歐拉函數(shù),以φ(n)表示。例如,φ(8)=4,這是因?yàn)樵?~8之中與8能形成互質(zhì)關(guān)系的數(shù)有4個(gè):1,3,5,7。

φ(n)的計(jì)算方法并不復(fù)雜,下面分情況對(duì)其進(jìn)行討論。

第一種情況:如果n=1,則φ(1)=1,因?yàn)?與任何數(shù)(包括其自身)都能構(gòu)成互質(zhì)關(guān)系。

第二種情況:如果n是素?cái)?shù),則φ(n)=n-1,因?yàn)橘|(zhì)數(shù)與每個(gè)小于它的數(shù)都能構(gòu)成互質(zhì)關(guān)系。

第三種情況:如果n是素?cái)?shù)的某一個(gè)次方,如n=pk,p為素?cái)?shù),k≥1,則

φ(pk)=pk-pk-1

例如,φ(8)=φ(23)=23-22=4。這是因?yàn)橹挥挟?dāng)一個(gè)數(shù)不包含素?cái)?shù)p時(shí),才能與n互質(zhì)。而包含素?cái)?shù)p的數(shù)一共有pk-1個(gè),即1×p、2×p、…、pk-1×p。

第四種情況:如果n可以分解成兩個(gè)互質(zhì)的整數(shù)之積,例如,n=p1×p2,則φ(n)=φ(p1p2)=φ(p1)φ(p2),即積的歐拉函數(shù)等于各個(gè)因子的歐拉函數(shù)之積。例如,φ(56)=φ(7×8)=φ(7)×φ(8)=6×4=24。

第五種情況:對(duì)于任意大于1的整數(shù),若其可以寫(xiě)成一系列素?cái)?shù)的積,如

 

 

 

 

,則有

 

 

 

 

5)歐拉定理

如果兩個(gè)正整數(shù)a和n互質(zhì),則n的歐拉函數(shù)φ(n)滿(mǎn)足:

aφ(n)≡1(mod n)

即a的φ(n)次方減去1,被n整除。例如,3和7互質(zhì),φ(7)=6,(36-1)/7=104。

如果正整數(shù)a與質(zhì)數(shù)p互質(zhì),則因?yàn)?phi;(p)=p-1,所以歐拉函數(shù)可寫(xiě)成:

ap−1≡1(mod p)

這就是著名的費(fèi)馬小定理(Fermat Theory)。

6)費(fèi)馬小定理

若m是素?cái)?shù),且a不是m的倍數(shù),則am-1 mod m=1?;蛘?,若m是素?cái)?shù),則ammod m=a。例如,46mod 7=4096 mod 7=1,47mod 7=16384 mod 7=4。

推論:對(duì)于互素的a和n,有aφ(n)mod n=1。

(2)素?cái)?shù)的產(chǎn)生與檢驗(yàn)

首先來(lái)介紹素?cái)?shù)的簡(jiǎn)單判定算法。在C程序設(shè)計(jì)中,素?cái)?shù)的判定算法為:給定一個(gè)正整數(shù)n,用2到sqrt(n)之間的所有整數(shù)去除n,如果可以整除,則n不是素?cái)?shù),如果不可以整除,則n是素?cái)?shù)。這個(gè)算法的時(shí)間復(fù)雜度為O(sqrt(n)),算法描述簡(jiǎn)單,實(shí)現(xiàn)也不困難。但是,這個(gè)算法對(duì)于位數(shù)較大的素?cái)?shù)判定就顯得力不從心了。

目前,適用于RSA算法的最實(shí)用的素?cái)?shù)產(chǎn)生辦法是概率測(cè)試法。該法的思想是隨機(jī)產(chǎn)生一個(gè)大奇數(shù),然后測(cè)試其是否滿(mǎn)足條件,若滿(mǎn)足,則該大奇數(shù)可能是素?cái)?shù),否則,其是合數(shù)。

由于素?cái)?shù)有無(wú)窮多個(gè),因此判定一個(gè)整數(shù)是不是素?cái)?shù)一直是一個(gè)大難題,威爾遜定理(Wilson's Theorem)就是其中的一種判定方法。

威爾遜定理:若正整數(shù)n>1,則n是一個(gè)素?cái)?shù)當(dāng)且僅當(dāng)(n-1)! ≡ -1(mod n)。

雖然說(shuō)威爾遜定理給出了素?cái)?shù)的等價(jià)命題,但是由于階乘的增長(zhǎng)速度太快(如13!為60多億),因此其實(shí)際操作價(jià)值不高。由此提出了概率檢驗(yàn)方法。

米勒-拉賓素性檢驗(yàn)(Miller-Rabin Prime Test)是一種典型的概率檢驗(yàn)方法。可以證明單次Miller-Rabin的正確概率大于3/4,我們重復(fù)若干次就可以增大這個(gè)概率。Miller-Rabin雖然有一定的概率出錯(cuò),但實(shí)踐證明,在重復(fù)20次的情況下,107以?xún)?nèi)的質(zhì)數(shù)不會(huì)判斷出錯(cuò)。

2、RSA加解密算法過(guò)程

(1)RSA加密算法過(guò)程

RSA加密算法的過(guò)程如下:

① 取兩個(gè)隨機(jī)大素?cái)?shù)p和q(保密);

② 計(jì)算公開(kāi)的模數(shù)n=p×q(公開(kāi));

③ 計(jì)算秘密的歐拉函數(shù)φ(n)=(p-1)×(q-1)(保密),丟棄p和q,不要讓任何人知道;

④ 隨機(jī)選取整數(shù)e,使其滿(mǎn)足gcd(e,φ(n))=1(公開(kāi)e加密密鑰);

⑤ 計(jì)算d,使其滿(mǎn)足de≡1(mod φ(n))(保密d解密密鑰);

⑥ 將明文X按模為r自乘e次冪以完成加密操作,從而產(chǎn)生密文Y(X、Y值在0到n-1范圍內(nèi)),即Y=Xemod n;

⑦ 解密,將密文Y按模為n自乘d次冪,得X=Ydmod n。

在RSA加(解)密算法實(shí)現(xiàn)過(guò)程中,主要的運(yùn)算量是計(jì)算模的逆元以及模指數(shù),通常情況下,計(jì)算模的逆元時(shí)會(huì)采用擴(kuò)展的歐幾里德算法。

(2)RSA解密算法過(guò)程

由于指數(shù)較大,因此RSA解密過(guò)程比較耗時(shí),但利用孫子定理(Chinese Remainder Theorem,CRT)可提高解密算法效率。CRT對(duì)RSA解密算法生成兩個(gè)解密方程(利用M=Cdmod pq),即:M1=Mmod p=(Cmod p)d mod (p-1)mod p,M2=Mmod q=(Cmod q)d mod (q-1)mod q。

解方程M=M1mod p和M=M2mod q,可求得其具有唯一解。

3、RSA算法應(yīng)用

(1)RSA用于數(shù)字簽名

① 簽名:對(duì)任意消息m∈M,用戶(hù)使用自己的私鑰簽名如下:S≡md(mod n),進(jìn)而可以得到簽名的消息(m, S)。

② 驗(yàn)證簽名:由該用戶(hù)的公開(kāi)密鑰(e, n),驗(yàn)證m≡Se(mod n)是否成立。

(2)RSA加密算法實(shí)例

可以通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)理解RSA的工作原理。為了便于計(jì)算,在以下實(shí)例中只選取小數(shù)值的素?cái)?shù)p, q以及e,假設(shè)用戶(hù)A需要將明文“key”通過(guò)RSA加密后傳遞給用戶(hù)B,過(guò)程如下。

1)設(shè)計(jì)公私密鑰(e,n)和(d,n)

令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3(3與20互質(zhì)),則e×d≡1 mod f(n),即3×d≡1 mod 20。d的取值可以用試算的辦法來(lái)確定。試算結(jié)果如表3所示。

 

 

 

 

表3 d的取值試算結(jié)果

通過(guò)試算得出,當(dāng)d=7時(shí),e×d≡1 mod f(n)同余等式成立。因此,可令d=7,從而可以設(shè)計(jì)出一對(duì)公私密鑰,加密密鑰(公鑰)為:KU=(e,n)=(3,33),解密密鑰(私鑰)為:KR=(d,n)=(7,33)。

2)英文數(shù)字化

將明文信息數(shù)字化,并將其以每塊兩個(gè)數(shù)字進(jìn)行分組。假定明文英文字母編碼表為按字母順序排列的數(shù)值,如表4所示。

 

 

 

 

表4 明文英文字母編碼表

則可得到分組后的key的明文信息為:11,05,25。

3)明文加密

用戶(hù)加密密鑰(3,33)將數(shù)字化明文分組信息加密成密文。由C≡Me(mod n)得:

C1=(M1)d(modn)=113(mod33)=11

C2=(M2)d(modn)=053(mod33)=26

C3=(M3)d(modn)=253(mod33)=16

因此,得到相應(yīng)的密文信息為:11,26,16。

4)密文解密

用戶(hù)B收到密文后,若要將其解密,則只需要計(jì)算M≡Cd(mod n),即:

M1=(C1)d(modn)=117(mod33)=11

M2=(C2)d(modn)=317(mod33)=05

M3=(C3)d(modn)=167(mod33)=25

用戶(hù)B得到的明文信息為:11,05,25。根據(jù)上面的編碼表將其轉(zhuǎn)換為英文,即可得到恢復(fù)后的原文“key”。

當(dāng)然,實(shí)際運(yùn)用要比這復(fù)雜得多。由于RSA算法的公鑰私鑰的長(zhǎng)度(模長(zhǎng)度)須達(dá)到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公鑰私鑰的生成、加密解密模指數(shù)的運(yùn)算都有一定的計(jì)算程序,需要依賴(lài)計(jì)算機(jī)的高速計(jì)算能力來(lái)完成。

4、RSA加解密算法的安全性

在RSA密碼應(yīng)用中,公鑰KU是被公開(kāi)的,即e和n的數(shù)值可以被第三方竊聽(tīng)者得到。破解RSA密碼的關(guān)鍵在于從已知的e和n的數(shù)值(n等于pq)中求出d的數(shù)值,從而得到私鑰以破解密文。從上文中的公式:d≡e-1(mod((p-1)(q-1)))或de≡1(mod((p-1)(q-1)))可以看出,密碼破解的實(shí)質(zhì)問(wèn)題是:從pq這一數(shù)值求出(p-1)和(q-1)。換句話(huà)說(shuō),只要求出p和q的值,就能求出d的值進(jìn)而得到私鑰。

若p和q是大素?cái)?shù),則從它們的積pq去分解因子p和q,就是一個(gè)公認(rèn)的數(shù)學(xué)難題。例如,當(dāng)pq大到1024位時(shí),迄今為止還沒(méi)有人能夠利用任何計(jì)算工具完成其分解因子這一任務(wù)。因此,RSA從被提出到現(xiàn)在40余年,經(jīng)歷了各種攻擊的考驗(yàn),逐漸為人們所接受,被普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。

然而,雖然RSA的安全性依賴(lài)于大數(shù)的因子分解,但并沒(méi)有從理論上證明破譯RSA的難度與大數(shù)分解的難度等價(jià),即RSA的重大缺陷是無(wú)法從理論上把握它的保密性能。

此外,RSA的缺點(diǎn)還有:

① 產(chǎn)生密鑰很麻煩,會(huì)受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密;

② 分組長(zhǎng)度太大,為保證安全性,n至少需要600 bits 以上,運(yùn)算代價(jià)高,速度慢,較對(duì)稱(chēng)密碼算法慢幾個(gè)數(shù)量級(jí),且隨著大數(shù)分解技術(shù)的發(fā)展,這個(gè)長(zhǎng)度還在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。

因此,使用RSA只能加密少量數(shù)據(jù),大量的數(shù)據(jù)加密還要依靠對(duì)稱(chēng)密碼算法。 

責(zé)任編輯:龐桂玉 來(lái)源: 計(jì)算機(jī)與網(wǎng)絡(luò)安全
相關(guān)推薦

2016-09-27 19:30:11

2022-01-26 07:25:09

PythonRSA加解密

2011-08-01 14:36:06

加密RSA

2018-04-23 08:50:54

2018 RSA聯(lián)網(wǎng)設(shè)備物聯(lián)網(wǎng)安全

2022-11-08 10:19:15

2017-02-13 10:25:44

2019-04-08 11:18:09

2018-12-25 08:44:56

2020-12-08 06:00:00

物聯(lián)網(wǎng)物聯(lián)網(wǎng)安全數(shù)據(jù)安全

2020-12-24 14:55:00

物聯(lián)網(wǎng)物聯(lián)網(wǎng)安全安全威脅

2019-10-16 09:01:22

HTTPS RSA解密

2014-04-18 10:28:54

2022-09-27 15:25:34

物聯(lián)網(wǎng)物聯(lián)網(wǎng)安全

2020-11-22 08:00:13

物聯(lián)網(wǎng)物聯(lián)網(wǎng)安全

2018-12-20 11:04:05

物聯(lián)網(wǎng)安全信息安全物聯(lián)網(wǎng)

2023-12-17 14:19:57

2015-04-28 15:37:23

2021-04-16 14:14:26

物聯(lián)網(wǎng)安全技巧

2019-03-14 08:35:47

物聯(lián)網(wǎng)安全物聯(lián)網(wǎng)IOT

2022-04-13 13:42:55

物聯(lián)網(wǎng)漏洞安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)