密码学笔记5 非对称密钥算法

来源:互联网 发布:c语言二级证书有用吗 编辑:程序博客网 时间:2024/06/03 13:30

一、引

1976年麻省理工学院数学系毕业的W.Diffie 和M. Hellman等人发表了《密码这新方向》(New Directions in Cryptography),该论文提出加密和解密可以用两把不同的密钥,一把公钥,可以公开;一把私钥,必须严格保密。
论文里以数学方法实现了不念密钥交换协议,称为Diffie-Hellman密钥交换协议。

1977年,R. Rivest、A.Shamir和L.Adleman利用整数分解问题设计了一个单向陷门函数,并构建了RSA密码系统。

公钥密码学还可以用于认证。由于私钥只有主人才拥有,所以用私钥来加密消息的话,这个消息就有了主人的身份信息。

U盾工作过程

Created with Raphaël 2.1.0客户客户银行银行支付申请生成一个随机数传密码U盾使用随机数和私钥对客户密码加密银行使用之前的随机数与客户匹配的公钥对消息解密,验证密码是否正确

二、一些数学概念

欧拉函数
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)
例如φ(8)=4,因为1,3,5,7均和8互质。

离散对数困难性问题
Discrete Logarithm Problem,DLP
对于比较大的整数y,g,p,求出一个整数x满足

y=gx(modp)

是非常困难的。

整数因子分解困难问题
IFP
给定一个大整数,要将它分解成两个素数因子的乘积,这是一个非常困难的问题。

三、RSA

RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战和质疑。
RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)(q-1))=1。
(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。[1]
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)
e1和e2可以互换使用,即:
A=B^e1 mod n;B=A^e2 mod n;

RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右。
——百度百科

四、 RSA攻击进度

1. 共模攻击

2. 低指数攻击

3. 旁道攻击

4. 量子计算的威胁

五、 椭圆曲线方程(ECC Elliptic Curves Cryptography)

1637年前后,法国数学家费马在阅读巴歇校订注释的丢番图的《算术》第2卷第8题,即求

x2+y2=z2

的正整数解时,在书的空白处写道:“另一方面,将一个立方数分成两个立方数,一个四次幂分为两个四次幂,或者一般地将一个高于二次的幂分为两个同次的幂,这是不可能的。关于此,我已发现一种美妙的证法,可惜这里空白的地方太小写不下”。
即当整数n>2时,方程
xn+yn=zn
没有正整数解。
1985年,德国数学家格哈德 费赖 第一次创造性地指出如果费马定理有整数解,则必定存在一条与之对应的椭圆曲线,进而打开了由椭圆曲线证明费马大定理的大门,引发了人们对椭圆曲线研究的重视。同年,Neal Koblitz和Victor Miller分别独立地提出将椭圆曲线应用在密码学中,提出了椭圆曲线密码系统(Elliptic Curve Cryptography,简称ECC),它具有良好的特征(密钥短、安全性高)

椭圆曲线有多种表示形式,有各自的用场,这里介绍其中的一种:

E:y2=x3+ax+b

这里要求曲线上的每个点都是非奇异(或光滑)的,即曲线上任意一点都存在切线,数学上的定义是曲线上任意一点的偏导数

Fx(x,y,z)Fy(x,y,z),Fz(x,y,z)

不能同时为0.

椭圆曲线的形状并不是椭圆,它只是类似于计算一个椭圆周长的方程。而实数集并不适合密码技术,所以研究整数集上的椭圆曲线,这样椭圆曲线就变成了离散的点。椭圆曲线

y2+x3+10mod23

会构成一个个离散的点,这些点组成一个有限集,我们在这个有限集上定义加法:PQ的加法是PQ与椭圆曲线交点,它的对称点记为和R。对两个一样的点,需要沿该点做一条切线。
这里写图片描述

这里写图片描述

如果椭圆曲线上的三个点A、B、C,处于同一条直线上,那么他们的和等于零元,即A+B+C= O∞
椭圆曲线离散对数问题ECDLP
若已知椭圆曲线上的两个点P和Q满足关系Q=kP,要求出整数k是非常困难的。

现有的实验证明,160位的整数的椭圆曲线离散对数问题的难度,就相当于1024位整数的分解问题难度。实际应用中,公开的参数和密钥长度至少是256bits。

SM2
我国在2010年12月颁布了我们自己的椭圆曲线密码算法标准《SM2椭圆曲线公钥密码算法》。

这篇文章对椭圆曲线介绍非常详细:
http://www.pediy.com/kssd/pediy06/pediy6014.htm