數字簽名中公鑰和私鑰是什么?對稱加密與非對稱加密,以及RSA的原理


http://baijiahao.baidu.com/s?id=1581684919791448393&wfr=spider&for=pc

 

https://blog.csdn.net/u014079662/article/details/61169607

 

一 , 概述

在現代密碼學誕生以前,就已經有很多的加密方法了。例如,最古老的斯巴達加密棒,廣泛應用於公元前7世紀的古希臘。16世紀意大利數學家卡爾達諾發明的柵格密碼,基於單表代換的凱撒密碼、豬圈密碼,基於多表代換的維吉尼亞密碼,二戰中德軍廣泛使用的恩格瑪加密機….但最終都找到了有效的破解算法。

現代密碼學的誕生標志是1977年1月由美國國家標准局公布的數據加密標准(Data Encryption Standard,DES)。
在經過20多年之后,為適應現代的安全要求,2000年美國國家和標准技術協會篩選和評測出了被稱為AES(Advanced Encryption Standard)的加密算法作為新的加密標准。目前,AES已被廣泛使用,且未發現致命缺陷。到目前為止,AES是一個安全的加密算法。

然而,在加密算法之外,面臨一個問題,那就是:秘鑰的分發。就是說,解密方如何獲得加密方的秘鑰呢? 從而出現了:對稱加密和非對稱加密。

二,對稱加密和非對稱加密

1. 對稱加密

對稱加密指的就是加密和解密使用同一個秘鑰,所以叫做對稱加密。對稱加密只有一個秘鑰,作為私鑰。
常見的對稱加密算法:DES,AES,3DES等等。

2. 非對稱加密

非對稱加密指的是:加密和解密使用不同的秘鑰,一把作為公開的公鑰,另一把作為私鑰。公鑰加密的信息,只有私鑰才能解密。私鑰加密的信息,只有公鑰才能解密。
常見的非對稱加密算法:RSA,ECC

3. 區別

對稱加密算法相比非對稱加密算法來說,加解密的效率要高得多。但是缺陷在於對於秘鑰的管理上,以及在非安全信道中通訊時,密鑰交換的安全性不能保障。所以在實際的網絡環境中,會將兩者混合使用.

例如針對C/S模型,
1. 服務端計算出一對秘鑰pub/pri。將私鑰保密,將公鑰公開。
2. 客戶端請求服務端時,拿到服務端的公鑰pub。
3. 客戶端通過AES計算出一個對稱加密的秘鑰X。 然后使用pub將X進行加密。
4. 客戶端將加密后的密文發送給服務端。服務端通過pri解密獲得X。
5. 然后兩邊的通訊內容就通過對稱密鑰X以對稱加密算法來加解密。

三,RSA原理

我們先來看這樣一些基礎知識,並且以下我們討論全都是整數:

整數運算

在整數運算中 我們定義一個整數x

,那么他的負數為-x,並且有x+(-x

)=0;

他的倒數為x1

, 並且有x×x1

=1;

同余運算

有整數a,b,正整數m。 假如a除以m余b。我們稱為a模m同余b,模數為m。並且記為ab(modm)

,例如10除以3余1

我們稱10模3同余1,記為101(mod3)

我們分別討論模數為合數和質數情況下,基於同余運算的負數和倒數。

1. 當模數為合數n

簡單起見,我們討論當n

為10的情況,10是兩個質數乘積

當模數為10的時候,參與運算的都是小於10的數。因為大於10的數除模取余之后都會小於10,所以只需要考慮小於模的數。

那么在同余運算中

一個小於10的數a,他的負數x

是什么? 也就是說使得(a+x)0(mod10) ; 那就是na,即x=na。這里的x就像是常規運算下的-a。常規運算下a+(a)=0,我們說aa的負數,這里(a+x)0(mod10),我們說xa

的負數。;

a+(na)=a+(a)+n=n0(modn)

。 當n=10

