日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機站
  • 小程序

    汽車測試網(wǎng)

  • 公眾號
    • 汽車測試網(wǎng)

    • 在線課堂

    • 電車測試

密碼學(xué)基礎(chǔ)--RSA簽名,你該選什么填充模式?

2024-08-07 08:26:00·  來源:汽車MCU軟件設(shè)計  
 

目錄

1. OAEP

1.1 加密過程

1.2 解密過程

2 PSS

2.1 簽名流程

2.2 驗簽流程

3.小結(jié)


1. OAEP


填充模式OAEP(Optimal Asymmetric Encryption Padding),僅用于加解密。


1.1 加密過程


使用該填充模式進行加密總共分為三大步驟:(1)數(shù)據(jù)長度檢查檢查Lable長度是否超過所選Hash函數(shù)所能計算的長度,本程序中默認label長度為0;檢查待加密消息m字節(jié)長度是否超過 k(模數(shù)長度)-2*hLen(所選哈希函數(shù)摘要長度)-2;例如使用MGF(mask generation function)選擇SHA512時,使用1024bit長度的密鑰就不能進行加密。(2)基于EME-OAEP進行數(shù)據(jù)編碼和填充具體流程如下:

圖片

圖 1 OAEP填充流程


DB:data block;PS:Padding string;EM:encoded message


  • 如果檢查到輸入的label為空,那么對應(yīng)Hash值如下:


MD 5 =    d41d8cd9 8f00b204 e9800998 ecf8427e



SHA-1 =   da39a3ee 5e6b4b0d 3255bfef 95601890 afd80709



SHA-256=  e3b0c442 98fc1c14 9afbf4c8 996fb924



                   27ae41e4 649b934c a495991b 7852b855



SHA-384=  38b060a7 51ac9638 4cd9327e b1b1e36a



                   21fdb711 14be0743 4c0cc7bf 63f6e1da



                   274edebf e76f65fb d51ad2f1 4898b95b



SHA-512=  cf83e135 7eefb8bd f1542850 d66d8007



                   d620e405 0b5715dc 83f4a921 d36ce9ce



                   47d0d13c 5d85f2b0 ff8318d2 877eec2f



                   63b931bd 47417a81 a538327a f927da3e


  • 生成PS字節(jié)串,長度為k-mLen-2*hLen -2,填充為00;
  • 拼接DB = lHash || PS || 0x01 ||M;
  • 生成與Hash函數(shù)摘要相同的隨機數(shù)Seed,通過MGF進行摘要計算后和DB進行異或,作為MaskedDB;
  • MaskedDB經(jīng)過MGF再次進行摘要計算后與Seed進行異或,得到MaskedSeed;
  • 拼接EM = 00||MaskedSeed||MaskedDB,得到最終的編碼消息


 (3)使用公鑰進行RSAEP加密,得到密文C = m^e mod n ,(n,e)為公鑰參數(shù)


1.2 解密過程


解密過程同樣也分為三個大步驟:(1)長度檢查:

  • 如果密文長度不能模數(shù)長度,返回錯誤,不進行下一步;
  • 如果模數(shù)長度小于2* hLen +2,則返回錯誤。


(2)RSA解密,公式 m = C^d mod n,d為私鑰冪數(shù)、n為模數(shù);


(3)最后解碼解密出來的明文M,如下圖所示:

圖片

圖 2 OAEP解碼過程


  • 根據(jù)所選Hash函數(shù)對Label生成lHash值,根據(jù)加密時EM的數(shù)據(jù)結(jié)構(gòu)將M拆成 Y || maskedSeed || maskedDB;Y為單字節(jié),maskedDB長度為模數(shù)k - hLen - 1,maskedSeed 為Hash長度。使用mgf對maskedDB做運算,得到seedMask;
  • SeedMask xor MaskedSeed得到Seed;
  • Seed通過mgf得到dbMask;
  • MaskedDB xor dbMask得到最終的明文,然后根據(jù)字節(jié)長度截取出M,最后得到效果如下:

圖片

圖 3 OAEP填充模式加解密效果


2.PSS


填充模式PSS(Probabilistic Signature Scheme),僅用于簽名驗簽。如選用PSS進行簽名、驗簽,程序中鹽值長度配置為DIGEST_LENGTH;mgf支持MD5、SHA224\256\384\512,與簽名使用的Hash函數(shù)一致。


2.1 簽名流程


其簽名流程如下:(1)根據(jù)PSS需求將原始數(shù)據(jù)M進行編碼,得到與模數(shù)相當(dāng)長度的數(shù)據(jù)塊EM,編碼規(guī)則如下圖所示:

圖片

圖 4 PSS填充過程


特別注意,


Pad1 = 0x0000 0000,


Pad2 = 0x00.... || 01,需要填充至模數(shù)長度k-len(maskedSeed)-1。


(2)然后使用私鑰對EM進行加密,得到最終簽名s = m^d mod n;


2.2 驗簽流程


驗簽過程就是對簽名進行解密,然后比對EM的過程,具體不再贅述, 如下圖所示:

圖片

圖 5 PSS驗簽過程


最終效果如下圖所示:


圖片


3.小結(jié)


一般來講,RSA多用在數(shù)字簽名上,加解密上首先是能加解密的數(shù)據(jù)長度受限于模數(shù)長度,其次就是性能問題。那么在數(shù)字簽名領(lǐng)域,多推薦用PSS填充方式,契合版本RFC 3447:PKCS#1 v2.1,至于以前老版本PKCS#1 v1.5的填充Muscle v01也是可以兼容的。PSS看起來是要比PKCS#1 v1.5簽名填充更為復(fù)雜,有興趣可以回顧:為什么RSA公鑰加密結(jié)果不是固定值?_rsa加密每次結(jié)果一樣嗎-CSDN博客


圖片        

圖6 PKCS#1V15簽名填充


但從安全性角度來看,由于其可變長度的鹽值Salt的不確定性,偽造簽名更加困難,同時在2001有專家專門針對PSS發(fā)表安全證明論文;


值得一提的是,如果鹽值為0,那么簽名值就變成唯一確定的。

分享到:
 
反對 0 舉報 0 收藏 0 評論 0
滬ICP備11026917號-25