2011-07-12 66 views
30

我想知道什麼是RSA簽名的長度?它是否總是與RSA密鑰大小相同,如果密鑰大小是1024,那麼RSA簽名是128字節,如果密鑰大小是512位,那麼RSA簽名是64字節?什麼是RSA模數? RSA-sha1又是什麼意思? 非常感謝任何指針。RSA簽名大小?

回答

43

你是對的,RSA簽名大小取決於密鑰大小,RSA簽名大小等於以字節爲單位的模數長度。這意味着對於一個「n位密鑰」,所得到的簽名將是正好n位長。儘管所計算的簽名值不一定是n位,但結果將被填充以恰好匹配n位。

現在,這是如何工作的:RSA算法是基於modular exponentiation。對於這樣的計算,最終結果是「正常」結果的餘數除以模量。模塊化算術在Number Theory中扮演着重要角色。那裏同餘(≡)的定義爲

m is congruent to n mod k if k divides m - n 

簡單例子 - 令n = 2且k = 7,則

2 ≡ 2 (mod 7) because: 7 divides 2 - 2 
9 ≡ 2 (mod 7) because: 7 divides 9 - 2 
16 ≡ 2 (mod 7) because: 7 divides 16 - 2 
... 

7實際上鴻溝0,用於除法的定義是

一個整數一個把一個一個整數b,如果有一個整數n與屬性是b = NA

對於a = 7和b = 0,選擇n = 0。這意味着每個整數除以0,但它也意味着同餘可以擴展爲負數(這裏不會詳細討論,這對RSA並不重要)。

所以要點是同餘原則擴展了我們對餘數的天真理解,模數就是「mod之後的數字」,在我們的例子中它將是7.因爲有無限多的數字是一致的,我們把這稱爲同餘類,通常爲我們的計算選擇一個代表(最小的一致整數> 0),就像我們在談論計算的「餘數」時直觀地做的那樣。

在RSA,簽名消息m裝置冪與「私人指數」 d,結果r大於模數n的最小整數> 0且小,使得

m^d ≡ r (mod n) 

這意味着兩件事

  • R(以比特)的長度由n括住(位)
  • 的米(位)長度必須< = n(以比特,太)

要使簽名長度爲n位,應用某種形式的填充。參看有效選項的PKCS#1。

第二個事實意味着大於n的消息將不得不通過在幾個塊中分解m來簽名,​​但這在實踐中並未完成,因爲它會太慢(模數求冪在計算上花費太高) ,所以我們需要另一種方式來「壓縮」我們的信息小於n。爲此,我們使用cryptographically secure hash functions,例如您提到的SHA-1。將SHA-1應用於任意長度的消息m將產生20個字節長的「散列」,小於RSA模數的典型大小,常見大小爲1024位或2048位,即128或256字節,所以簽名計算可以應用於任何任意消息。

這樣的散列函數的密碼特性確保(理論上 - 簽名僞造是研究社區中的一個巨大話題),除了通過暴力破解之外,不可能僞造簽名。

+0

非常感謝!感謝您的幫助 – user839917

+0

所以......多久了?如果我用1024位密鑰加密單個字節,我的理解是簽名將是1024位長。 – ixe013

+1

我強調了一點更清楚的結果:)你是對的,一個1024位的密鑰將產生1024位的簽名。 – emboss