经典密码(包括现代对称密码)都建立在基本的替代和置换工具的基础上。公钥密码体制是基于数学中的单向陷门函数。
公钥密码体制采用了两个不同的秘钥这对在公开的网络上进行保密通信、秘钥分配、数字签名和认证有着深远的影响。
一 非对称密码体制特性
加密和解密由不同的秘钥完成。
加密:X->Y:Y=EKU(X)
解密:Y->X:X=DKR(Y)=DKR(EKU(X))
知道加密算法,从加密秘钥得到解密秘钥在计算上是不可行的。
两个秘钥中任何一个都可以用作加密而另一个用作解密。
二 非对称加密的应用范围
用户拥有自己的秘钥对KU、KR。公钥KU公开,私钥KR保密。
2.1 实现保密
A->B:Y=EKUb(X) ——用B的公钥加密
B:DKRb(Y)=X ——用B的私钥解密
2.2 实现鉴别
A->ALL:Y=DKRa(X) ——用A的私钥加密
ALL:EKUa(Y)=X ——用A的公钥解密
2.3 鉴别+保密
A->B:Z=EKUb( DKRa(X) ) ——先用a的私钥加密,再用b的公钥加密。
B:EKUa(DKRb(Z))=X ——先用b的私钥解密,再用a的公钥解密。
总结:要实现保密,则必须用b的私钥才能解密;要实现鉴别,则必须用a的私钥加密。
三 常见非对称加密算法
数学基础:单向陷门函数——已知x,易于计算f(x),已知f(x)却难以计算x,然而,一旦给出f(x)和一些秘密信息y(秘密陷门)就很容易计算x。
计算f(x)相当于加密,利用陷门y求f(x)中的x则相当于解密。
3.1 Diffie Hellman算法
用于秘钥交换。步骤如下:
(1)n与g为公开的两个大素数,可事先商定。
(2)双方各选一个较大值x和y。
(3)A计算出g的x次方 mod n,发给B。
(4)B计算出g的y次方 mod n,发给A。
(5)双方利用以上信息计算出共享秘钥。
例子:
(1)Alice选定:n=47,g=3,x=8,计算出:g的x次方mod n=28 mod 47。所以Alice传递给Bob的信息是:{47,3,28}
(2)Bob选定y=10,计算出:g的y次方mod n=17 mod 47。所以Bob传递给Alice{17}
(3)Alice计算共享秘钥:(g的y次方mod n)的y次方=(17的8次方)mod 47=4 mod 47。
(4)Bob计算共享秘钥:(g的x次方mod n)的x次方=(28的10次方)mod 47=4 mod 47。
(5)得出共享秘钥为4。
安全隐患——中间人攻击
截获信息将x和y改为z。
3.2 RSA算法
数学基础:大整数因子分解——任何大于1的整数总可以唯一分解成素因数乘积的形式。
算法步骤:
(1)选择一对不同的素数p和q,计算n=pq和f(n)=(p-1)(q-1)。
(2)随机找一个与f(n)互素的数e,计算其逆d,即d*e=1 mod f(n)。
(3)公钥:n,e。
(4)私钥:n,d。
(5)加密:c=m的e次方 mod n。
(6)解密:m=c的d次方 mod n。
例子:
(1)取两个素数:p=11和q=13,n=pq=143,f(n)=(p-1)(q-1)=10*12=120。
(2)随机找一个与f(n)互素的数e=7,计算其逆d=103。
(3)公钥:{143,7}。
(4)私钥:{143,103}。
(5)明文m=85,密文c=85的7次方 mod 143=123。
(6)解密:m=123的103次方 mod 143=85。
安全性分析:
RSA秘钥安全性依赖于p,q。获取p,q的问题为数学上的大数分解。就目前计算机水平而言,n取1024位是安全的,取2048位是绝对安全的。
缺点分析:
3.3 其它常见公钥体制算法(1)速度慢,比DES慢100倍,一般来说只用于少量数据加密。
(2)产生秘钥麻烦,受到素数产生技术的限制,难以做到一次一密。
(3)若分组大小为k,n需要满足:2的k次方<n<2的k+1次方。为了保证安全性,需要使n尽可能大,所以分组长度也跟着增大,不仅运算代价高,而且不利于数据格式的标准化。
备注:基本RSA公钥密码存在很多缺陷,实际中使用其改进型,n一般取1024位,e常用3,7,65573等。
公钥算法总是要基于一个数学上的难题。
ElGamal算法——美国数字签名标准DSS——数据加密,数字签名——素域乘法群离散对数难题。
椭圆曲线算法(ECC)——数字签名(快)——有限域上的椭圆曲线离散对数问题。
四 各种算法应用范围
RSA::加解密,数字签名,秘钥交换
Dieffie-Hellman:秘钥交换
DSS:数字签名,也可加密?
ECC:数字签名