CWE-780:RSA演算法未使用最優非對稱加密填充漏洞

zktq2021發表於2021-08-17

不誇張地說,只要有計算機網路的地方就有RSA演算法,非對稱加密演算法的特點是加密秘鑰和解密秘鑰不同,秘鑰分為公鑰和私鑰,用私鑰加密的明文,只能用公鑰解密,用公鑰加密的明文,只能用私鑰解密。

RSA非對稱加密可以用來資料加密及數字簽名和身份認證。非對稱加密演算法的優點是安全性高,並且演算法強度複雜,安全性依賴於演算法與金鑰,但也由於演算法複雜使得加密解密速度不如對稱加密解密快。在RSA演算法中如果未使用最優非對稱加密填充將會產生漏洞。

什麼是RSA演算法未使用最優非對稱加密填充?

軟體使用了RSA演算法,但並未使用最佳的非對稱加密填充方式(OAEP),而如果不使用OAEP,那麼就會使得網路攻擊相對容易,攻擊者只需較少的工作即可解密資料或從密文中推斷出特徵、模式。

什麼是填充方式?

填充模式在程式碼中體現為padding,通常與加密演算法一起使用,以使純文字難以預測,使攻擊工作變得更加複雜。

RSA加密填充的特點是什麼?

RSA加密常用的padding有三種,最優非對稱填充(OAEP)對應下述RSA_PKCS1_OAEP_PADDING填充方式:

RSA_PKCS1_PADDING

RSA_PKCS1_OAEP_PADDING

RSA_NO_PADDIN

與對稱加密演算法DES,AES一樣,RSA演算法也是一種塊加密演算法( block cipher algorithm),總是在一個固定長度的塊上進行操作。但跟AES等不同的是,block length是跟key length有關的。

每次RSA加密的明文長度是受RSA填充模式限制的,RSA每次加密的塊長度就是key length。

不同模式下的區別:

不同的padding模式下,使用相同長度的金鑰可以加密的資料最大長度不同;

不同金鑰長度下,使用相同的padding模式可以加密的資料最大長度也不同;

RSA常用的金鑰長度有1024bits、2048bits,理論上1024bits的金鑰可以加密的資料最大長度為1024bits(即1024/8 = 128bytes)。2048bits的金鑰可以加密的資料最大長度為2048bits(2048/8 = 256bytes)。實際應用中RSA經常與填充技術(padding)一起使用,可以增加RSA的安全性。

為什麼要使用最佳非對稱加密填充(OAEP)?

填充技術關係到RSA安全性的高低,原因大致如下:

在弱安全填充模式下,RSA加密是確定的,即給定一個金鑰,特定明文總會對映到特定的密文。攻擊者可以根據密文中統計資訊獲取明文的一些資訊。

填充技術如果比較弱,那麼較小的明文和小型公開指數將易於受到攻擊。

RSA有個特性叫做延展性,如果攻擊者可以將一種密文轉換為另一種密文,而這種新密文會導致對明文的轉換變得可知,這種特性並沒有解密明文,而是以一種可預測的方式操縱了明文,比如:銀行交易系統中,攻擊者根據新密文,直接去修改原密文中金額的資料,可以在使用者和接受方無法感知的情況下進行修改。

該缺陷漏洞的防範和修補方法有哪些?

在程式碼中使用OAEP建立RSA密碼:

rsa= javax.crypto.Cipher.getInstance("RSA/ECB/OAEPWithMD5AndMGF1Padding");

含有“RSA演算法未使用最優非對稱加密填充”安全漏洞的程式碼樣例:

使用 Wukong(悟空)軟體程式碼安全漏洞檢測修復系統檢測上述程式程式碼,則可以發現程式碼中使用了弱安全加密填充方式,導致存在安全隱患。如下圖:

“RSA演算法未使用最優非對稱加密填充”在CWE中被編號為CWE-780: Use of RSA Algorithmwithout OAEP。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2787314/,如需轉載,請註明出處,否則將追究法律責任。

相關文章