1. 程式人生 > >RSA簡介(一)——數論原理

RSA簡介(一)——數論原理

結果 應該 除法 證明 生成 個數 最小 滿足 系統

  RSA是最常用的非對稱加密算法。

  所謂非對稱加密,就是說有兩個密鑰,一個密鑰加密只可以用另外一個密鑰解密,一般一個作為公鑰,公開給所有人用來加密用,而另一個用來解密其他擁有公鑰的加密結果,叫做私鑰。另外,擁有私鑰者可以用私鑰加密信息,公鑰可以解密獲得加密內容,從而驗證私鑰擁有者的身份,這是一種特殊的加密,叫簽名。

  RSA涉及到5個整數,關系如下:

  p和q都是質數;

  N=p*q;

  找一個1<e1<(p-1)(q-1),使得e1與(p-1)(q-1)互質;(互質的意思是兩個數的最小公約數為1)

  再找一個1<e2<(p-1)(q-1),使得e1*e2 % (p-1)(q-1) = 1;(%在這裏的意思除法取余數,我不采用數學的mod符號 )

  (N,e1)數對和(N,e2)數對是我們所需要的兩個密鑰,至於p/q,一旦生成密鑰就應該及時銷毀,因為它除了可以讓人竊取了之後直接破解之外,沒有任何其他的作用。

  對於任何滿足1<A<N的整數A,使用(N,e1)加密就是

  B=Ae1%N

  對B解密,就是

  A=Be2%N

  實際上,整數a和b互質有兩個等價定義:

  (1)a和b的最大公約數為1;

  (2)存在整數c,d,使得ac+bd=1

  兩個定義的等價性證明中直接包含找e2的算法,放以後再講。

  對於所有小於N的正整數,建立一種二元運算,計作a#b,

  定義a#b = a*b%N,稱為模乘。

  先看所有小於N且與N互質的正整數下的模乘,看看這些整數在N模乘下成一種什麽樣的代數系統。

  因為a,b與N互質,所以a*b與N互質,所以a*b%N也與N互質,所以運算滿足封閉性,

  又易證,a#b#c = a#(b#c) = a*b*c%N ,也就是滿足結合律,

  從而,所有小於N並與N互質的數在#二元運算下成一半群,而且是有限半群,

  所有的有限半群是群,所以所有小於N並與N互質的數在#二元運算下成一個群。

  因為N=p*q,p和q都是質數,所有小於N並與N不互質的數都是p或者q的倍數,p的倍數小於N的一共q-1個,q的倍數小於N的一共p-1個

  所以這個群的階(元素的個數)就是p*q-1-(q-1)-(p-1) = p*q-p-q+1=(p-1)(q-1),其e元為1。

  

  再看看小於N且與N不互質的正整數上的模乘,分兩類,一類是有因數p,一類有因數q。

  先看所有有因數p的模乘,也就是p,2p...(q-1)p下的模乘,

  顯然,其中任何兩個數的乘積都有因數p2,再除以pq的余數也依然有因數q,所以依然在p.....(q-1)p之中,

  所以模乘滿足封閉性,同樣,模乘也滿足結合律,

  從而是有限半群,從而是群,該群的階為q-1,其e元記作ep

  同理可得,有因數q的所有小於N的正整數在模乘下也是一個群,階為p-1,其e元記作eq

  

  我們再定義一符號,a##n為n個a的模乘,

  上面加密,B=Ae1%N,也就是B=A##e1,

  那麽Be2%N也就是(A##e1)##e2 = A##(e1*e2),

  根據抽象代數知識,有限群的任何一個元素的周期是階的因數,

  因為e1*e2除以(p-1)(q-1)等於1,則存在一個正整數k,使得e1*e2 = k(p-1)(q-1)+1,則

  如果A與N互質,與N互質的數的模乘群的階為(p-1)(q-1),

  A##((p-1)(q-1)) = 1

  所以A##(e1*e2) = A##(k(p-1)(q-1)+1)

          = A # (A##((p-1)(q-1)) ## k

          = A # (1##k)

          = A#1

          = A,

  如果A與N有公約數p,則

  該群的階為q-1,

  所以A##(q-1)=ep

  所以A##(e1*e2) = A##(k(p-1)(q-1)+1)

          = A # (A##(q-1) ## (k(p-1))

          = A # (ep##(k(p-1))

          = A#ep

          = A,

  同理,如果A與N有公約數q,

  A##(e1*e2) = A,

  所以

  Be2%N = A##(e1*e2)

      = A,

  這就是RSA加密解密之所以可以成立的原理,e1/e2可以互換,等式上依然成立,也就是說從數學原理上公鑰私鑰可以互換,

  但一般公鑰的指數很短,這樣破解就會變的很容易,在這種意義上,公鑰私鑰是不可以互換的。

RSA簡介(一)——數論原理