的時候 ,有如下表

a
  0 1 2 3 4 5 6 7 8 9
x
  0 9 8 7 6 5 4 3 2 1

那么,a

的倒數a1是什么呢? 它要使得a×a1在模數為n的情況下等於1,即a×a11(modn)

n=10

的時候我們會發現,對於有的數我們可以找到它的倒數,有的數卻找不到

例如當a=3

,我們可以找到7,使得3×7=211(mod10)

;

而當a=4的時候,我們有4×0=0

4×1=44×2=84×3=124×4=164×5=204×6=244×7=284×8=324×9=36

,在模10的情況下,都不會等於1。

我們對於所有小於10的a

都找他的倒數a1

,有下表

a
  1 2 3 4 5 6 7 8 9
a1
  1 不存在 7 不存在 不存在 不存在 3 不存在 9

有什么規律呢?

數學界已證明:當a<n

時,只有當an互質才能找到a1。 同時還有以下結論,當n=p×q ,且pq都為質數時,所有小於n的數中,能找到倒數的個數為(p1)×(q1)

個。如果n有更多的質因子,那么計算會更復雜點。

我們把所有小於n,並且能和n互質的數的總個數記為一個函數φ(n)

,這個函數叫做歐拉函數。例

即當n=p×q

,且pq都為質數時,有φ(n)=(p1)×(q1), 那么就有φ(10)=(21)×(51)=4

同時這些數還有以下兩個有趣的情況

  1. 這些數之間進行互乘的同余運算,結果還是這些數。

    例如對於1:1×11(mod10)

, 1×33(mod10), 1×77(mod10), 1×99(mod10)

對於3:3×13(mod10)

, 3×39(mod10), 3×71(mod10), 3×97(mod10)

對於7:7×17(mod10)

,7×31(mod10),7×79(mod10),7×93(mod10)

對於9:9×19(mod10)

,9×37(mod10),9×73(mod10),9×91(mod10)

  1.  

    如果一些數在互相運算之后,得到的結果還是這些數中,我們稱這些數在這個運算條件下具有封閉性

  2. 對這些數進行求冪運算,並且再模10,結果如下表

a
  1 3 7 9
a0
  1 1 1 1
a1
  1 3 7 9
a2
  1×1=1
  3×3=9
  7×7=9
  9×9=1
 
a3
  1×1×1=1
  3×3×3=7
  7×7×7=3
  9×9×9=9
 
a4
  1×1×1×1=1
  3×3×3×3=1
  7×7×7×7=1
  1×1×1×1=1
 

其中,

  • 我們規定a01(mod10)

 

  • 所有aφ(10)

的結果都為1,即有aφ(n)1(mod10)。(根據前面的介紹可知這里的φ(10)=(21)×(51)=4

  • )

  • 對於3和7來說,他們的a0

a1a2a3剛好把1,3,7,9各得到了一遍。到a4

時剛好又回到了1,如果大於4之后,又會開始循環

在模n的情況下一定能找到一個數g

,使得g0g1g2、……gφ(n)1

  • 剛好把所有與n互質並且小於n的數各得到一遍。我們把滿足這種條件的數稱為 生成元

2. 當模數為質數p

的時候

當模p

為質數的時候,我們假設p=7

時。

同樣求小於 p

的數 a 的負數 x 使得(a+x)0(mod10)

有如下表

a
  1 2 3 4 5 6
x
  6 5 4 3 2 1

而求a

的倒數時,因為p是質數,所有小於p的數都和它互質。所以,所有小於p的數a都能找到它的倒數a。它的歐拉函數φ(n)=p1

如下表

a
  1 2 3 4 5 6
a1
  1 4 5 2 3 6

它同樣有模數為合數n

時的性質

  1. 這些數在同余運算規則下進行乘法運算,同樣具有封閉性
  2. 任意的a

求冪依然滿足aφ(n)=1

  1. 的規則,且同樣有生成元

