密码学读书笔记——4

【HKE离散对数交换与椭圆曲线】
【一、原理部分】
DHKE允许双方通过不安全的密道进行交流,基本原理是
k=(αx)y = (αy)x mod p
DHKE协议由两个协议组成:握手协议和主要协议
握手协议:选择大素数p和整数α∈{2,3……p-2},并公开
主要协议:即双方分别选择一个x和y,将α^x 和 α^y计算出来后交换。在进行自己的
y或x的指数计算后即可得到密钥。
使用概率素数产生法生成p,p的长度应该大于1024位,选择的私钥a和b必须要用随机数产生

【代数知识】
阿贝尔群:交换群。 每个元素的逆元都可以由
循环群:存在一个群内元素α的所有次幂后的值,都在群内以一个序列循环(如,1,3,5,4,2)
在Z(6)中。ord(a)=5,|G|,G有5个元素,|G|表示为基是5。且该元素为生成元。

  • ord(a) = k,k满足,a^k=1 mod G
    注意,Z(6)只是表示元素都小于6,不代表元素个数
    定理:①每个素数p:Zp都是一个阿贝尔有限循环群
    ②假设G为有限群,则每个a^|G|=1,ord(a)可以整除|G|
    ③当G为有限循环群,G的生成元的个数为φ(|G|),如果|G|是素数,则所有不等于1的
    元素a都是生成元。
    ④群可以有子群,循环群G内的每个满足ord(a)=s的元素a都是拥有s个元素的循环子群的
    生成元。且这个循环子群的基可以整除原群,逆过来可以快速找到循环子群
    ⑤假设G是n阶有限循环群,a为对应生成元,对整除n的每个整数k,都存在由
    a(n/k)生成的循环子群H(即H的生成元是an/k),且H是由满足条件a^k=1的元素组成
    的,且G不存在其他子群
    离散数学:有点困难,核心思想是——选择Zp子群中基为素数的子群内的x(α^x=β mod p)
    这个DH密钥算法是基于离散对数的安全性。构建的单向函数是基于离散对数的求解阶数分解
    【攻击】
    难题是:中间人是否可以通过ax和ay生成的A和B,求出a^x·y?
    结论:循环群的阶p-1必须不能因式分解成全部都是小整数的素因子,否则容易遭受攻击,
    最小素因子至少要160位(80位长度密钥)
    攻击者一般不可能找到 d =
    loga β mod p 的
    【Elgamal方案】
    离散对数
    就是在基于DHKE的基础上,由发送信息方,如Alice每次发送前就随机在对方发过来的公钥内选择一个数生成掩码密钥与明文相乘即可。生成掩码密钥使用了alice的密钥和bob的公钥,把掩码密钥先
    发送刚给BOb,bob会用私钥解密掩码密钥就可以得到逆向掩码密钥。
    这样做的好处就是两次加密同一个明文得到的不会是同一组密文。
    【计算】密钥生成时,私钥应该用真随机数生成得到,公钥要执行指数运算,解密
    用定理可以化简成Km-1=kep-d-1 mod p
    【攻击】抗攻击性较好,难以求解对数,同时为了抵抗延展性被利用,一般也用了填充方案。

椭圆曲线:
椭圆曲线并不是椭圆,而是与椭圆周长的方程相似的三次方程。一般,椭圆曲线方程形为:
    y2 + axy + by = x3 + cx2 + dx + e
对我们而言将方程限制为以下形式就已足够:
    y2 = x3 + ax + b             
对于给定的a和b,对x的每一个值,需画出y的正值和负值。
椭圆曲线
【计算法则】
将满足式(10.1)的所有点(x , y)和元素O(称为无穷远点或者零点的元素,后面会讨论这个概念)所组成的点集E(a , b)。上图中两条曲线分别可用集合E(-1 , 0)和E(1 , 1)表示。
若式(10.1)里的参数a和b满足
    4a3 + 27b2 ≠ 0                (10.2)
则基于集合E(a , b)可以定义一个可交换群(Abel群),其加法的运算规则如下:
  1、O是加法的单位元,有O = -O;对椭圆曲线上任何一点P,有P + O = P
  2、点P (x , y)的负元-P = (x , -y)。注意这两点可以用一条垂直的线连接起来,并且P + (-P) = P - P = O
  3、要计算坐标不同的P和Q之和,则在P和Q间作一条直线并找到与曲线的第三个交点R(显然存在唯一的交点R,除非这条直线与P或者Q相切,此时分别取R = P或者R = Q,与下述5相一致)。并定义如下三点上的加法:P + Q = -R。也就是,定义P + Q 为第三个交点相对于x轴的镜像
  4、上述术语的几何解释也适用于具有相同x坐标的两个点P和 -P的情形。用一条垂直的线连接这两点,这可视为在无穷远点与曲线相交,因此有P + (-P) = O,与上述2相一致。
  5、为计算点Q的两倍,画一条切线并找到另一交点S,则Q + Q = 2Q = -S。

余下数论知识参考:https://www.cnblogs.com/block2016/p/5618918.html

【椭圆曲线实现Diffie-Hellman密钥交换】

首先,挑选一个大整数q以及式(10.5)或式(10.7)中的椭圆曲线参数a和b,这里q为素数p或者是形为2m的整数。由此可以定义出点的椭圆群Eq(a , b)

其次,在Eq(a , b)中挑选基点G = (x1 , y1),G的阶为一个非常大的数n。椭圆曲线上的点G的阶n是使 nG = 0 成立的最小正整数。Eq(a , b)和G是该密码体制中通信各方均已知的参数

用户A和用户B之间完成密钥交换过程如下:

1、A选择一个小于n的整数nA作为其私钥,然后产生其公钥PA = nA × G。该公钥是Eq(a , b)中的一个点。B也类似地选择私钥nB并计算公钥PB

2、A产生秘密钥k = nA × PB,B产生秘密钥k = nB × PA

nA × PB = nA × (nB × G) = nB × (nA × G) = nB × PA

扫描二维码关注公众号,回复: 5883286 查看本文章

要破译这种体制,攻击者必须由G和kG计算k,这被认为很难。

【椭圆曲线加/解密】
1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。
2、用户A选择一个私有密钥k,并生成公开密钥K=kG。
3、用户A将Ep(a,b)和点K,G传给用户B。
4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r是用来做扩散的,同时也是B的密钥)
5、用户B计算点C1=M+rK;C2=rG。
6、用户B将C1、C2传给用户A。
7、用户A接到信息后,计算C1-kC2,结果就是点M。因为
C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再对点M进行解码就可以得到明文。
【预防攻击】
在这个加密通信中,如果有一个偷窥者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通过K、G 求k 或通过C2、G求r 都是相对困难的。因此,H无法得到A、B间传送的明文信息。

描述一条Fp上的椭圆曲线,常用到六个参量:
T=(p,a,b,G,n,h)。
(p 、a 、b 用来确定一条椭圆曲线,
G为基点,
n为点G的阶,
h 是椭圆曲线上所有点的个数m与n相除的整数部分)
【安全条件】
这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
2、p≠n×h;
3、pt≠1 (mod n),1≤t<20;
4、4a3+27b2≠0 (mod p);
5、n 为素数;
6、h≤4。

猜你喜欢

转载自blog.csdn.net/czq5659502/article/details/89293986