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即可。

Cryptography I 学习笔记 --- 密钥交换的更多相关文章

  1. Cryptography I 学习笔记 --- 总结

    在b站上大概的看完了Dan Boneh的密码学,对现代密码学总算有了一个粗浅的认识. 总算能在纸上手写RSA公式并且证明之了,蛤蛤. 总体的感触就是,现代密码学是一个非常博大精深的体系,我等程序员最重 ...

  2. Cryptography I 学习笔记 --- 基于Diffie-Hellman的公钥加密

    1. Diffie-Hellman协议: 假定g是集合G的生成元,G有n个元素. Alice随机选取1-n中的一个数a,并公布ga为公钥 Bob随机选取1-n中的一个数b,并公布gb为公钥 那么gab ...

  3. Cryptography I 学习笔记 --- 基于陷门置换的公钥加密

    RSA算法的工作流程 1. 生成公钥私钥 生成两个素数p和q,计算n=p*q,计算φ(n)=n-p-q+1,然后生成e与d,使 e * d = 1 mod φ(n). 然后以(n, e)作为公钥,(n ...

  4. Cryptography I 学习笔记 --- 数论简介

    0. Zn代表{0,1....n-1}的集合 1. 模运算符合交换律结合律 2. gcd(greatest common divisor),可以由扩展欧几里得算法快速得到. 3. 模逆(modular ...

  5. Cryptography I 学习笔记 --- 零碎

    1. KDF(密钥推导函数,key derivation function),根据用户输入的一个初始密钥来生成一系列的后续密钥.可以使用PRF来生成 2. 可以用salt与slow hash func ...

  6. Cryptography I 学习笔记 --- 认证加密

    1. 认证加密,Alice与Bob共享一个密钥k,Alice可以发送密文E给Bob,Bob可以确定接收到的E一定是拥有密钥k的Alice产生的.而不是攻击者随便产生的. 2. 认证加密必须能抵挡住选择 ...

  7. Cryptography I 学习笔记 --- 抗碰撞

    1. 生日攻击,如果hash函数可以产生n bit的结果,那么生日攻击的时间复杂度在O(nn/2)这个量级.以比特币使用的SHA256为例,其hash结果为256bit,那么如果想完成一次生日攻击,那 ...

  8. Cryptography I 学习笔记 --- 信息完整性

    1. ECBC-MAC,需要一对密钥k与k1,然后将明文分组,用cbc模式对明文分块加密,将最后的密文块再用k1进行加密,即可得到结果 2. NMAC,需要一对密钥k与k1,然后将明文分组,用k加密第 ...

  9. Cryptography I 学习笔记 --- 使用分组密码

    1. 如果加密算法是确定性的(相同的明文产生相同的密文),那么它对于选择明文攻击是不安全的 2. 随机化加密,每次对相同的密文加密,会产生不同的结果 AES加密模式 ecb:明文分块计算,块与块之间没 ...

随机推荐

  1. A1055 The World's Richest(25 分)

    A1055 The World's Richest(25 分) Forbes magazine publishes every year its list of billionaires based ...

  2. MySQL查询数据库中表名或字段名

    查询数据库中所有表名 select table_name from information_schema.tables where table_schema='csdb' and table_type ...

  3. P2615 神奇的幻方

    P2615 神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首 ...

  4. AppDOMain(摘录)

    AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序. AppDomain是CLR实现 代码隔离 的基本机制. 每一个AppDomain可以单独运行.停止:每个App ...

  5. hnust CZJ-Superman

    问题 B: CZJ-Superman 时间限制: 1 Sec  内存限制: 128 MB提交: 636  解决: 87[提交][状态][讨论版] 题目描述 “那是只鸟?那是飞机?那是——超人!” 程序 ...

  6. Pipenv 学习笔记

    个人笔记,胡言乱语.并不是什么教学向文章.. 前言 在学习了 Python.Java 后,会发现 Java 有很成熟的项目构建工具,以前是使用 xml 的 Maven,现在又出现了使用 groovy ...

  7. Java和C#中神奇的String

    Java String: String 类适用于描述字符串事物.该类是不可以被继承的.我们主要学习: 1字符串特性.字符串最大的特性:一旦被初始化就不可以被改变.重赋值只是改变了引用. 2字符串操作. ...

  8. selenium webdriver——多表单切换与多窗口切换

    多表单切换 >>在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe 表单内嵌页面上的元素无 ...

  9. Threadlocal_笔记

    参考:https://www.jianshu.com/p/377bb840802f https://www.cnblogs.com/dreamroute/p/5034726.html ThreadLo ...

  10. [usaco jan 09] 气象牛 baric [dp]

    题面: 传送门 思路: 题意有点绕,实际上就是给你一个计算规则,让你取最少的元素,通过这个计算方式,得到一个小于指定误差上限的结果 这个规则分为三个部分,这里分别用pre,sum,suf表示 因为给定 ...