非對稱加密——RSA

2021-02-15 玄同安全
導語 : 本文為「小玄同學講安全」系列文章第五篇,主要介紹的是非對稱加密。本周先介紹RSA算法,希望能為非對稱加密的講解開個好頭~

 

      在前兩篇文章中我們介紹了DES、AES、IDEA等多種對稱加密算法,雖然這些算法通過複雜的運算邏輯來保證其加密的安全性,但所有對稱加密算法都會存在密鑰配送問題。

        密鑰配送問題的存在是因為對稱加密算法在加密和解密時使用的是相同的密鑰,所以當信息發送者將密文傳遞給接收者的同時,也需要傳遞用以解密的密鑰。這就給了竊聽者以可乘之機。所以為了實現真正的安全,需要解決密鑰的配送問題,保證其在配送過程中不被竊聽者獲取和更改。這就需要非對稱加密了。

本文將主要介紹非對稱加密的方法、RSA算法的原理以及常見的攻擊方法與對策。

一、非對稱加密

1.1 簡介

        非對稱加密又稱為公鑰加密,這裡說它是非對稱加密是相對對稱加密而言的。對稱加密的加密密鑰和解密密鑰是相同的,而非對稱加密的這兩個密鑰是不同的。

        在非對稱加密中,其加密密鑰由密文的接收者發出,密文的發送者利用該密鑰對明文進行加密,然後將密文發出,因為它是可以被公開的,所以又稱為「公鑰」;解密密鑰僅密文接收者自己擁有,且密文只能被該密鑰解密,因此又稱為「私鑰」。

公鑰和私鑰的關係可以用三個詞來形容:

數學:即數學上的關係。私鑰是基於公鑰、利用數學方法生成的;

成對:非對稱加密的密鑰是成對出現的,即(公鑰,私鑰);

一一對應:對於一個密鑰對A(公鑰A,私鑰A),公鑰A加密得到的密文,只有密鑰A才能夠解密。

2.1 加密流程

如上圖所示,非對稱加密需要經歷以下五個步驟: 

密文接收者生成密鑰對;密文接收者保留私鑰,將公鑰發送給密文發送者;密文發送者收到公鑰後,利用公鑰進行加密,生成密文;密文發送者將密文發送給密文接收者;收到密文後,密文接收者利用私鑰解密,得到明文信息。

        在上述過程中,公鑰和密文是有被竊取的風險的(也就是圖中標紅的兩部分內容)。因為只要私鑰才能解密,所以只要密文接收者能夠保管好私鑰,就不容易出現密文被破解的情況。但如果公鑰被竊取,就容易遭受中間人攻擊,所以需要公鑰證書來保證公鑰的正確性。

      不同非對稱加密算法的加密流程是相同的,但密鑰對生成的原理、加解密的原理卻是不同的。下面這一節我們來具體了解一下現在使用最廣泛的非對稱加密算法——RSA。

二、RSA

RSA算法發布於1977年,被廣泛應用於數字籤名和信息加密傳輸的場景中。

2.1 加密原理

        假設公鑰是(E,N),沒錯,每個公鑰和私鑰都是由兩個數字組成的。而且,在RSA算法中的明文和密文也都是用數字表示的。所以在加密前需要將明文轉換為一個不大於N的二進位數字(不大於N的原因我們在「2.2 解密原理」中進行講解)。

        其中「mod」是指求模運算。也就是說,密文是明文的E次方除以N的餘數。所以密文一定小於或等於N。

2.2 解密原理

        假設私鑰是(D,N)。這裡的N與公鑰中的N是相同的。

        同理,明文就是密文的D次方除以N的餘數。這也就是為什麼明文不能大於N的原因。

        以上就是RSA算法的加解密原理。其實RSA算法的加解密原理比我們之前認識的那些對稱加密算法都要簡單得多,其公鑰和私鑰的生成也是保障其安全性的關鍵。

2.3 密鑰對的生成

        由上述加解密的原理可知,RSA算法的密鑰對是由E、D、N這三個數字組成的。所以密鑰對的生成過程實質上就是這三個數字的生成過程。同時中間量——L也是這個過程中的一個很重要的值。

接下來我們就來分別討論一下這四個值是如何生成的。

1. N

        這裡的p和q兩個隨機的、足夠大的質數。因為這兩個質數還被應用到後續的步驟中,所以p和q的保密對RSA的安全性至關重要。然後我們來討論一下如何保證p、q的「隨機」、「足夠大」和「是質數」。

