1. 程式人生 > 其它 >[GO]sync.WaitGroup作用及使用

[GO]sync.WaitGroup作用及使用

RSA

RSA是目前最有影響力的公鑰加密演算法,公開金鑰密碼體制就是使用不同的加密金鑰與解密金鑰,是一種“由已知加密金鑰推匯出解密金鑰在計算上是不可行的”密碼體制。

演算法原理

RSA公開金鑰密碼體制的原理是:
根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰

演算法描述

  1. 任意選取兩個不同的大素數pq,這兩個值越大,破解RSA越困難,而執行加密和解密所用時間也越長。
    計算乘積n = p*qz = (p-1)(q-1)
  2. 選擇一個小於 n 的數e,且 e 和 z 互質(沒有非1的公因數)(此時 e 和 z 互素)。使用字母 e 表示是因為這個值將被用於加密。
  3. 求一個數d,使得 ed -1 可以被 z 整除。使用字母 d 表示是因為這個值將被用於解密。即給定 e ,我們選擇 d ,使得
    ed mod z = 1
  4. 得到公鑰 \(K_B^+=(n,e)\) 和私鑰 \(K_B^-=(n,d)\)

加解密過程

能夠實現加解密這個恆等式(模運算性質)很有用 \((a\;mod\;n)^d\;mod\;n\;=\;a^d\;mod\;n\)

  1. 加密
    假設A向B傳送一個由整數m表示的位元組合,且 m < n 。為了進行編碼,A利用公鑰 \(K_B^+=(n,e)\) 執行指數運算 \(m^e\) ,然後計算 \(m^e\) 被 n 除的整數餘數c。密文c的位元模式傳送給B。
\[c\;=\;m^e\;mod\;n \]
  1. 解密
    要求B使用私鑰 \(K_B^-=(n,d)\)計算
\[c^d\;mod\;n=m \]

工作原理

在RSA加密過程中,一個報文m(唯一地表示為整數)使用模n算術做e次冪運算,即

\[c\;=\;m^e\;mod\;n \]

解密則先對該值執行d次冪運算,再做模n運算。因此先加密再解密的結果就是

\[(m^e\;mod\;n)^d\;mod\;n=m \]

下面我們來看看關於這個量能夠得到什麼。正如前面提到的,模算術的一個重要性質是對於任意值 a 、n 和 d 都有\((a\;mod\;n)^d\;mod\;n\;=\;a^d\;mod\;n\)

。因此在這個性質中使用\(a=m^e\),則有

\[(m^e\;mod\;n)^d\;mod\;n\;=\;m^{ed}\;mod\;n \]

因此剩下證明\(m^{ed}\;mod\;n=m\),為了證明這一點,需要用到數論中一個相當神奇的結論:如果 p 和 q 是素數,且有 n = p * q 和 z = (p-1)(q-1) ,則\(x^y\;mod\;n\)\(x^{y\;mod\;z}\;mod\;n\)是等同的。應用這個結論,對於 x=m 和 y=ed ,可得

\[m^{ed}\;mod\;n\;=\;m^{ed\;mod\;z}\;mod\;n \]

但要記住,我們是這樣選擇e和d的,即ed mod z = 1。這告訴我們

\[m^{ed}\;mod\;n\;=\;m^1\;mod\;n\;=\;m \]

這正是我們希望得到的結果!先對m做e次冪運算(加密)再做d次冪運算(解密),然後做模n的算術運算,就可得到初始明文m。甚至更為奇妙之處是,如果我們先對m做d次冪運算(加密),再做e次冪運算,即顛倒加密和解密的次序,先執行解密操作再執行加密操作,也能得到初始明文m 這個奇妙的結果完全遵循下列模算術:

\[(m^d\;mod\;n)^e\;mod\;n=m^{de}\;mod\;n=m^{ed}\;mod\;n=(m^e\;mod\;n)^d\;mod\;n \]




參考連結:
https://baike.baidu.com/item/RSA演算法/263310#2
參考書籍:
《計算機網路 自頂而下方法(原書第7版)》/(美)詹姆斯·F·庫羅斯等;陳鳴譯