Cryptography I 学习笔记 --- 密钥交换

1. 使用可信第三方(Trusted third parties)进行密钥交换。

  a. Alice与TTP之间的密钥是K1,Bob与TTP之间的密钥是K2。

  b. Alice向TTP发起一个与Bob交换密钥的请求。TTP生成一个随机密钥Kab,然后将Kab用K1加密,得到E1,将Kab用K2加密,得到E2。

  c. TTP将E1与E2一起发送给Alice。Alice用K1解密E1,得到密钥Kab

  d. Alice再将E2发送给Bob,Bob用K2解密E2,也得到密钥Kab

  e. 现在Alice与Bob之间就有一个共享的密钥Kab了。

  TTP的缺点是完全中心化,如果TTP被攻破,会导致所有传递过的密钥暴露。

2. Merkle算法

  第一个被发明的无需依赖TTP对称加密条件下的密钥交换算法。

  核心思想:Alice产生n个很难的问题Q,每个问题附带一个密钥K,然后将这些问题全部转发给Bob,Bob随机挑选一个问题Qi求解,将解算的结果返回给Alice,Alice拿到Bob的运算结果后可以在常数时间内知道Bob求解的问题Qi。然后Alice与Bob就可以使用Qi所对应的密钥Ki进行通信了。攻击者不知道Bob选中的是哪个问题,必须要求解所有的问题才行,在n很大的情况下,可以认为是安全的。

  范例:Alice创建2^32个密钥对,第i个密钥对是128bit的随机数Xi与Ki,将密钥对拼接并加入识别码,得到明文Pi(eg: Pi = "Puzzle#Xi+Ki"),将Pi用i加密,得到密文Ei。Alice在本地保存这2^32个密钥对,然后将2^32个Ei发送给Bob。Bob随机选取一个Ei,然后用0到2^32-1这2^32个密钥对Ei进行解密,如果解密后的结果是以Puzzle开头,那么认为解密成功。Bob得到 Xi与Ki,然后将Xi发回给Alice。Alice收到Xi后查表也可以得到Ki。此时Alice与Bob得到了共享密钥Ki,于是可以安全通信了。

  缺点:这个算法并不实用,因为即使n=2^32,那么攻击者也只需要2^64次计算即可解密。如果把n设为2^64,攻击次数则上升到2^128,安全固然是安全了,但是Alice需要花太多时间来生成谜题,然后将这些谜题转发给Bob了。

3. 基于对称加密的密钥交换体系最好也只能做到平方鸿沟(quadratic gap,攻击者的时间复杂度是参与者的时间复杂度的平方)了,真正实用的不依赖于TTP的密钥交换体系,需要用到非对称密钥体系。

4. Diffie-Hellman协议

  a. Alice或者Bob生成一个2000bit的大质数p,然后生成一个介于1到p之间的整数g,然后将p与g公开

  b. Alice随机选择一个介于1到p-1之间的整数a,Bob随机选择一个介于1到p-1之间的整数b

  c. Alice计算A = ga (mod p),Bob计算B = gb (mod p)

  d. Alice与Bob交换A与B

  e. Alice与Bob之间的共享密钥是gab (mod p),分别可以由Ba (mod p)与Ab (mod p)得到

  证明:A= ga (mod p) = ga - k*p     ==>     Ab (mod p) = (ga - k*p)b (mod p)     ==>     对 (ga - k*p)b 做二项式展开,可以知道除了第一项为gab以外,其他的项都带有因数p,这些项都可以在mod p的操作中被约掉     ==>    Ab (mod p)  = gab (mod p)

  如果攻击者想用从p,g,ga,gb计算得到gab,已知的最好算法是GNFS(General Number Field Sieve,一般数域筛法),其时间复杂度为On立方根,这是一个亚指数时间复杂度算法。

  补充:基于椭圆曲线(elliptic curve)的Diffie-Hellman协议有更强大的时间复杂度,下表是相同破解难度下的密钥长度对比

cipher key size modulus size elliptic curve size
80 bits 1024 bits 160 bits
128 bits 3072 bits 256 bits
256 bits(AES) 15360 bits 512 bits

5. 原始的Diffie-Hellman协议只能阻止窃听攻击,无法阻止中间人攻击

  如果有中间人完全劫持了Alice与Bob之间的信道,Alice发送的A被中间人篡改为A'后发送给Bob,Bob发送的B被篡改为B'后发送给Alice。于是Alice认为密钥是gb'a (mod p),Bob认为密钥是ga'b (mod p)。由于中间人知道a'与b',他可以轻易的计算出这两个密钥。现在他需要做的事情只是把Alice发出的密文Ea用gb'a (mod p)解密,即可得到明文P,再把明文用密钥ga'b (mod p)加密后得到的密文Eb转发给Bob即可。

6. Diffie-Hellman具有非互动性,比方Alice,Bob,Charlie,David都在自己的Facebook上公开了自己的公钥(ga,gb,gc,gd),那么如果Alice想要与David通信,她只需要去David的公共主页上看一眼他的公钥gd,就能立刻计算出密钥gad,然后就能与David安全通信了。

7. 基于公钥加密算法的密钥交换体系

  a. Alice生成一个密钥对:pk与sk,然后向Bob发布她的公钥pk

  b. Bob接到pk后生成一个随机密钥k,然后用pk对k进行加密,得到密文E

  c. Bob将E发送给Alice

  d. Alice用私钥sk对E解密,即可得到k

  e. Alice与Bob可以用k进行安全通信了

8. 这种密钥交换体系无法抵御中间人攻击。

  如果中间人完全劫持了Alice与Bob之间的信道,他可以将Alice所发布的公钥pk替换为自己生成的密钥对(pk'与sk')中的公钥pk',然后将pk'发送给Bob。Bob用pk'对k加密得到E'。中间人用私钥sk'对E'解密得到k,然后再用Alice的公钥pk对k进行加密得到E,再将E回传给Alice即可。

原文地址:https://www.cnblogs.com/stevenczp/p/6546031.html