Tag: diffie hellman

确定Java中TLS握手的Diffie-Hellman“参数”长度

我想与服务器建立HTTPS连接,如果我使用非短暂的DH密钥交换,我想知道该连接的参数是什么。 实际上,我并不关心它是否是短暂的。 我正在寻找的是能够建立连接,然后警告连接是否使用“弱”DH参数。 这是我可以在连接时检查的东西吗? 或者是由密码套件本身定义的DH参数集(或者更具体地说,这些参数的长度 ,以位为单位)? 例如,Qualys社区线程有一个SSLLabs认为“弱”的密码套件的图示(好吧,每个人都认为它们很弱……他们只是有一个抱怨它们的公共工具): https://community.qualys。 COM /线程/ 14821 他们特别提到例如TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 ,它是密码套件0x9f并提及DH参数。 这些参数的参数是否被加密到密码套件中(意味着它们总是 1024位),或者这是服务器的配置,由于特定的DH参数选择,使得这些密码套件变弱了? 在任何一种情况下,如果可能的话,我希望能够从连接中嗅出该信息。 有谁知道这是否可以做到,以及如何做? 我已经编写了一些代码来尝试获取有关握手的信息,但是我一直在为我希望包含这些数据的对象获取null 。 SSLSocketFactory sf = …; Socket sock = new Socket(); sock.connect(address, timeout); SSLSocket socket = (SSLSocket)sf.createSocket(sock, host, port, true); socket.startHandshake(); SSLSession sess = socket.getHandshakeSession(); 我希望此时的sess包含一些关于握手的有趣信息,但它是null 。 startHandshake的javadoc表示它将在握手完成时通知事件侦听器。 所以我尝试了这个: SSLSocketFactory sf = …; Socket sock = new Socket(); […]

如何做Diffie Hellman密钥生成并在Java中检索原始密钥字节

我正在java中为现有程序编写测试工具。 作为这个的一部分,我需要生成一个Diffie Hellman密钥对,并以其原始(即未编码的字节)forms将公钥传递给另一个程序。 我可以使用以下代码成功使用密钥对: KeyPairGenerator kpg = KeyPairGenerator.getInstance(“DiffieHellman”); kpg.initialize(512); KeyPair dkp = kpg.generateKeyPair(); 但是,我似乎无法检索键的原始字节值:-(调用dkp.getPublic().getEncoded()以x509编码格式返回一个字节数组,但它的Key。 我有三种可能的前进方式: 找到一些以原始forms从上面获取关键数据的方法。 将密钥的x509编码解码为其原始格式 以允许访问原始密钥的不同方式生成密钥 但我不是如何去做任何一个(哪个会变得最好)? 任何帮助或建议将不胜感激!

Diffie-Hellman私钥

我有以下代码行来生成私钥: int Xa = randomNo.nextInt(10000); int Ya = (int) Math.pow(G, Xa) % P; G和P是静态数字。 而Xa是随机生成的。 每次我运行程序时,它都会给我相同的结果。 这对Diffie-Hellman来说是否正确? 我认为每次运行算法时都必须更改私钥。

Java Diffie-Hellman密钥交换

我正在尝试执行代码来执行Diffie-Hellman密钥交换。 我从在线示例中获取代码(忘记现在的位置)。 我不得不导入bouncycastle.jar,我假设它一直在执行。 我的代码: package testproject; import java.math.BigInteger; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.MessageDigest; import java.security.SecureRandom; import java.security.Security; import javax.crypto.KeyAgreement; import javax.crypto.spec.DHParameterSpec; public class KeyGen { private static BigInteger g512 = new BigInteger(“1234567890”, 16); //generates a random, non-negative integer for Base private static BigInteger p512 = new BigInteger(“1234567890”, 16); //generates a random, non-negative integer for […]

Java – Diffie-Hellman加密 – 输出错误

我正在尝试实现Diffie-Hellman密钥交换。 我对如何使用密钥生成时有点困惑。 如输出中所示,在密钥交换中使用与正常相同的prime和base生成2个密钥,并在生成密钥时交换公钥,但是它们不输出与我预期相同的值。 我对如何实现这种加密方法感到非常困惑,并且非常感谢某些方向。 我的总体目标是实现加密的SMS Android应用程序。 (截图无法捕捉a&b的基础和素数的整个长度) AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance(“DH”); paramGen.init(512); // number of bits AlgorithmParameters params = paramGen.generateParameters(); DHParameterSpec dhSpec = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class); BigInteger p512 = dhSpec.getP(); BigInteger g512 = dhSpec.getG(); //A KeyPairGenerator akpg = KeyPairGenerator.getInstance(“DiffieHellman”); DHParameterSpec param = new DHParameterSpec(p512, g512); System.out.println(“Prime: ” + p512); System.out.println(“Base: ” + g512); akpg.initialize(param); KeyPair kp = […]

如何在java 8中将DH密钥大小扩展到2048

我读了很多post说在java 8中可以将DH密钥大小扩展到2048.他们说可以通过将以下值更改为系统属性: jdk.tls.ephemeralDHKeySize到jdk.tls.ephemeralDHKeySize我试图计算在哪里以及如何做到这一点,找不到。 我在哪里可以找到这个变量或属性? 哪个文件? 路径? 我正在使用Windows。

为什么SSL握手会给出“无法生成DH密钥对”的exception?

当我与某些IRC服务器建立SSL连接(但不是其他服务器 – 可能是由于服务器的首选加密方法),我得到以下exception: Caused by: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.DHCrypt.(DHCrypt.java:106) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165) … 3 more 最终原因: Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..) at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627) at […]