溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

RSA-PSS 算法的原理和應(yīng)用

發(fā)布時(shí)間:2021-06-18 18:02:09 來源:億速云 閱讀:959 作者:chen 欄目:web開發(fā)

本篇內(nèi)容主要講解“RSA-PSS 算法的原理和應(yīng)用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“RSA-PSS 算法的原理和應(yīng)用”吧!

AS(5):RSA-PSS 算法簡(jiǎn)介

2018年發(fā)布的 TLS v1.3(TLS:Transport Layer Security,傳輸安全層協(xié)議,TLS v1.3 對(duì)應(yīng) RFC  8446)中,其支持的數(shù)字簽名算法有:RSASSA-PKCS1-v1_5、RSASSA-PSS、ECDSA(Elliptic Curve Digital  Signature Algorithm,橢圓曲線簽名算法)、EdDSA(Edwards-Curve Digital Signature  Algorithm,愛德華曲線簽名算法)。

這些算法已經(jīng)是標(biāo)準(zhǔn)(或者是事實(shí)上的標(biāo)準(zhǔn)),不過從某種意義上說,這些算法也代表著美國簽名算法流派。

除美國外,俄羅斯在1994年發(fā)布數(shù)字簽名算法標(biāo)準(zhǔn) GOST R 34.10-94,并在2001年發(fā)布橢圓曲線數(shù)字簽名算法標(biāo)準(zhǔn)GOST R34.10-  2001。GOST R34.10-2001在2012年更新為 GOST R34.10-2012。韓國在1998年發(fā)表韓國基于證書的數(shù)字簽名算法 KCDSA 和  EC- KCDA,對(duì)應(yīng)標(biāo)準(zhǔn)發(fā)布于[88,89]。德國在 2005 年發(fā)布德國橢圓曲線數(shù)字簽名算法標(biāo)準(zhǔn) EC- GDSA。中國在 2012 年發(fā)布 SM2  橢圓曲線數(shù)字簽名算法標(biāo)準(zhǔn),在 2016 年發(fā)布 SM9 標(biāo)識(shí)密碼數(shù)字簽名算法標(biāo)準(zhǔn)。

作為重要的國際標(biāo)準(zhǔn)化組織,ISO/IEC 同樣也發(fā)布了一系列的數(shù)字簽名算法標(biāo)準(zhǔn):ISO/IEC 9796、ISO/ IEC 14888、ISO/IEC  20008、ISO/IEC 18370、ISO/IEC 23264 等等。

弱水三千,只取一瓢。由于文章主題和篇幅的關(guān)系,本文只介紹 RSASA-PSS 算法。

PSS (Probabilistic Signature Scheme,概率簽名方案)是私鑰簽名的一種填充方式。RSASA(RSA Signature  Algorithm,RSA  數(shù)字簽名算法)目前支持兩種算法:RSASSA-PKCS1-v1_5、RSASSA-PSS。由于安全的原因,RSASSA-PKCS1-v1_5  現(xiàn)在的使用場(chǎng)景僅僅是為了兼容(可以參考《童話里都是騙人的》、《夢(mèng)被批得離離散散》、《蜀道難,難于上青天》),當(dāng)前主流推薦使用 RSASSA-PSS  算法。

PSS 方案首先由 Bellare和Rogaway 首先提出,PSS 與 OAEP(Optimal Asymmetric Encryption  Padding,最優(yōu)非對(duì)稱加密填充)非常相像,當(dāng)然 OAEP也是由這兩位大神提出的(OAEP 請(qǐng)參見《蜀道難,難于上青天》)。

Mihir Bellare是加州大學(xué)圣地亞哥分校(UCSD,University of California, San  Diego)計(jì)算機(jī)科學(xué)與工程系的教授。Bellare  于1986年在加州理工學(xué)院獲得學(xué)士學(xué)位,1991年在麻省理工學(xué)院獲得博士學(xué)位。1991年至1995年,Bellare 在IBM擔(dān)任研究員 Bellare  是HMAC、RSA-OAEP、RSA-PSS和OCB的聯(lián)合開發(fā)者。Bellare 是 ACM 和 IACR 的研究員。他曾獲得 ACM 巴黎Kanellakis  理論與實(shí)踐獎(jiǎng),RSA 會(huì)議數(shù)學(xué)獎(jiǎng),David 和 Lucille Packard基金會(huì)科學(xué)與工程獎(jiǎng)學(xué)金,以及NSF職業(yè)獎(jiǎng)( He has received an  ACM Paris Kanellakis Theory and Practice Award, an RSA Conference Award in  Mathematics, a David and Lucille Packard Foundation Fellowship in Science and  Engineering, and an NSF Career award)。

