
1.RSA
RSA算法是由Rivest、Shamir和Adleman三位美國科學家於1976年提出,並在1978年正式發表的公開密碼算法,其命名取自三位創始人名字的首字母。該算法基於數論中的大數分解難題,即:由數論找到兩個大素數較容易,而把它們的乘積分解開則非常困難。
該算法中,用戶有公鑰PK={e,n}與私鑰SK={d,n}兩個密鑰,n為兩個大素數p和q的乘積(素數p和q一般是100位以上的十進制數),e和d滿足一定的關係,若僅知道e和n並不能求出d。
(1)加密/解密過程
若明文是整數X代表,密文是整數Y代表(X<n,Y<n),則加密與解密如下:
加密:Y=Xe mod n
解密:X=Yd mod n
(2)密鑰的產生
①計算n。用戶秘密選兩個大素數p和q,計算出n=pg。n叫做RSA算法的模數。明文一定要能讓小於n的數來表示。
②計算Φ(n)。用戶計算出n的歐拉函數Φ(n)=(p-1)(q-1)。Φ(n)是不大於n並與n互素的數的個數。
③選擇e。用戶從[0,Φ(n)-1]中選一個與Φ(n)互素的數e當做公開的加密指數。
④計算d。用戶計算出滿足公式ed=1mod Φ(n)的d為解密指數。
⑤得出所要的公鑰與私鑰:
公鑰 PK={e,n}
私鑰 SK={d,n}
2.ECC
ECC是用橢圓曲線有限群代替基於有限域上離散對數問題公鑰密碼中的有限循環群的一類密碼體制。因在一般的橢圓曲線群(除個別特別的橢圓曲線外)中無亞指數時間算法解,因此橢圓曲線密碼成了如今最流行的公鑰密碼體制。
ECC算法的基本原理如下:
(1)有限域Fp與橢圓曲線
有限域Fp是由小於素數P的非負整數構成的集合{0,1,2,…,p-1},其上的運算是模p的算術運算。
Fp上的橢圓曲線是方程y2=x3+ax+b mod p的Fp上的點(x,y)構成的集合,其中常量a和b也是Fp中的元素。
(2)ECC密鑰對
對給定的橢圓曲線參數{p,a,b,G,n},ECC的私鑰d為滿足1<d<n的隨機數,相應的公鑰P為P=dG,為達到安全性,d一定是由隨機或強偽隨機數發生器得出。
(3)ECC簽名機制
ECDSA是典型的ECC簽名機制。
(4)ECC加密機制
ECIES是典型的ECC加密機制。
3.SM2
SM2是主要滿足電子認證服務系統等應用需求的橢圓曲線公鑰密碼算法。
