0

저는 타원 곡선 암호화 분야에서 아주 새롭고 미경험입니다. 내가 전통적인 DHE와는 달리 결정한 몇몇 연구 끝에 ECDHE 매개 변수가 생성되어서는 안되며 사전 정의 된 곡선 목록 (예 : 'P-521', 'prime192v3')에서 선택되어야합니다.탄력성이있는 ECDHE 보안

네트워크 기반의 보안에 민감한 응용 프로그램을 만드는 동안 하드 코딩 된 단일 곡선을 사용하여 런타임에 다른 곡선을 무작위로 선택하는 것이 좋습니다 (또는 논리적일 수도 있음)?

또한,과 이 약하다는 개념이 있습니다. 선택할 수있는 모든 곡선 사이에 곡선이 있습니까? 지금까지이 코드와 아무 잘못이

//For readability purposes exception checking code not shown, all code is properly exception-handled 
SecureRandom rnd = SecureRandom.getInstance("SHA1PRNG", "SUN"); 

X9ECParameters curve = ECNamedCurveTable.getByName("prime192v3"); 

ECDomainParameters domain = new ECDomainParameters(curve.getCurve(), curve.getG(), curve.getN(), curve.getH(), curve.getSeed()); 
ECKeyGenerationParameters ecgen = new ECKeyGenerationParameters(domain, rnd); 

ECKeyPairGenerator kpgen = new ECKeyPairGenerator(); 

kpgen.init(ecgen); 

AsymmetricCipherKeyPair kp = kpgen.generateKeyPair(); 

있습니까 :

지금까지, 이것은 ECDH 교환을 시작하기에 내 코드?

+0

대부분의 질문은 crypto.stackexchange.com에 더 적합합니다. 질문에 암호화와 같은 공통 태그를 추가해야합니다.이 태그는 레이더 아래에 있습니다. –

답변

1

ECC 암호화의 경우 도메인 매개 변수를 만드는 데 시간이 오래 걸립니다. 또한 도메인 매개 변수의 보안을 확인하기가 매우 어렵습니다. 예를 들어 SafeCurves 연구를 Daniel J Bernstein과 Tanja lange가 확인하십시오. 자신 만의 곡선을 생성 할 수는 있지만 실시간으로 수행 할 수는 없습니다. 또한 보안은 미리 정의 된 것보다 작을 수 있으며 나중에 호환성 문제가 발생할 수 있습니다.

256 비트 이상이면 충분한 보안을 제공해야하지만 곡선의 크기는 분명 중요합니다. 이 아니지만 일 가능성이 있습니다. NIST 곡선은 보안을 약화시킬 수있는 구성표를 사용하여 생성됩니다. 걱정이된다면 위의 사이트에서 곡선을 선택하십시오 (예 : BrainpoolP384r1 곡선) 또는 "학술적"곡선 중 하나를 선택하십시오. F (p) 커브는 다른 커브보다 선호되어야합니다.

코드 검토 사이트는 아니지만 제공 한 코드에 특히 문제가없는 것으로 보입니다.

+0

미리 정의 된 명명 된 커브와 관련하여 런타임에 미리 정의 된 커브 중 하나를 고수해야합니다. 근본적으로 사용 된 곡선을 "무작위 화"하는 데 어떤 이점이 있습니까? (특정 거래소에서 사용 된 곡선은 교환 직전에 일반 텍스트로 제 2 자에게 전달되어 양 당사자는 동일한 곡선을 사용합니다.) – initramfs

+0

@CPUTerminator 그게 당신에게 아무런 도움이되지 않습니다. 사실, 그 중 하나라도 약한 것으로 판명되면 문제가 발생할 것입니다. –

+0

좋습니다. 정보 주셔서 감사합니다! – initramfs