2014-07-18 2 views
0

저는 ECDH를 처음 사용하여 Java에서 비밀 키를 생성하려고했습니다. 나는 코 팩터 키 유도 (cofactor key derivation)와 함께 Elliptic curve Diffie-Hellman을 사용하기를 원했습니다. 나는 타원 곡선 연산에 P-256 곡선을 사용하고 있습니다. 결과 암호를 블록 암호의 대칭 키로 사용할 계획입니다.대칭 키를 생성하기 위해 보조 요소 Diffie-Hellman을 보조 함수 키로 사용

나는이 작업을하고 있으며, 아래의 샘플을 가지고있다. 이것은 비밀 키를 생성합니다.

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)); 

나는 정적 키 대신 일시적인 개인 키와 공개 키를 사용하고 있습니다. 정적 개인 키와 공개 키를 사용하여 비밀 키를 생성하는 방법을 알려주십시오.

답변

1

매번 정적 키를 생성하지 않고 저장합니다. 코 팩터 곱하기를 수행하려면 ECDHCBasicAgreement (추가 C에주의하십시오)을 사용해야 할 수도 있습니다.

이 대칭 키를 생성하는 비결에 대해 KBKDF를 수행해야합니다.

+0

@ Owlstead는 빠른 답장을 보내 주셔서 감사합니다. 자바에서 동일인을위한 보조 요인 변이에 대해 조금 더 알려 주시기 바랍니다. – Manu

+0

사실, 제가 생각하기에 * 상자 밖에서 지원되는 것을 제외하고는 아닙니다. 따라서 BC 경량 (직접) API의 특수 클래스에 대한 참조입니다. –

+0

Owlstead에서 제안한대로 KDF를 사용하고 싶습니다. java 또는 bouncy castle에서 sha-256 구현을 사용하는 KDF에 대한 정보. 장시간 시도한 후에도 많은 정보를 찾을 수 있습니다. – Manu