密码体制提供的基本安全服务有机密性、完整性、认证和不可否认性。
加密可以看成是一种变换,这种变换将可读的明文信息变换成不可读的密文信息。
数字签名也是一种基本的密码原语,它可以取得完整性、认证和不可否认性;数字签名可以看成是对数据所做的一种密码变换,这种变换可以使数据的接受者确认签名者的身份和数据的完整性。
密码体制根据加密秘钥和解密秘钥是否相等,可以将密码体制分为对称密码体制和非对称密码体制(公钥密码体制)
对称密码体制一般用来加密,典型的对称密码体制有DES和AES;
公钥密码体制可以用来加密(RSA、EIGamal)和数字签名(RSA、Schorr、DSS),公钥密码体制的安全性是基于大整数分解问题和离散对数问题。
密码学中每一种加密(签名)算法都属于自己的数学"系统",椭圆曲线加密有自己的一个数学系统,这个系统我们整体是一个Abel群,就像我们高等数学中大部分算式都是在整个实数域 R 中进行的,那我们的椭圆曲线加密体制是在我们的阿贝尔群中进行的,也可以理解为是在一个xy坐标系的一条椭圆曲线 上进行的,每个数都是曲线上一个点,我们在这个系统中给它定下规则(我们称为 加法规则,此加法非彼加法,这个只是我们为这套规则其的一个名字叫做加法规则):
(1)单位元O:O为单位元,对曲线上所有点 P 满足:P+O=P;
(2) 逆元和减法:对点P(x,y)有Q(x,-y)满足:P + Q = O,则称Q为P的逆元,记为-p;由此得P-Q=P+(-Q);
已知Q=(x , y),在椭圆曲线 中,-Q mop p =(x,-y mod p)= (x , p - y)mod p
这里的 - 不能简单地理解为负号,比如 p=11 的话,4和7就互逆,也就是在我们这个系统中 4= - 7,以为-7mod11=4
(3) 异点相加:对于两个不同且不互逆的点 和,即
,则
其中 ;
;
(4)倍点规则:对于点,若
,即
,则
其中 ;
;
注:100P=50P+50P ; 50P=25P+25P ; 25P=5P+5P+5P+5P+5P ; 这样去算100P比较好算,因为拿3P打比方,并不是3*P,我们的规则是P+P+P,两个P相加后就变成了一个我们暂时找不到和P有关系的一个点,也就是说P+P后再和P相加,就变成了Q+P一样。而这里所说的暂时找不到和P的关系,就是椭圆密码体制应用在密码学的原理,在区块链中我们用的椭圆密码体制是给出2的256次幂P,所以攻击者是无法通过这个结果推出P为多少,(事实上,给你一个3P我们手算都不一定能算出来P为多少)
下面通过一个题引出第五个规则 :设 p=11,a=1,b=6,即椭圆曲线方程为 ,要确定椭圆曲线上的点,对于每个
(GF为有限域),首先计算
;然后判断z是否是摸11的平方剩余(方程
是否有解),若不是,则椭圆曲线上没有与这一x相对应的点;若是,则求出z的两个平方根。该椭圆曲线上的点如表所示:
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
![]() | 6 否 | 8 否 | 5 是 | 3 是 | 8 否 | 4 是 | 8 否 | 4 是 | 9 是 | 7 否 | 4 是 |
y | 4 | 5 | 2 | 2 | 3 | 2 | |||||
7 | 6 | 9 | 9 | 8 | 9 |
只有当 x=2,3,5,7,8,10时才有点在椭圆曲线上, 是由表中的点再加上一个无穷远点O构成,即
设P=(2,7),计算2P=P+P。首先计算(不懂的朋友可以搜一下分数的求模运算),
所以2P=(5,2)。同样可以计算出3P=(8,3),4P=(10,2),5P=(3,6),6P=(7,9),7P=(7,2),8P=(3,5),9P=(10,9),10P=(8,8),11P=(5,9),12P=(2,4),13P = O.
好的,从这里我们来看一下,首先P的倍点(规则4)都是椭圆曲线 上的其他点,13P等于O(无穷远点),这个时候我们就称
的这些点为一个循环群,我们也可以发现并不是所有点都可以计算出此椭圆曲线上的其他点,所以P=(2,7)是一个比较特殊的点,我们称它为该循环群的生成元,可以理解为是一个super point。所以我们有这样的定义(规则)
(5) 有限域上椭圆曲线的阶:设椭圆曲线上一个点 P ,若存在一个 n 使得 nP=O,则 n 为P的阶,注意,并不是所有的点都有阶。
(6) 若一个群 G 的每一个元都是G的某一个固定元 a 的乘方,则称G为循环群,记做G=(a)={|
},a称为G的一个生成元。
有生成元的循环群正是我们要进行椭圆曲线加密需要的。
基于椭圆曲线的EIGamal密码体制
密钥的产生:在椭圆曲线上选取一个阶为n(n为一个大素数)的生成元P。随机选取整数x(1<x<n),计算Q=xP。公钥为Q,私钥为x。 至此生成了公钥、私钥,此加密算法的困难问题是无法通过Q推出n,只能通过P一个一个相加,但是向上面所说,我们选取的x一般都很大,如2的256次幂。
加密:加密者为了加密,随机选取一个整数k,1<k<n,计算
,密文为
为把明文m编码到椭圆曲线上的点
,编码方法设计明文嵌入,正在学习中。
这个k随意选取的,首先要明确公钥加密是A发给B消息,则A用B的公钥加密消息发给B,只有B能用私钥解密,而B用自己的私钥加密发给A,这叫做加密签名,因为每个人都有B的公钥,所以所有人都可以解开B加密的消息,但是无关紧要,因为解开之后只是一个签名,没有什么重要信息,只能证明这个加密信息的确是B发送的,也就是有B的签名;其次,这里的K在后面用私钥解密的时候直接消掉了,所以随意选取。
解密:。攻击者想由加密消息中得到
,无论是x还是k,都要去根据P和nP中去计算n这个困难问题,这就要面对求解椭圆曲线上的离散对数问题。
这就是椭圆曲线密码体制,根据椭圆曲线的离散对数难题来设计加密方法。其实所有的加解密算法都是基于某一数学上的困难问题设计出来的。