密码系列11-数论不白学之椭圆曲线公钥密码算法
0x00 口胡背景
Neal Koblitz和Victor Miller在1985年分别提出了椭圆曲线密码体制(ECC),它是迄今为止被实践证明安全有效的三类公钥密码体制之一。
1998年被ISO/IEC定为数字签名标准,2000年2月定为IEEE标准
椭圆曲线公钥密码算法跟我们上篇介绍的ElGamal有点类似,安全性都是基于离散对数问题,不过椭圆曲线公钥密码算法的离散对数问题有些特殊
0x01 椭圆曲线密码相关概念
- 椭圆曲线的定义:
在二维坐标系中表示为:
- 椭圆曲线公钥密码算法所需运算:
点的加法运算并不是空穴来风,随便定义了一个运算法则,在图上它是有具体意义的,显得很直观:
p和q的加法描述为:过p,q两点做一条直线,这条直线与椭圆曲线的另一交点(除p,q外的交点)关于x轴的对称点定义为p+q得到的点s。
但是,在椭圆曲线公钥密码算法中,该椭圆曲线上的点我们并不是全部用到,我们只用整数,椭圆曲线上的整数点定义的集合:
但并不是所有的整数点都满足我们的要求,我们还要对这些整数点进行筛选,下面给出Ep(a,b)集合的生成方法:
也就是说,在椭圆曲线密码算法中,我们只用到了上面所说的Ep(a,b)集合中的点,我们只对这些点进行相应的运算,比如我们上面介绍的加法运算。
举个E23(1,1)的例子:
还记得我们上面在刚开始提到的椭圆曲线上的无穷远点O吗,我们来看加法运算加入无穷远点后会有什么变化:
举个最简单的计算例子:
既然我们上面详细介绍了椭圆曲线上的加法运算,那么下面密码算法中肯定是要用到的,为了下面的应用,我们再给两个定义:
- mP = P + P +…+ P (m个P)
- P是椭圆曲线E上的一个点,若存在最小的正整数n,使得nP = O,则称n是P的阶数。
OK,有了这些前置姿势,我们已经有资格来揭开椭圆曲线公钥密码算法的真面目了。。。
0x02 椭圆曲线密码流程
1. 密钥生成
2. 加密运算
3. 解密运算
又是例子。。。
看到例子是不是有点疑惑?欲发往A的消息嵌入到椭圆曲线上的点Pm=(562,201)是什么鬼?
由于椭圆曲线密码算法是在集合Ep(a,b)上进行的运算,所以,我们想要用椭圆曲线对明文加密,我们首先要将明文转化为我们要使用的椭圆曲线上的点。
还记得我们前面介绍的二次剩余吗?好像现在就它没用到了吧。什么叫不白学,学了就会用好吧。给出如下明文到椭圆曲线上的点的转化规则:
流程就是这么简单。
0x03 椭圆曲线密码体制优点
首先来谈谈椭圆曲线密码的安全性,前面也说过了安全性基于离散对数问题。具体描述为:在椭圆曲线群Ep(a,b)上考虑方程Q=kP,其中P,Q∈Ep(a,b),k<p,则由k和P易求Q,但由P、Q求k则是困难的。
这就是椭圆曲线上的离散对数问题,可应用于公钥密码体制.
优点都是对比出来的,这里的对比对象是基于有限域上离散对数问题的公钥体制。与基于有限域上离散对数问题的公钥体制相比,椭圆曲线密码体制有如下优点:
- 安全性高:
- 密钥量小:
计算量小、处理速度快,这里的处理速度快是指在私钥的处理速度上(解密和签名),ECC远比RSA快得多,但是公钥加密速度椭圆曲线更慢。
- 灵活性好:p一定的情况下,其上的集合是确定的. 而椭圆曲线Ep(a,b)可以通过改变曲线参数,得到不同的曲线,具有丰富的多选择性.
0x04 公钥密码与对称密码比较之各有千秋
- 公钥密码体制产生密钥很麻烦,比如RSA受到素数产生技术的限制
- 公钥密码体制速度慢,较对称密码算法慢几个数量级
- 对称密码算法,密钥短,速度快
- 公钥密码算法,密钥长,速度慢
- 对称密码算法用于大量明文加密
- 公钥密码算法用于少量数据加密,如DES密钥的加密
两者各有用处,我们要发挥他们各自的优势来为我们服务:
公钥密码体制到这就告一段落了,本来想再补充一下基于身份的密码体制的,但自己也没理解透,所以就不误导大家了,这里留两个链接日后看吧-[1]、[2]
就这样,下面进入消息认证机制,主要是介绍一些杂凑函数。。。