使用Bouncycastle在Java和.NET之间执行Diffie-Hellman密钥交换
我想使用bouncycastle在两个软件组件(Alice和Bob)之间执行Diffie-Hellman密钥交换。Alice和Bob有自己的密钥对,由同一CA颁发。然而,Alice将是Java,Bob将是C 我已经搜索并找到了如何用每种语言进行交换的示例。但我发现的例子有两个问题:使用Bouncycastle在Java和.NET之间执行Diffie-Hellman密钥交换,java,.net,cryptography,bouncycastle,diffie-hellman,Java,.net,Cryptography,Bouncycastle,Diffie Hellman,我想使用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)时的样子 这些示例总是针对使用相同语言编
必要的常数是固定的,即:我们工作的组,以及这个组的一个生成器。对于通常的模块化DH,这意味着模块
p
和生成器g
。此外,您是要实现SSL(或TLS),还是要创建自己的协议(代替SSL/TLS或在SSL/TLS之上)?@Paulo-因为Alice和Bob都有自己的密钥对,我希望在TCP上建立SSL,并使用该流在它们之间执行DH密钥交换。我是否回答了您的问题,或者您是否在问其他问题?那么,如果您已经有SSL保护您的数据连接,为什么还需要另一个DH exchange?如果可以监听连接(例如,在SSL握手中),则DH非常有用。然后,您可以让其中一个生成密钥并发送给另一个。(并不是说我不想让你使用Diffie Hellman,这似乎有点多余。我不知道示例代码。)如果你展示你正在使用的BouncyCastle代码,也许我们可以发现你的错误。必要的常量是固定的,即:我们工作的组,以及该组的一个生成器。对于通常的模块化DH,这意味着模块p
和生成器g
。此外,您是要实现SSL(或TLS),还是要创建自己的协议(代替SSL/TLS或在SSL/TLS之上)?@Paulo-因为Alice和Bob都有自己的密钥对,我希望在TCP上建立SSL,并使用该流在它们之间执行DH密钥交换。我是否回答了您的问题,或者您是否在问其他问题?那么,如果您已经有SSL保护您的数据连接,为什么还需要另一个DH exchange?如果可以监听连接(例如,在SSL握手中),则DH非常有用。然后,您可以让其中一个生成密钥并发送给另一个。(并不是说我不想让你使用Diffie Hellman,这似乎有点多余。我不知道示例代码。)如果你展示你正在使用的BouncyCastle代码,也许我们可以发现你的错误。