資訊與網路安全技術 第 七章 數位簽章與數位憑證  上一頁      下一頁

 

7-2 RSA 數位簽章

內容:

利用 RSA 公開鑰匙系統製作出來的數位簽章機制,就稱為RSA 數位簽章』(RSA Digital Signature,其實RSA 演算法一開始就是因為數位簽章的需求而發展出來的,有關 RSA 數位簽章的運作程序,請參考圖 7-1 所示。至於 RSA 演算法已在第四章詳細介紹過,在此僅就演算法植入數位簽章作簡單敘述。RSA 數位簽章的公開鑰匙與私有鑰匙製作如下:

    • 選出兩個較大的質數 p q

    • 計算兩個質數的乘積 n = p × q

    • 計算出小於 n 且與 n 互質的整數個數ψ(n) = (p-1)(q-1)

    • 選出一個質數 e(一般可固定為 3),1 < e <ψ(n);使 e 與ψ(n) 互質,亦即 gcd(ψ(n), e) = 1

    • 計算出 d = e-1 modψ(n)

    • 公開鑰匙 KU = {e, n}

    • 私有鑰匙 KR = {d, n}

7-2-1 RSA 簽章演算法

RSA 數位簽章可選擇不同的雜湊演算法來實現,譬如 MD4MD5 SHA-1。將訊息經過雜湊函數計算後,再經過 RSA 演算法加密(私有鑰匙),便可得到數位簽章的簽署碼;接收端將此數位簽章碼解密後(公開鑰匙),與接收到的訊息所計算出的雜湊值比較,便可辨其『完整性』與『不可否認性』。RSA 數位簽章的演算如下:(如圖 7-1 所示)

    • 傳送訊息: M

    • 雜湊演算法:H

    • 加密演算法:EK[M] = (M)d mod n

    • 解密演算法:DK[C] = (C)e mod n

    • 傳送端計算雜湊碼:H(M)

    • 數位簽章:Sig(M) = EKR[H(M)] = (H(M))d mod n

    • 接收訊息:M’

    • 接收端計算雜湊碼:H(M’)

    • 驗證簽章:Ver(Sig(M)) = DKU[EKR[H(M)]] = ((Sig(M))e mod n = H(M)

如果 H(M) = H(M’),則確認成功;否則確認失敗。

7-2-2 RSA 安全性考量

數位簽章的安全性考量,與訊息確認碼(MAC)一樣,必須考慮到破解鑰匙的暴力攻擊法、以及偽造訊息的生日攻擊法。但對於數位簽章有一個更重要的特點,它的訊息主要以明文方式傳送(雜湊演算法也是公開的),而且簽署後的簽章碼(Sig(M))必須保持一段長時間的使用(一般都是一年);在這一段時間內,破解者可以利用已知的明文來測試各種可能發生的鑰匙(暴力攻擊法),並比對現有的簽章碼。

數位簽章的暴力攻擊法,亦如同於 MAC 的攻擊方式,如 6-6-1 節所示。攻擊者必須收集多筆明文與簽署碼的配對({M, Sig(M)},才可以嘗試出加密的私有鑰匙;然而,利用私有鑰匙簽署的訊息並不多,因此,也很難利用暴力攻擊法來搜尋出私有鑰匙。但話說回來,如果同一把鑰匙簽署多筆文件之後,他被破解的機率也就越高,這也是 CA 中心(7-6 節介紹或第九章介紹)必須擁有多組鑰匙配對的原因。另一方面,以密碼學的概念而言,並沒有無法破解的加密演算法,祇不過破解的效益是否合乎『計算上的成本』而已。由此可見,簽署數位簽章的鑰匙必須足夠長,以增加破解所需要的成本,進而減低破解者的意願。增加鑰匙長度最起碼的條件是,RSA 演算法中的質數 p q 必須夠大,使得要利用他們的乘積 n,分解出相對應的 p q 變得非常困難。一般就短時間(大約一年)的安全性考量,n 不得少於 1024 個位元;至於長時間的安全性考量,n 必須在 2048 位元以上。

對於生日攻擊法而言,攻擊者並不需要去破解加密鑰匙,只要能找出另一個偽造明文,而能得到出相同的簽署碼,就算破解成功(如 6-6-2 節說明)。因此,增加簽署碼的長度,即是抗拒生日攻擊法的不二法門;而延長簽署碼長度的方法,便是選用較長雜湊值的演算法。

另外,採用 RSA 數位簽章時必須注意下列事件,才不容易被詐騙或破解:

  • 執行數位簽章與文件加密的鑰匙,不可以使用同一對公鑰與私鑰配對

  • 執行數位簽章時,必須針對文件的雜湊值加密,而不可以直接對文件明文加密。

  • 不可以對亂數做數位簽章。

  • 不同鑰匙配對之間不可以有相同的模數(n

  • 必須將明文填補(亂數或 0)到與模數(n)相同長度之後,再執行數位簽章。

  • 需加密的文件,必須先做數位簽章,再做訊息加密(第十二章說明)。

 

主講人:粘添壽博士

 

資訊與網路安全技術