密码学:其他常见密码学应用.
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学.
目录:
Diffie-Hellman密钥交换:
Diffie-Hellman (DH) 密钥交换是一种安全协议,可以在双方先前没有任何共同知识的情况下通过不安全信道协商出一个对称密钥。该算法在 1976 年由 Bailey Whitfield Diffie 和 Martin Edward Hellman 共同提出,在密码学上的安全性基于离散对数的难解性。
DH密钥交换算法的过程如下: 假设 Alice 和 Bob 进行秘密通信,需要协商出一个密钥。首先,双方选择一个素数 p 和模 p 乘法群的一个生成元g,这两个数可以在不安全的信道上发送。例如,选择 p= 37 ,g= 2 。Alice 选择一个秘密整数 a,计算A=g^a mod p,发给 Bob 。例如,选择 a=7,则 A=2^7 mod 37 = 17。Bob 选择一个秘密整数 b,计算 B=g^b mod p,发给Alice。例如,选择 b=13,则 B= 2^13 mod = 15。此时 Alice 和 Bob 可以共同得出密钥:
K=A^b mod p= B^a mod p = g^ab mod p
若有一个中间人可以截获所有的信息,但不能进行修改,那么由于中间人只知道4、B、g、P,而不能知道 a 和 b ,故不能获取双方协商出的密钥,除非计算出 logg A或 logg B,计算离散对数的方法和困难性已经讲过。
若中间人不仅可以截获信息,还可以修改信息,那么可以攻击 DH 密钥交换流程.
DH 的中间人攻击过程如下:中间人 Eve 获取到了 p 和 g,如 p=37,g=2,现在 Alice 正要把 A 发送给Bob,此时,Eve 截获 A,自己选定一个随机数 e1 ,选定e=6,则E=2^6 mod 37 = 27。
Bob 把 B 发送给 Alice 时,Eve 重复上述步,选定随机数e2,Alice。例如,选定e2=8,则E2=2^8 mod 37 = 34。
此时,Alice计算出的密钥:
而Bob计算出的密钥为:
此时 Eve 可以知道A、B、e1、e2,自然可以计算出 k1 和 k2。在 Alice 向 Bob 发送加密消息时,Eve 截获消息,使用 k1 解密即可获取明文,再使用 k2 对明文进行加密,转发给 Bob。此时 Bob 可以使用 k2 对消息正常解密,也就是说,他不知道在密钥交换的过程中出现了问题。在 Bob 向 Alice 发送消息时同理这样,Eve 即可控制整个会话.
Hash 长度扩展攻击:
Hash函数(散列函数)是一种将任意位信息映射到相同位大小的消息摘要的方法。优秀的 Hash 函数具有不可逆性和强抗碰撞性,因而经常被用于消息认证。由于 Hash 函数的算法是公开的,故单独使用 Hash 函数很不安全,攻击者可以建立大量的数据 -- 散列值数据库来进行字典攻击。为了避免这种情况,一般选择形如 H(key l message)形式的Hash函数,即在消息前附上一个固定的 key 再进行散列运算。然而,如果使用的是 MD (Merkle-Damgard)型的Hash算法(如MD5、SHA1等),且 Key 的长度是已知的、消息可控的情况下,则容易受到Hash长度扩展攻击。
Hash加密和解密:散列加密 | 哈希加密 |哈希解密 | 散列解密
MD5加密和解密:MD5在线加密/解密/破解—MD5在线
SHA1加密和解密:sha1在线解密 在线加密
MD 型 Hash 算法的特点在于,所有消息在进行计算时会在后面填充上 1 个 01 和若干 00 字节,直到其进制位数等于512x+448,再加上 64bit 的消息长度。另外,MD 形式的 Hash 算法是分组计算的,而每组所得的中间值都会成为下一组的初始向量。不难看出,如果我们知道某一中间值和当前的长度,便可以在后面附上其他消息和填充字节,然后利用中间值 “ 继续算下去 ” ,获得最终的Hash值。Hash长度扩展攻击正是基于此方法。
使用此种攻击方法时,我们不关心原来被 Hash 的消息具体内容,而只关心原来消息的长度,即实际应用中keylmessage 的长度。由于 message 往往是用户可控的值,只要知道服务端 key 的长度,即可成功实施攻击。由于 key 一般不会太长,通过暴力尝试也是可行的。
目前,对于 Hash 长度扩展攻击已经有了完备的工具 Hashpump,这是一个开源软件:GitHub - bwall/HashPump: A tool to exploit the hash length extension attack in various hashing algorithms
Shamir 门限方案:
Shamir 门限方案 是一种秘密共享方案,由 Shamir 和 Blackly 在1970年提出。该方案基于拉格朗日插值法,利用 k 次多项式只需要有 k 个方程就可以将系数全部解出的特性,开发了将秘密分成 n 份,只要有其中的 k 份 (k ≤ n)即可将秘密解出的算法。
设需要 k 份才能解出秘密消息 m,选择 K-1 个随机数a1,.....,an ,和大素数 p (p > m),列出如下模 p 多项式:
随机选择n个整数x,代入上式后得到n个数 (x1,f(x1)), (x2,f(x2) ),..... ,(xn ,f(xn)),这就是共享的 n 份秘密信息.
在恢复秘密消息时只需要 k 个 (xi,f(xi))对,联立上述方程组,利用拉格朗日插值法或矩阵乘法,即可求得秘密消息 m.
CTF和工程上常用的 Shamir 门限实现是 SecretSharing 库:Shamir39 - Mnemonic Code Splitter
学习书籍:从0到1:CTFer成长之路...