椭圆密码

密码体制提供的基本安全服务有机密性、完整性、认证和不可否认性。

加密可以看成是一种变换,这种变换将可读的明文信息变换成不可读的密文信息。

数字签名也是一种基本的密码原语,它可以取得完整性、认证和不可否认性;数字签名可以看成是对数据所做的一种密码变换,这种变换可以使数据的接受者确认签名者的身份和数据的完整性。

密码体制根据加密秘钥和解密秘钥是否相等,可以将密码体制分为对称密码体制和非对称密码体制(公钥密码体制)

对称密码体制一般用来加密,典型的对称密码体制有DES和AES;

公钥密码体制可以用来加密(RSA、EIGamal)和数字签名(RSA、Schorr、DSS),公钥密码体制的安全性是基于大整数分解问题和离散对数问题。

密码学中每一种加密(签名)算法都属于自己的数学"系统",椭圆曲线加密有自己的一个数学系统,这个系统我们整体是一个Abel群,就像我们高等数学中大部分算式都是在整个实数域 R 中进行的,那我们的椭圆曲线加密体制是在我们的阿贝尔群中进行的,也可以理解为是在一个xy坐标系的一条椭圆曲线  {\color{Red}y^2\equiv x^3+ax+b(mod p)}  上进行的,每个数都是曲线上一个点,我们在这个系统中给它定下规则(我们称为 加法规则,此加法非彼加法,这个只是我们为这套规则其的一个名字叫做加法规则):

     (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),在椭圆曲线 {\color{Red} E_{p}(a,b)} 中,-Q mop p =(x,-y mod p)= (x , p - y)mod p

              这里的 -  不能简单地理解为负号,比如 p=11 的话,4和7就互逆,也就是在我们这个系统中 4= - 7,以为-7mod11=4

       (3)  异点相加:对于两个不同且不互逆的点 和Q(x_{2},y_{2}),即X_{1}\neq X_{2},则{\color{Red} P(x_{1},y_{1})+Q(x_{2},y_{2})=S(x_{3},y_{3})}

                               其中  \lambda = \frac{y_{2}-y_{1}}{x_{2}-x_{1}}(mod p)

                                        x_{3} = (\lambda ^{2} - x_{1} - x_{2})(modp)

                                        y_{3} = ( \lambda (x_{1}-x_{3})-y_{1})(modp)

    (4)倍点规则:对于点P(x_{1},y_{1}),若P\neq -P,即y_{1}\neq 0,则{\color{Red} P(x_{1},y_{1})+P(x_{1},y_{1})=2P(x_{1},y_{1})=S(x_{3},y_{3})}

                               

                               其中  \lambda = \frac{3x^2_1 + a}{2y_1}(mod p)

                                        x_{3} = (\lambda ^{2} - 2x_{1} )(modp)

                                        y_{3} = ( \lambda (x_{1}-x_{3})-y_{1})(modp)

      注: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,即椭圆曲线方程为 y^2\equiv x^3+x+6(mod 11) ,要确定椭圆曲线上的点,对于每个x\in GF(11) (GF为有限域),首先计算z\equiv x^3+x+6(mod 11)然后判断z是否是摸11的平方剩余(方程y^2\equiv z mod11是否有解),若不是,则椭圆曲线上没有与这一x相对应的点;若是,则求出z的两个平方根。该椭圆曲线上的点如表所示:

x012345678910
x^3+x+6(mod 11) 是否是模11的平方剩余

6

否 

8

5

3

8

4

8

4

9

7

4

y  45 2 23 2
  76 9 98 9

       只有当 x=2,3,5,7,8,10时才有点在椭圆曲线上,E_1_1(1,6) 是由表中的点再加上一个无穷远点O构成,即

       设P=(2,7),计算2P=P+P。首先计算\lambda \equiv 8(不懂的朋友可以搜一下分数的求模运算),x_3\equiv 5,y_3\equiv2

       所以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)都是椭圆曲线 E_1_1(1,6) 上的其他点,13P等于O(无穷远点),这个时候我们就称E_1_1(1,6)的这些点为一个循环群,我们也可以发现并不是所有点都可以计算出此椭圆曲线上的其他点,所以P=(2,7)是一个比较特殊的点,我们称它为该循环群的生成元,可以理解为是一个super point。所以我们有这样的定义(规则)

         (5)  有限域上椭圆曲线的阶:设椭圆曲线上一个点 P ,若存在一个 n 使得 nP=O,则 n 为P的阶,注意,并不是所有的点都有阶。

         (6)  若一个群 G 的每一个元都是G的某一个固定元 a 的乘方,则称G为循环群,记做G=(a)={a^m|m\in Z},a称为G的一个生成元

       有生成元的循环群正是我们要进行椭圆曲线加密需要的。

基于椭圆曲线的EIGamal密码体制

       密钥的产生:在椭圆曲线{\color{Red} E_{p}(a,b)}上选取一个阶为n(n为一个大素数)的生成元P。随机选取整数x(1<x<n),计算Q=xP。公钥为Q,私钥为x。   至此生成了公钥、私钥,此加密算法的困难问题是无法通过Q推出n,只能通过P一个一个相加,但是向上面所说,我们选取的x一般都很大,如2的256次幂。

       加密:加密者为了加密P_m,随机选取一个整数k,1<k<n,计算C_1=kP,C_2=P_m+kQ,密文为c=(C_1,C_2)

                 P_m为把明文m编码到椭圆曲线上的点P_m=(x_m,y_m),编码方法设计明文嵌入,正在学习中。

                这个k随意选取的,首先要明确公钥加密是A发给B消息,则A用B的公钥加密消息发给B,只有B能用私钥解密,而B用自己的私钥加密发给A,这叫做加密签名,因为每个人都有B的公钥,所以所有人都可以解开B加密的消息,但是无关紧要,因为解开之后只是一个签名,没有什么重要信息,只能证明这个加密信息的确是B发送的,也就是有B的签名;其次,这里的K在后面用私钥解密的时候直接消掉了,所以随意选取。

       解密:C_2-xC_1=P_m+kQ-xkp=P_m+kxP-xkP=P_m。攻击者想由加密消息中得到P_m,无论是x还是k,都要去根据P和nP中去计算n这个困难问题,这就要面对求解椭圆曲线上的离散对数问题。

这就是椭圆曲线密码体制,根据椭圆曲线的离散对数难题来设计加密方法。其实所有的加解密算法都是基于某一数学上的困难问题设计出来的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值