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是主要满足电子认证服务系统等应用需求的椭圆曲线公钥密码算法。