我想使用 bouncycastle 在两个软件组件(Alice 和 Bob)之间执行 Diffie-Hellman 密钥交换。Alice 和 Bob 有自己的密钥对,由同一个 CA 颁发。但是,Alice 将是 Java,Bob 将是 C#。
我已经搜索并找到了如何以每种语言进行交换的示例。但是我发现的示例有两个问题:
- 通过在同一个示例代码块中实现 Alice 和 Bob 之间的交换,这些示例过度简化了。当 Alice 和 Bob 实际上必须通过 SSL 流交换中间值(g^a mod p 和 g^b mod p)时,我无法理解 Alice 和 Bob 的样子。
- 这些示例始终适用于以相同语言编写的软件组件。我在别处读到 Diffie-Hellman 密钥交换库经常使用一些内部常量来生成它们的中间值。根据我对 DH 工作原理的了解,我看不出在哪里需要任何类型的常量,但我不是专家。
基于这两个问题,我有两个问题:
- 有谁知道分别显示双方代码的代码示例,以及
- 如果我对 java 和 .net 组件都使用 bouncycastle API,是否有人知道组件无法就相同的秘密对称密钥达成一致的任何原因?