RSA加密的填充模式
http://blog.chinaunix.net/uid-21880738-id-1813144.html
跟DES,AES一樣, RSA也是一個塊加密算法( block cipher algorithm),總是在一個固定長度的塊上進行操作。
但跟AES等不同的是, block length是跟key length 以及所使用的填充模式 有關的。
1)RSA_PKCS1_PADDING 填充模式,最常用的模式
要求:
輸入 必須 比 RSA 鑰模長(modulus) 短至少11個字節, 也就是 RSA_size(rsa) – 11
如果輸入的明文過長,必須切割, 然后填充
輸出 和modulus一樣長
根據這個要求,對于512bit的密鑰, block length = 512/8 – 11 = 53 字節
2) RSA_PKCS1_OAEP_PADDING
RSA_size(rsa) – 41
3)for RSA_NO_PADDING 不填充
|
RSA_size(rsa)
一般來說, 我們只用RSA來加密重要的數據,比如AES的key, 128bits = 16
加密的輸出,總是等于key length
對同樣的數據,用同樣的key進行RSA加密, 每次的輸出都會不一樣; 但是這些加密的結果都能正確的解密
預備知識
I2OSP – Integer-to-Octet-String primitive 大整數轉換成字節串
I2OSP (x, xLen)
輸入: x 待轉換的非負整數
xLen 結果字節串的可能長度
加密原理 RSAEP ((n, e), m)
輸入: (n,e) RSA公鑰
m 值為0到n-1 之間一個大整數,代表消息
輸出: c 值為0到n-1之間的一個大整數,代表密文
假定: RSA公鑰(n,e)是有效的
步驟:
1. 如果m不滿足 0
2. 讓 c = m^e % n (m的e次冪 除以n ,余數為c)
3. 輸出 c
解密原理 RSADP (K, c)
輸入: K RSA私鑰,K由下面形式:
一對(n,d)
一個五元組(p, q, dP, dQ, qInv)
一個可能為空的三元序列(ri, di, ti), i=3,…,u
c 密文
輸出: m 明文
步驟:
1. 如果密文c不滿足 0 < c < n-1, 輸出 ‘ciphertext repersentative out of range’
2. 按照如下方法計算m:
a. 如果使用私鑰K的第一種形式(n, d), 就讓 m = c^d % n (c的d次冪,除以n,余數為m)
b. 如果使用私鑰K的第二種像是(p,q, dP, dQ, qInv)和(ri, di, ti),
加密 RSAES-PKCS1-V1_5-ENCRYPT ((n, e), M)
輸入: (n, e) 接收者的公開鑰匙, k表示n所占用的字節長度
M 要加密的消息, mLen表示消息的長度 mLen ≤ k – 11
輸出: C 密文, 占用字節數 也為 k
步驟:
1.長度檢查, 如果 mLen > k-11, 輸出 “message too long”
2. EME-PKCS1-v1_5 編碼
a) 生成一個 偽隨機非零串PS , 長度為 k – mLen – 3, 所以至少為8, 因為 k-mLen>11
b) 將PS, M,以及其他填充串 一起編碼為 EM, 長度為 k, 即:
EM = 0×00 || 0×02 || PS || 0×00 || M
3.RSA 加密
a)將EM轉換成一個大證書m
m = OS2IP(EM)
b)對公鑰(n,e) 和 大整數 m, 使用RSAEP加密原理,產生一個整數密文c
c = RSAEP((n,e0, m)
c)將整數c轉換成長度為k的密文串
C = I2OSP(c, k)
4.輸出密文C
解密 RSAES-PKCS1-V1_5-DECRYPT (K, C)
輸入: K 接收者的私鑰
C 已經加密過的密文串,長度為k (與RSA modulus n的長度一樣)
輸出: M 消息明文, 長度至多為 k-11
步驟:
1. 長度檢查:如果密文C的長度不為k字節(或者 如果 k<11), 輸出“decryption error”
2. RSA解密
a. 轉換密文C為一個大整數c
c = OS2IP(C)
b. 對RSA私鑰(n,d)和密文整數c 實施解密, 產生一個 大整數m
m = RSADP((n,d), c)
如果RSADP輸出’ciphertext representative out of range’(意味c>=n), 就輸出’decryption error”
c. 轉換 m 為長度為k的EM串
EM = I2OSP(m, k)
3. EME-PKCS1-v1_5 解碼:將EM分為 非零的PS串 和 消息 M
EM = 0×00 || 0×02 || PS || 0×00 || M
如果EM不是上面給出的格式,或者PS的長度小于8個字節, 那么就輸出’decryption error’
5. 輸出明文消息M
簽名 RSASSA-PSS-SIGN (K, M)
輸入 K 簽名者的RSA私鑰
M 代簽名的消息,一個字節串
輸出 S 簽名,長度為k的字節串,k是RSA modulus n的字節長度
步驟:
1. EMSA-PSS encoding: 對消息M實施EMSA-PSS編碼操作,產生一個長度為 [(modBits -1)/8]的編碼消息EM?!≌麛?OS2IP(EM)的位長最多是 modBits-1, modBits是RSA modulus n的位長度
EM = EMSA-PSS-ENCODE (M, modBits – 1)
注意:如果modBits-1 能被8整除,EM的字節長比k小1;否則EM字節長為k
2. RSA簽名:
a. 將編碼后的消息 EM 轉換成一個大整數m
m = OS2IP(EM)
b. 對私鑰K和消息m 實施 RSASP1 簽名,產生一個 大整數s表示的簽名
s = RSASP1 (K, m)
c. 把大整數s轉換成 長度為k的字串簽名S
S = I2OSP(s, k)
3.輸出簽名S
驗證簽名 RSASSA-PSS-VERIFY ((n, e), M, S)
輸入: (n,e) 簽名者的公鑰
M 簽名者 發來的消息,一個字串
S 待驗證的簽名, 一個長度為k的字串。k是RSA Modulus n的長度
輸出: ’valid signature’ 或者 ‘invalid signature’
步驟:
1. 長度檢查: 如果簽名S的長度不是k, 輸出’invalid signature’
2. RSA驗證
a) 將簽名S轉換成一個大整數s
s = OS2IP (S)
b) 對公鑰 (n,e) 和 s 實施 RSAVP1 驗證, 產生一個 大整數m
m = RSAVP1 ((n, e), s)
c) 將m 轉換成編碼的消息EM,長度 emLen = [ (modBits -1)/8 ] 字節?!odBits是RSA modulus n的位長
EM = I2OSP (m, emLen)
注意: 如果 modBits-1可以被8整除,那么emLen = k-1,否則 emLen = k
3. EMSA-PSS驗證: 對消息M和編碼的EM實施一個 EMSA-PSS驗證操作,決定他們是否一致:
Result = EMSA-PSS-VERIFY (M, EM, modBits – 1)
4. 如果Result = “consistent“,那么輸出 ”valid signature”
否則, 輸出 ”invalid signature”
簽名,還可以使用 EMSA-PKCS1-v1_5 encoding編碼方法 來產生 EM:
EM = EMSA-PKCS1-V1_5-ENCODE (M, k)
驗證簽名是,使用 EMSA-PKCS1-v1_5對 M產生第2個編碼消息EM’
EM’ = EMSA-PKCS1-V1_5-ENCODE (M, k) .
然后比較 EM和EM’ 是否相同
RSA的加密機制有兩種方案一個是RSAES-OAEP,另一個RSAES-PKCS1-v1_5。PKCS#1推薦在新的應用中使用RSAES- OAEP,保留RSAES-PKCS#1-v1_5跟老的應用兼容。它們兩的區別僅僅在于加密前編碼的方式不同。而加密前的編碼是為了提供了抵抗各種活動的敵對攻擊的安全機制。
PKCS#1的簽名機制也有種方案:RSASSA-PSS和RSASSA-PKCS1-v1_5。同樣,推薦RSASSA-PSS用于新的應用而RSASSA-PKCS1-v1_5用于兼容老的應用。
RSAES-OAEP-ENCRYPT ((n, e), M, L)
選項: Hash 散列函數(hLen 表示 散列函數的輸出的字節串的長度)
MGF 掩碼生成函數
輸入: (n,e) 接收者的RSA公鑰(k表示RSA modulus n的字節長度)
M 待加密的消息,一個長度為mLen的字節串 mLen <= k – 2 hLen -2
L 同消息關聯的可選的標簽,如果不提供L,就采用空串
輸出: C 密文,字節長度為k
步驟:
1.長度檢查
a. 如果L的長度超過 hash函數的輸入限制(對于SHA-1, 是2^61 -1),輸出 label too long
b. mLen > k – 2hLen -2, 輸出 message too long
2. EME-OAEP編碼
總結
以上是生活随笔為你收集整理的RSA加密的填充模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机GSM--SIM卡体系结构
- 下一篇: PSAM卡---中国人民银行PSAM卡管