(1)p、q的隨機性

        p和q是通過偽隨機數生成器生成的。所以我們需要選擇一個好的偽隨機數生成器來保證p和q的隨機性。如果生成的p或q不是質數,那就需要再重新生成一個新的值,直到兩者都是質數為止。那如何判斷p和q是不是質數呢?

(2)p、q是質數

        質數,也稱為素數,其約數就只有兩個——1和它本身。但我們判斷p、q是不是質數的方法不是看它是不是能不能分解質因數,而是通過專業的數學方法——費馬測試和米勒∙拉賓測試(這兩種測試方法的參考連結:http://www.matrix67.com/blog/archives/234)。

(3)p、q足夠大

        保證p、q足夠大的原因是要保證N足夠大。N作為公鑰的一部分是被公開的,所以要防止N被分解。如果N能被分解,破解者就可以推測出私鑰的值,進而破解密文。

        目前,NIST建議RSA的密鑰安全強度(也就是「N」)是2048 bits。但在2030年之後,就應增加到3072 bits。

2. L

L是「 p-1 」和「 q-1 」的最小公倍數,利用公式表示如下:

3. E

對於E的取值,有兩個要求:一是L的取值範圍是(1,L);二是E和L的最大公約數為1,即E和L互質。用公式表示如下:

這裡,E的生成仍需要藉助偽隨機數生成器,同時可以藉助歐幾裡得的輾轉相除法來判斷E和L是否互質。

4. D

D的取值要求用公式表示如下:

這樣就生成了RSA加密的密鑰對——[(E,N),(D,N)]

綜上所述,密鑰對的生成流程如下圖所示: 

2.4 對RSA的攻擊方法及對策

1.對模數N的質因數分解攻擊

        由密鑰對的生成過程可知,p、q是整個運算過程的基礎,如果知道p、q,就可以求出對應的私鑰。

        雖然RSA算法的p、q是未知的,但「N = p × q」是已知的。所以如果N能被質因數分解,就能夠求出D,就破解了RSA。也就是說,N值越大,越不容易被質因數分解,RSA算法也就越安全。NIST提供的關於RSA密鑰強度與近似的對稱加密密鑰強度的對應關係如下表所示:

RSA密鑰強度

對稱加密密鑰強度(對應算法)

1024

80(2DES)

2048

112(3DES)

3072

128(AES-128)

7680

192(AES-192)

15360

256(AES-256)

        截止至2019年,能被分解的N的最大長度為795 bits。所以NIST建議目前的RSA密鑰安全強度是2048 bits,但在2030年後,密鑰安全強度需增加至3072 bits

2.公共模數攻擊

        公共模數是指一個多用戶系統只使用一個模數N,也就是說不同的用戶擁有相同的N和不同的E、D,當然他們的p、q、L也是相同的。這次情況下,他們的公鑰是互質的(因為gcd( E,L )= 1),所以若同一消息用不同的公鑰加密,其密文不需要私鑰也能被解密

        假設公共模數為N,兩個加密公鑰為E1、E2,明文消息為P,對應的密文分別為C1、C2。所以有:

C1 = P^E1 mod NC2 = P^E2 mod N

        攻擊者是很容易獲得N、E1、E2 和C1、C2的,通過這些值就可以計算出原來的明文消息P。計算過程如下:

因為:E1、E2互質;所以:存在不全為零的常數r、s,使得gcd( E1 ,E2 )= r∙E1 + s∙E2 = 1;設r < 0;則C1^r ∙ C2^s = (P^E1 mod N)^r ∙(P^E2 mod N)^s = P^(r∙E1 + s∙E2) mod N = P mod N;如果P < N,則P mod N = P,此時就得到了明文消息P。

        綜上所述,多個用戶使用同一模數N是很不安全的。因此在多用戶系統中必須採用多個模數。

3.選擇密文攻擊

        選擇密文攻擊指的是攻擊者能選擇不同的密文,並擁有對應的明 文,由此推出想要的信息。一般攻擊者會偽裝若干信息,讓擁有私鑰的用戶籤名,由此獲得有用的明文-密文對,然後推算想要的信息。 

        常見的選擇密文攻擊主要有以下兩種情況:

情況一:攻擊者想要偽造用戶對消息X的籤名

        攻擊者先生成兩個消息X1、X2,使得x = (X1∙X2)mod N。然後騙取用戶對X1、X2的籤名,分別為S1 = X1^D mod N、S2 = X2^D mod N。然後攻擊者就可以計算出消息X的籤名,計算過程如下:

S = X^D mod N   = ((X1∙X2)mod N )^D mod N   = ((X1^D mod N )∙(X2^D mod N ))mod N  = (S1∙S2)mod N

情況二:攻擊者想要破解他竊取到的密文

        假設攻擊者竊取的密文是C = ME mod N(M是對應的明文)。攻擊者首先生成一個小於N的隨機數——R,計算C』 = RE mod N。令C』』 = (C∙C')mod N,然後騙取用戶對C』』的籤名,為M'' = C』'^D mod N。這樣攻擊者就可以計算出密文C對應的明文M,計算過程如下:

M = C^D mod N    = ( C^D∙C』^D∙C』^(-D) ) mod N    = ( C』』^D∙C』^(-D) ) mod N    = ( C』』^D∙(C』^D mod N)^-1 ) mod N    = ( C』』^D ∙ R^-1 ) mod N    = ( M』』∙ R^-1 ) mod N

        該攻擊方法並不是針對算法本身,所以我們需要注意的是使用該算法的系統和用戶。對策主要有以下兩條:

①私鑰持有者不能對不信任的消息進行籤名;

②籤名時,要先使用哈希函數生成消息摘要,然後再對摘要籤名。

4.低加密指數E攻擊

        對於選定的p、q,雖然選擇一個滿足「gcd( E,L )= 1」的E很容易,但所選擇的E的大小卻非常重要。選擇值較小的E,可加快加密的速度,但也會增加密文被暴力破解以及遭受低加密指數攻擊的風險。

①密文被暴力破解

        若E、明文P都很小,就可容易出現P^E < N的情況。所以密文C = P^E mod N = P^E 。也就是說只要將密文C開E次方就能得到對應的明文P。

②低加密指數攻擊

        若有三個用戶均選擇了E = 3,他們使用了不同的模數N1、N2、N3,並假設N1、N2、N3兩兩互質。

註:若不滿足N1、N2、N3兩兩互質的要求,那破解其私鑰就會變的非常簡單。以N1、N2有公因數為例,它們的公因數就是對應的p、q中的一個,所以就相當於破解了它們對應的p、q值,即破解了私鑰。

當某人想要將同一明文P傳遞給著三個用戶的時候,就會先加密成三個密文,分別為:

C1 = P^3 mod N1C2 = P^3 mod N2C3 = P^3 mod N3

        設C = P^3 mod (N1∙N2∙N3),根據中國剩餘定理可通過N1、N2、N3、C1、C2、C3求出C的值。因為明文P是小於對應模數N1、N2、N3的,所以P3 < N1∙N2∙N3,因此C = P^3,由此即可求出明文P = ∛C。

        可見,對於較小的E,可通過密文C直接算出明文P。因此在計算公鑰指數E的過程中,不能選擇過小的E。

5.中間人攻擊

        中間人攻擊就是主動攻擊者混入發送者和接收者中間,對發送者偽裝成接收者,對接收者偽裝成發送者的攻擊方式。

如圖所示,中間人攻擊可分為以下幾個步驟:

發送者發出請求「請把你的公鑰發送給我」,並被攻擊者竊聽到了;接收者發送公鑰,被攻擊者攔截;攻擊者將自己的公鑰發送給發送者;發送者把用攻擊者公鑰加密的密文發送給接收者,但被攻擊者攔截,然後攻擊者用自己的私鑰破解得到了正確的消息;攻擊者偽造一份消息,並用接收者的公鑰進行加密,發送偽造密文給接收者,使接收者解密獲得的是偽造消息。

針對這種情況,我們需要使用公鑰證書來保證得到的公鑰來自可信任的人。

以上即為五種常見的RSA攻擊方法,一方面我們需要慎重考慮參數的選擇來保證算法本身的安全性,另一方面也需要通過公鑰證書、身份認證、使用哈希函數等輔助手段來保護RSA安全。

參考文獻

【1】RSA公鑰密碼的低指數攻擊.

【2】RSA算法的攻擊方法研究.李家蘭.

【3】RSA 算法中幾種可能洩密的參數選擇.謝建全,陽春華.

【4】圖解密碼技術 第3版.

 

相關焦點

  • TLS/SSL 協議-非對稱加密(RSA)原理
    前面文章學習過 對稱加密的原理,在通信雙方發送完加密的密文之後,需要發送密鑰給對方才能解密,這就要求發送密鑰的信息通道安全可靠
  • JAVA實現非對稱加密
    一、概述非對稱加密算法概述,非對稱主要是相對於對稱加密算法而言的,對稱加密算法有一個密鑰和一個解鑰,非對稱算法有一個公鑰和一個私鑰,這兩個共同組成一個解鑰,才能實現解密。DH:密鑰交換算法,算是非對稱加密算法的起源。RSA:基於因子分解,應用最廣,RSA是可以雙向加密的,私鑰加密,公鑰解密;公鑰加密,私鑰解密,是目前世界上使用最廣的非對稱加密算法。ELGamal:基於離散對數。ECC:橢圓曲線加密。
  • 非對稱加密的應用
    非對稱"大致很好理解,意思和對稱相反,加密也能理解,但是非對稱加密是個什麼玩意兒。在開始聊非對稱加密之前,咱們先來聊聊對稱加密,什麼是對稱加密呢?首先我們要清楚,網絡中有些數據進行傳輸的時候,是需要加密的,比方說https,https中就用到了對稱加密。
  • 對稱加密與非對稱加密
    正好借著這篇文章來說一說。對稱加密與非對稱加密首先我們先來說一下到底什麼是對稱加密,什麼是非對稱加密,這一節主要是用一些例子來介紹一下對稱加密和非對稱加密是什麼,如果你已經了解了,可以跳過本節。對稱加密高中生小明和小紅是一對「地下情侶」,可偏偏他們一個坐在教室前,一個坐在教室後,所以晚自習的時候也只能通過紙條傳情。
  • 為什麼非對稱加密比對稱加密慢?
    對稱加密與非對稱加密首先我們先來說一下到底什麼是對稱加密,什麼是非對稱加密,這一節主要是用一些例子來介紹一下對稱加密和非對稱加密是什麼,如果你已經了解了,可以跳過本節。對稱加密高中生小明和小紅是一對「地下情侶」,可偏偏他們一個坐在教室前,一個坐在教室後,所以晚自習的時候也只能通過紙條傳情。
  • 非對稱加密算法——RSA加密原理及數學推導
    百度百科是這麼說的:RSA是一種非對稱的加密機制。是一種公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種「由已知加密密鑰推導出解密密鑰在計算上是不可行的」密碼體制。是由該算法設計者「Rivest、Shamir、Adleman」的名字構成,(可能看之前還認識「RSA」三個字母,看完後迷糊了。下面將詳細介紹。)
  • RSA 加密是什麼原理?
    RSA是一個非對稱加密的系統,意思是說它有一對密鑰,也就是一個公鑰和一個私鑰。你保管好私鑰,然後公鑰可以隨意的分發出去。數據通過公鑰加密,私鑰解密。反之亦然。正是由於這種特性,在不洩漏私鑰的情況下,中間人只通過公鑰無法竊取到信息。
  • PHP的OpenSSL加密擴展學習(二):非對稱加密
    PHP的OpenSSL加密擴展學習(二):非對稱加密上篇文章,我們了解了關於對稱和非對稱加密的一些相關的理論知識,也學習了使用 OpenSSL 來進行對稱加密的操作。今天,我們就更進一步,學習 OpenSSL 中的非對稱加密是如何實現的。
  • CTF|玩轉RSA加密算法(一)
    RSA是一種非對稱加密算法,它由 公鑰(n/e),私鑰(n/d),明文M和密文C組成。
  • 神奇的非對稱加密
    區塊鏈技術運用的密碼學算法主要為兩個部分:一是哈希算法,二是非對稱加密算法。 哈希算法在之前的文章《人人都能讀懂的比特幣挖礦原理》中有詳細的講解,感興趣的朋友可以查看之前的文章。 那什麼是非對稱加密呢? 了解一個事物,首先了解它的「敵人」——對稱加密。
  • 網絡安全加密——DES、AES、RSA、Base64、MD5加密原理介紹,代碼實現
    :關於DES 3DES加密解密原理不再介紹,現在已經用的不多,如果你的項目還在使用DES加密,還是趕快換吧,換做AES或者更強的非對稱RSA加密。文件為Base64編碼(這裡的Base64格式,長度超過64字符插有換行,生成的私鑰為PKCS#1格式),下面是具體的openssl生成公私鑰步驟:1.生成私鑰,1024bit,PKCS1Padding格式,Base64編碼命令行:openssl genrsa -out rsa_private_key.pem 1024
  • 非對稱加密與安全證書看這一篇就懂了
    這類算法主要對原始內容進行置換和替換得到密文,安全性依賴於算法是否外洩;對稱加密算法,加密和解密使用同一個密鑰。對稱加密算法的出現標誌密碼學進入現代密碼學階段,密文的安全性從依賴於算法轉向依賴於密鑰。常見的對稱加密算法有 DES、3DES、AES;非對稱加密算法,加密和解密使用不同的密鑰。
  • 【非對稱加密】通俗易懂的解釋什麼是非對稱加密
    本期專題:非對稱加密本文原標題:如何用通俗易懂的話來解釋非對稱加密?怎麼給一個完全不懂密碼學的人講解什麼是非對稱(Asymmetric)/公鑰(Public Key)加密體制?本文中,作者試著用生活中的例子來講一講公鑰加密體制。
  • 對稱、非對稱公鑰加密是如何工作的?
    假設我們要用對稱加密技術傳輸數據,並保證數據不被其他人截獲,那麼我們就必須要將密鑰共享給接收者。如果接收者住在附近,我們可以直接用信封或其他線下辦法把密鑰交給他,但是如果接收者來自其他州或其他國家的話該怎麼辦?在這種情況下,發送密鑰的任務變得十分困難,因此要克服此問題,就要用到另一種名為「非對稱加密」的技術。
  • 聊聊對稱/非對稱加密在HTTPS中的使用
    對稱/非對稱加密算法能夠避免信息竊取,而消息摘要算法能夠避免信息篡改。對稱加密算法發送方和接收方需要持有同一把密鑰,發送消息和接收消息均使用該密鑰。相對於非對稱加密,對稱加密具有更高的加解密速度,但雙方都需要事先知道密鑰,密鑰在傳輸過程中可能會被竊取,因此安全性沒有非對稱加密高。
  • 加密算法科普:des、aes加密、對稱、非對稱加密、Hash算法都是啥
    加密算法導讀加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)什麼是對稱密碼算法網絡安全通信中要用到兩類密碼算法,加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。
  • 一文讀懂對稱加密算法、非對稱加密算法和Hash算法
    由於公鑰是可以公開的,用戶只要保管好自己的私鑰即可,因此加密密鑰的分發將變得十分簡單。同時,由於每個用戶的私鑰是唯一的,其他用戶除了可以可以通過信息發送者的公鑰來驗證信息的來源是否真實,還可以確保發送者無法否認曾發送過該信息。非對稱加密的缺點是加解密速度要遠遠慢於對稱加密,在某些極端情況下,甚至能比非對稱加密慢上1000倍。
  • RSA加密是什麼?門禁中哪些環節使用到RSA加密?|小令老師說門禁
    什麼是RSA加密? RSA加密是一種非對稱通信加密技術,在通信安全高要求的場景應用非常廣泛,比如主流支付領域:微信支付、支付寶、京東錢包、QQ錢包。
  • 對稱加密及AES加密算法
    ) 4、AES加密的代碼 5、實際開發中使用AES加密需要注意的地方一、對稱加密1、什麼是對稱加密?(記住這個特點,實際使用是會用到的)4、對稱加密的兩大不足密鑰傳輸問題:如上所說,由於對稱加密的加密和解密使用的是同一個密鑰,所以對稱加密的安全性就不僅僅取決於加密算法本身的強度,更取決於密鑰是否被安全的保管,因此加密者如何把密鑰安全的傳遞到解密者手裡,就成了對稱加密面臨的關鍵問題。
  • 數據傳輸安全:RSA加密算法及其數學原理
    所以,明文傳輸在網絡中是非常不安全的.針對於此,數據加密就誕生了.RSA是計算機網絡中最常見的加密算法,它是一種非對稱加密算法.什麼是非對稱加密算法,先了解一個對稱加密算法.現在數據傳輸加密可靠了,攻擊者只能獲取到密文,沒有秘鑰無法獲取到真實數據.但是秘鑰該怎麼傳輸呢.面基?不現實.把秘鑰加密傳輸?禁止套娃.基於此,非對稱加密也就誕生了.