该文件不依赖于任何证书或私钥。这也不是秘密。它甚至可以在不一定信任甚至彼此不认识的各种服务器之间共享。
该dh1024.pem文件包含Diffie-Hellman 参数。DH密钥交换是在给定有限群中使用的算法;即,整数模素数p。对于成功的 DH:
- 有已知参数p(大素数)和g(2 到p-2范围内的常规整数,称为生成器)。
- 甲方生成一个随机秘密值a ,计算g a mod p,并将其发送给乙方。
- 乙方生成一个随机秘密值b,计算g b mod p ,并将其发送给甲方。
- 甲方计算 ( g b ) a mod p (将从B收到的值提高到其秘密指数a)。
- 乙方计算 ( g a ) b mod p (将从A收到的值提高到其秘密指数b)。
DH 的神奇之处在于A和B最终得到相同的值,窃听者无法从通过线路发送的两个值重新计算。
在所有这些中,p和g值是“参数”,必须为双方所知;但它们并不是秘密。只要满足以下条件,就可以确保安全:
- p足够大(至少 1024 位;可以说,2048 位会更好)。
- p不是使用使离散对数更容易的“特殊结构”生成的。
- g生成模p的整数子群,其大小是足够大素数的倍数(g模p的阶是最小整数r ≥ 1 使得g r mod p = 1;要求r的长度至少为 160 位,最好是 256 位或更多)。
整个世界可以使用相同的参数;但许多人更喜欢生成自己的参数,只是为了确保他们的参数没有“熟”。这就是这样build-dh做的。结果文件 ( dh1024.pem) 包含p和g,但没有其他内容。这些价值观并不是秘密。它们不依赖于任何外部元素,也不依赖于证书、私钥或其他任何东西。