美文网首页密码学专题
10. 密码学专题 - 密钥交换算法

10. 密码学专题 - 密钥交换算法

作者: furnace | 来源:发表于2020-05-10 11:07 被阅读0次

    密码学专题 - 密钥交换算法

    10. 密钥交换算法

    10.1 Diffie-Hellman 算法

    Diffie-Hellman 算法是第一个公开密钥算法,早在 1976 年就发明了。其安全性源于在有限域上计算离散对数比计算指数更为困难。Diffie-Hellman 算法能够用于密钥分配 (Alice 和 Bob 能用它产生秘密密钥),但是它不能用于加密或解密消息。

    数学原理很简单。首先,Alice 和 Bob 协商一个大的素数 ngg 是模 n 的本原元。这两个整数不必是秘密的,故 Alice 和 Bob 可以通过即使是不安全的途径协商它们。它们可在一组用户中公用。

    协议如下:

    1. Alice 选取一个大的随机整数 x,并发送给 Bob:X=g^x \ mod \ n
    2. Bob 选取一个大的随机整数 y,并发送给 Alice:Y=g^y \ mod \ n
    3. Alice 计算 k = Y^x \ mod \ n
    4. Bob计算 k' = X^y \ mod \ n

    kk' 都等于 g^{xy} \ mod \ n。即使线路上的窃听者也不可能计算出这个值,他们只知道 ngXY。除非他们计算离散对数,恢复 xy,否则无济于事。因此 k 是 Alice 和 Bob 独立计算的秘密密钥。

    gn 的选取对系统的安全性有很大的影响。(n-1)/2 也应该是一个素数。最重要的是 n 应该很大:因为系统的安全性取决于与 n 同样长度的数的因子分解的难度。可以选择任何满足模 n 的本原元 g,没有理由不选择所能选择的最小 g —— 通常只是个 1 位数 (实际上 g 不必是素数,但它必须能产生一个大的模 n 的乘法组子群)。

    10.2 三方或多方 Diffie-Hellman

    Diffie-Hellman 密钥交换协议很容易扩展到三人或更多的人。在下例中,Alice、Bob 和 Carol 一起产生秘密密钥。

    1. Alice 选取一个大的随机整数 x,并发送给 Bob:X=g^x \ mod \ n
    2. Bob 选取一个大的随机整数 y,并发送给 Carol:Y=g^y \ mod \ n
    3. Carol 选择一个大的随机整数 z,并发送给 Alice:Z=g^z \ mod \ n
    4. Alice 发送给 Bob:Z' = Z^x \ mod \ n
    5. Bob 发送给 Carol:X' = X^y \ mod \ n
    6. Carol 发送给 Alice:'Y' = Y^z \ mod \ n'。
    7. Alice 计算 k = Y'^x \ mod \ n
    8. Bob 计算 k = Z'^y \ mod \ n
    9. Carol 计算 k = X'^z \ mod \ n

    秘密密钥 k = g^{xyz} \ mod \ n,没有其他人能计算出 k 值,这个协议很容易扩展到四人或更多的人中,只是增加更多的人和增加计算的轮数。

    项目源代码

    项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

    Contributor

    1. Windstamp, https://github.com/windstamp

    相关文章

      网友评论

        本文标题:10. 密码学专题 - 密钥交换算法

        本文链接:https://www.haomeiwen.com/subject/pnuxqhtx.html