CWE-780:RSA演算法未使用最優非對稱加密填充漏洞
不誇張地說,只要有計算機網路的地方就有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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對稱加密、非對稱加密、RSA(總結)加密
- 非對稱加密演算法-RSA演算法加密演算法
- RSA 非對稱加密&解密加密解密
- RSA非對稱加密演算法淺析加密演算法
- 第四篇:非對稱加密及RSA加密演算法加密演算法
- 非對稱加密--RSA原理淺析加密
- 非對稱加密技術- RSA演算法數學原理分析加密演算法
- 非對稱演算法----RSA演算法演算法
- 非對稱加密演算法RSA中的公鑰和私鑰加密演算法
- RSA非對稱加密演算法中的金鑰對生成與傳輸加密演算法
- 前後端資料加密傳輸 RSA非對稱加密後端加密
- 對稱加密與非對稱加密加密
- 非對稱加密演算法的思考加密演算法
- 資料加密(對稱加密和非對稱加密)加密
- RSA 非對稱加密&解密,超長字串分塊處理加密解密字串
- 20.2 OpenSSL 非對稱RSA加解密演算法解密演算法
- 編碼與加密(對稱加密與非對稱加密)加密
- PHP中使用OpenSSL生成RSA公鑰私鑰及進行加密解密示例(非對稱加密)PHP加密解密
- 對稱加密和非對稱加密(一)初步理解加密
- 應用加密1;非對稱加密演算法揭祕加密演算法
- https中的對稱加密和非對稱加密HTTP加密
- 加密原理詳解:對稱式加密VS非對稱式加密加密
- 對稱加密、非對稱加密、RSA、訊息摘要、數字簽名、數字證書與HTTPS簡介加密HTTP
- 非對稱加密體系加密
- 非對稱加密與OpenSSL加密
- ssh與非對稱加密加密
- 非對稱加密與 jwt加密JWT
- Android 安全加密:非對稱加密Android加密
- Android安全加密:非對稱加密Android加密
- JWT令牌生成採用非對稱加密演算法JWT加密演算法
- Java安全之對稱加密、非對稱加密、數字簽名Java加密
- Java加密技術(七)——非對稱加密演算法最高階ECCJava加密演算法
- 使用phpopenssl擴充套件實現非對稱加密PHP套件加密
- 一文搞懂對稱加密:加密演算法、工作模式、填充方式、程式碼實現加密演算法模式
- 寫給開發人員的實用密碼學(七)—— 非對稱金鑰加密演算法 RSA/ECC密碼學加密演算法
- 對稱加密演算法----DES加密演算法加密演算法
- golang 中,非對稱加密的實現Golang加密
- 非對稱加密技術:共享祕鑰加密