ruby openssl diffie hellman实现

时间:2015-12-15 22:03:27

标签: ruby openssl diffie-hellman

我在我的一个学校项目中通过网络实施一些安全措施时遇到了一些麻烦。我们已经有一个使用Ruby运行的完整网络。我们正在尝试使用OpenSSL库使用AES 256 CBC。我们已经尝试过使用Diffie Hellman,但这是我们遇到麻烦的地方: 节点1运行:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class StageTester extends Application {
    @Override public void start(final Stage systemStage) throws Exception {
        UserStage userStage = new UserStage();
        userStage.show();
    }

    private class UserStage extends Stage {
        FlowPane layout = new FlowPane();

        UserStage() {
            super();
            foo();
            setScene(new Scene(layout));
        }

        public void foo() {
            layout.getChildren().add(new Label("foo"));
        }
    }

    public static void main(String[] args) { launch(args); }
}

显然将der发送到n2是正常的,所以n2会有这部分代码:

require 'openssl'
dh1 = OpenSSL::PKey::DH(256)
der = dh1.public_key.to_der
###we would send der to n2 here

现在他们有彼此的信息。但是,收听流量的节点是否能够选择此消息并且能够拥有dh1的密钥?我无法绕过这个。

1 个答案:

答案 0 :(得分:0)

是的,侦听节点可以拥有dh1的公钥。这就是Diffie Hellman的工作方式。窃听者不知道私钥,也不知道共享私钥。在不知道其中一个私钥的情况下,它无法解决共享密钥。

模数方程的设置使得当dh2将dh1的公钥提升为其自己的私钥(dh1_public_key ^ dh2_private_key)的值时,方程的结果是共享密钥,反之亦然。