Phillip Rogaway 是美國加州大學(xué)戴維斯分校(UCD,University of California,  Davis)計(jì)算機(jī)科學(xué)系的教授。Rogaway 本科畢業(yè)于加州大學(xué)伯克利分校(UCB,University of California,  Berkeley),并于1991年到麻省理工計(jì)算理論小組攻讀博士學(xué)位(MIT s Theory of Computation group  )。博士畢業(yè)之后,Rogaway 到 IBM 擔(dān)任安全架構(gòu)師,然后于1994年到 UCD 工作。Rogaway 獲得過 Levchin 獎(jiǎng)(2016),PET  獎(jiǎng)(2015),IACR 研究員(2012),ACM巴黎 Kanellakis 獎(jiǎng)(2009),RSA 數(shù)學(xué)獎(jiǎng)(2003)(Levchin prize  (2016), PET Award (2015), IACR Fellow (2012), ACM Paris Kanellakis Award (2009),  RSA Award in Mathematics (2003))。

RSA-PSS 算法的原理和應(yīng)用

圖1 Bellare(左)和 Rogaway(右)

RSA 數(shù)字簽名算法(RSASA)的本質(zhì),仍然是 RSA 加密/解密算法,如圖2所示。

RSA-PSS 算法的原理和應(yīng)用

圖2 RSA 數(shù)字簽名算法示意

從圖2可以看到,RSSSA 分為兩步。

1)將待簽名的 M 進(jìn)行 Hash,從而得到 H

2)將 H 進(jìn)行 RSA 私鑰加密

既然是 RSA 加密,就繞不開 RSA 那個(gè)致命問題——能夠非常簡(jiǎn)單地被選擇密文攻擊所破解(具體請(qǐng)參見《童話里都是騙人的》),于是也就引發(fā)了 RSA  填充算法。

RSASSA-PKCS1-v1_5 采用的就是 RSA_PKCS1_PADDING_v1_5 填充算法,而 RSASSA-PSS 的填充算法則與  RSA_PKCS1_OAEP_PADDING 填充算法比較相像。下面我們就介紹 RSASSA-PSS 算法。

一、RSASSA-PSS 的填充算法

RSASSA-PSS 算法本質(zhì)就是在 RSA 算法的基礎(chǔ)上疊加上一種填充算法(為了便于表述,這種填充算法也可以稱為 RSA-PSS 填充算法,或者  RSA-PSS 編碼),如圖3所示。

RSA-PSS 算法的原理和應(yīng)用

圖3 RSA-PSS 數(shù)字簽名算法示意

圖3中,在 Hash 之后,在 RSA 之前,RSASA-PSS 算法插入了一個(gè) RSA-PSS 填充算法。RSA-PSS  的具體算法,如圖4所示。

RSA-PSS 算法的原理和應(yīng)用

圖4 RSA-PSS 填充算法示意

圖4中,RSA-PSS 填充算法,分為四步。下面我們分別講述這四步。

1.1 M 轉(zhuǎn)換成 M1

通過圖4可以看到,

M1 = p1 || mHash || salt

p1 就是8字節(jié)的0。

mHash = Hash(M),M 是待簽名的消息,Hash 算法當(dāng)前的選擇是 SHA-1。SHA-1 的輸出是20個(gè)字節(jié),所以 mHash  的長度

hLen = 20

salt(鹽值)就是一個(gè)偽隨機(jī)數(shù),它的長度(記為 sLen)一般等于 hLen,當(dāng)前的選擇就是

sLen = hLen

1.2 構(gòu)建 DB

DB(Data Block)的構(gòu)建方式為,

DB = p2 || salt

p2 的值等于若干個(gè)字節(jié)的 0x00 后面跟著1字節(jié)的 0x01。這若干個(gè)字節(jié)記為 xLen,則 xLen 等于,