3. 離散對數問題

前面我們得到了有這么一個結論:

在模n的情況下一定能找到一個數g

,使得g0, g1 ,g2、……gφ(n)1

剛好把所有與n互質並且小於n的數各得到一遍。我們把滿足這種條件的數稱為 生成元

那么,在模n

的條件下,給定它的生成元g,以及一個小於n的正整數a。通過一個叫做同余冪的算法能夠快速的算出ga的值,我們把算得的結果記為b。 即我們在模n的條件下,能夠快速的算出b=ga

的值。

由於生成元的特性,我們知道,在模n

的條件下,給定生成元g,以及b的值,一定存在一個小於n的正整數a,使得b=ga

。那么如何求a的值?

我們發現,這個問題沒有任何規律。例如,當n=11,g=2時,有如下表

g
  2 2 2 2 2 2 2 2 2 2 2
b=ga
  1 2 3 4 5 6 7 8 9 10 1
a
  0 1 8 2 4 9 7 3 6 5 10

在實數計算中,我們知道當b=ga

時,a=logbg。然而這個計算在模n的條件下非常困難。這樣一個問題被稱為離散對數問題。在目前的技術條件下,這是一個極為困難的計算。當這個n

值達到十進制兩三百位時,即便是有大型計算機的情況下,所要花費的時間依然是個天文數字。

4.RSA原理

n=p×q

pq是兩個大質數。只知道n的值,想要計算pq

,這是一個世界性的極為困難的數學難題。RSA的基礎就是基於的n的兩個質數分解難題。

具體過程如下:

  • Alice選擇兩個大質數p

q,求得n=p×q。計算φ(n)=(p1)×(q1),接下來,Alice選擇一個與φ(n)互質的數e,並計算e1在模為φ(n)下的值,將計算出的值記為s

我們知道,e

φ(n)互質,所以一定存在e1, 這一步,service 就算出了公鑰和私鑰,其中,公鑰為(en),私鑰為(sn

  • )

  • 接下來,Bob可以在非安全信道請求Alice獲得公鑰。Evl通過中間攻擊,只能獲得(e,n)

,以及密文D。假定Bob需要發送的內容為m,計算D=me(modn)

  • ,然后把D發送給Alice

  • Alice收到D之后,計算me(e1)(modn)=me×e1(modn)m(modn)

  • .

其中,在不安全信道中傳輸的是n

e。然而,pq只有Alice才知道,即便Eval獲得了n,基於質數分解難題,他無法算出pq,也就無法算出私鑰s

來揭秘被加密的消息。
且,m不能是大於n的數,當m大於n時可以拆分之后分段加密。

舉個例子吧

  • 假設取兩個質數p=11

, q=13,那么n=143.
φ(n)=(p1)×(q1)=120
隨意選取一個和φ(n)互質的數e,假定這個數字為7,即e=7
那么e1=63,使得e×e1再模φ(n)等於1,即e×e11(modφ(n)),即7×63=1431(mod120)

  • .
  • 公鑰為(en)

,即(7143)
私鑰為(sn), 即(63143)
要加密的原始數據為m,假設m=13

  • 。(計算機中任何數據,最后傳輸或者保存都會轉換成二進制的數據)
  • 加密過程:Bob請求Alice,獲得公鑰,密文為D

, D=137(mod143)=117

  • 。 Bob將D傳輸出去。
  • Evl通過中間攻擊,只能獲得(e,n)

,以及密文D

  • 解密過程:Alice獲得D

,通過只有Alice才有的私鑰進行解密。11763(mod143)=13

  • ,獲得了原始數據。

這里的11和13比較小,知道公鑰為(7,143)之后,容易將143做因式分解求的11與13,從而可以算出e1

。但是當pq是兩個非常大的的質數的時候,就很難將其分解出來。 這樣,就無法算出e1。從而不能從密文中獲得原始數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM