我是ECDH的新手,想在Java中生成密钥。我想使用椭圆曲线Diffie-Hellman和辅因子密钥推导。我正在使用P-256曲线进行椭圆曲线操作。我计划使用生成的秘密作为我的分组密码的对称密钥。
我一直在研究这个,并且有下面的工作示例。这会生成密钥。
Provider BC = new org.bouncycastle.jce.provider.BouncyCastleProvider();
ProviderList.newList(BC);
ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("P-256");
KeyPairGenerator g = (KeyPairGenerator) KeyPairGenerator.getInstance(
"ECDH",BC);
g.initialize(ecSpec, new SecureRandom());
KeyPair aKeyPair = g.generateKeyPair();
KeyAgreement aKeyAgree = KeyAgreement.getInstance("ECDH", BC);
aKeyAgree.init(aKeyPair.getPrivate());
KeyPair bKeyPair = g.generateKeyPair();
KeyAgreement bKeyAgree = KeyAgreement.getInstance("ECDH", BC);
bKeyAgree.init(bKeyPair.getPrivate());
aKeyAgree.doPhase(bKeyPair.getPublic(), true);
bKeyAgree.doPhase(aKeyPair.getPublic(), true);
byte[] aSecret = aKeyAgree.generateSecret();
byte[] bSecret = bKeyAgree.generateSecret();
System.out.println(new String(aSecret));
System.out.println(new String(bSecret));
恐怕我使用的是临时私钥和公钥而不是静态密钥。请告诉我如何使用静态私钥和公钥生成密钥。
您可以通过简单地存储静态键而不是每次生成它们来生成静态键。您可能必须使用ECDHCBasicProtocol
(注意附加的C)来执行辅因子乘法。
请注意,您应该对密钥执行KBKDF以生成对称密钥。