视频
设 F 是一个有限域,则在已知 F 中的元 a,b,求解整数 x,使得
ax=b
在有限域 F 中成立的问题。
它是求 log 问题吗? 不尽然,因为必须在域 F 中,且为整数。
其难解性与大合数分解基本相当。
设 p 是素数,则 Z/(p) 构成有限域,因而其非零元全体按模 p 乘法运算构成循环群。
设 a∈{1,2,3,...,p−1},如果存在 t 使
min{t>0:at=1}=p−1
则称 a 是 Z/(p) 的本原元。
有特性 Z/(p)={0,a,a2,...,ap−1=1} (任意数可用 a 的幂表示)
选取大素数 p,再选取 Z/(p) 的一个本原元 a,并将 p,a 公开。
于是可以得到协商的共同密钥 k
k=(yv)xumodp=(yu)xvmodp=axuxvmodp
其中,xu,xv 都 1≤ 且 ≤p−2
(为什么?本原元阶为 p−1,所以大于 p−1 的数都可以用更小的数取代)
-
任何两个人都能够协商出一个共同的会话密钥,不需要事先拥有对方的任何(公开、秘密)信息。
-
每次密钥交换后无需再保留秘密信息,减少保密负担。
- 易受中间人攻击。(与双方身份信息无关,故加上身份信息即可缓解)
也是基于有限域上的离散对数问题,在Diffie-Hellman体制上做出了修改。
- 第一步与 Diffie-Hellman 相仿。
选取有限域 GF(q),再选取上面的一个本原元 a,并将 GF(q),a 公开。
随机选取整数 d:1≤d≤q−2,并计算出 β=ad。
- 直接将 β 作为公开加密密钥,将 d 作为保密的脱密密钥。
明文空间:M=GF(q)∖{0}
密文空间:M×M={(x,y):x,y∈M}
对 m∈GF(q)∖{0},秘密选择一个随机整数 k:1≤k≤q−2,则密文 c=(c1,c2)∈M×M,其中
c1=ak和c2=mβk=m(ad)k
对任意密文 (c1,c2)∈M×M,计算明文
m=c2(c1d)−1=c2[(ak)d]−1=c2[(ad)k]−1=c2(βk)−1=mβk(βk)−1
加密密钥 βk=(ad)k,而 ak 每次加密时临时生成,也不需要每次发送给对方。实质上为一次一密,安全性较高。