xLen = emLen - sLen - hLen - 2

其中,emLen 是圖4中 EM 的長度

salt 的值等于1.1節(jié)所描述的 salt 的值。特別強(qiáng)調(diào),兩者必須相等,否則無法驗(yàn)證數(shù)字簽名(具體請(qǐng)參見下面第三節(jié):RSASSA-PSS  的數(shù)字簽名驗(yàn)證)

1.3 MGF

MGF(Mask Generation Function,掩碼生成函數(shù))的相關(guān)介紹,請(qǐng)參見《蜀道難,難于上青天》,這里就不再重復(fù)。另外,RSA-PSS  所采用的 MGF 函數(shù)的輸出,也是 MGF1。

對(duì)于圖4而言,MGF 所對(duì)應(yīng)的輸入和輸出分別是

mask = MGF1(mgfSeed, maskLen, hash)

其中,

mgfSeed = Hash(M1),Hash 函數(shù)選擇 SHA-1

maskLen = emLen - hLen - 1

hash 函數(shù)選擇 SHA-1

1.4 構(gòu)建 EM

EM(Encoded Message)的值等于,

EM = maskedDB || H || bc

其中,

maskedDB = DB xor mask

H = Hash(M1)

bc = 0xBC

其中,bc 的長度是1個(gè)字節(jié),H 的長度是 hLen,maskedDB 的長度(記為 mdbLen)為

mdbLen = emLen - hLen - 1

其中,emLen 的長度就是 EM 的長度。由于接下來要對(duì) EM 進(jìn)行 RSA 加密計(jì)算,所以 EM 的長度滿足 RSA 的要求即可。

二、RSASA-PSS 的簽名算法

經(jīng)過 RSA-PSS 填充以后,接下來的簽名算法,就比較簡(jiǎn)單了,

EM = RSA-PSS(M)

S = RSAEP(EM)

RSA 算法,請(qǐng)參見《RSA 基本算法》、《RSA 的計(jì)算方法》,這里不再重復(fù)。

三、RSASA-PSS 的簽名驗(yàn)證

RSASA-PSS 簽名驗(yàn)證,分為如下幾個(gè)步驟。

3.1 解密

RSASA-PSS 的簽名驗(yàn)證,首先是解密,

EM = RSADP(S)

也即,拿到簽名 S 以后,運(yùn)行 RSA 解密算法,得到解密后的信息 EM。

3.2 分割 EM

得到 EM 以后,接下來就是分割和驗(yàn)證,

maskedDB, H, bc = Split(EM)

最右一個(gè)字節(jié)是 bc,然后從 bc 往左數(shù) hLen 個(gè)字節(jié)是 H,然后剩下的是 maskedDB。

如果最右一個(gè)字節(jié)不是 0xBC,則簽名驗(yàn)證停止(該數(shù)字簽名是非法的)。

3.3 計(jì)算 salt

得到 H 以后,就可以計(jì)算 mask,

mask = MGF1(H, maskLen, hash)

因?yàn)椋?/p>

maskedDB = DB xor mask

所以,

DB = maskedDB xor mask

得到 DB 以后,就可以對(duì)其分割

p2, salt = Split(DB)

其中,salt 是 DB 的最右 sLen 個(gè)字節(jié),剩下的是 p2。

如果 p2 的值不等于若干個(gè)字節(jié)的 0x00 后面跟著1字節(jié)的 0x01,那么驗(yàn)證停止(該數(shù)字簽名是非法的)。

3.4 校驗(yàn) Hash

通過所接收到的 M,計(jì)算 Hash

mHash = Hash(M)

然后構(gòu)建 M1

M1 = p1 || mHash || salt

其中,salt 就是 3.3 步所計(jì)算出的 salt

再然后,計(jì)算 M1 的 Hash

H1 = Hash(M1)

比較 H1 與 H,如果兩者相等,則簽名驗(yàn)證通過。如果不相等,則簽名非法。

其中,H 就是3.2步所得到的哈希值。

經(jīng)過以上四步以后,就完成了 RSASA-PSS 的數(shù)字簽名驗(yàn)證。

到此,相信大家對(duì)“RSA-PSS 算法的原理和應(yīng)用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI