2011-05-09 5 views
5

클라이언트 위치에 공개 키를 교환하는 방법. 개인 키를 사용하여 RSA 알고리즘을 사용하여 문서 (텍스트 파일)를 암호화 한 다음 공개 키를 serialization을 사용하여 파일에 java.security.Key 개체로 저장했습니다. 직렬화 된 공개 키 개체의 무결성에 대해 알고 싶습니다. 그것은 할 수있는 안전한 옵션이나 다른 옵션을 사용할 수 있습니다.직렬화 된 객체로 공용 키 교환

답변

2

공개 키는 대개 텍스트로 교환됩니다. 그런 다음 키 스토어로 가져옵니다. 정확한 수행 방법은 구현에 따라 다릅니다 (항상 PGP를 사용했습니다).

키를 직렬화 된 java.security.Key 형태로 공개하지는 않을 것입니다. 실제로는 표준이 아니기 때문입니다. 단순한 형태의 핵심은 표준 형식의 교환입니다.

키를 다운로드하면 공개됩니다. 공개 키이므로 침입자가 키를 다운로드해도 아무 것도 할 수 없습니다. 잘못 될 수있는 유일한 방법은 누군가가 서버를 위조하여 다른 키를 호스팅 할 수 있다는 것입니다. 그런 다음 해당 키의 개인 키로 서명하고 귀하의 것으로 주장하십시오. 물론 누군가에게 우송하면 같은 문제가 발생할 수 있습니다. 그러나 적어도 당신은 당신이 누구에게 메일을 보냈는지 알 것입니다.

가장 안전한 방법은 키를 범위 밖으로 펼치는 것입니다. usb 막대기에 좋아하십시오.

원인에 따라 위험에 따라 살 수 있다고 생각합니다.

0

Joeri는 보안 측면에 대해 답변했습니다.

주요 문제점은 라이브러리 버전 간 직렬 표현이 변경되어 Java 직렬화를 사용할 때 발생할 수있는 잠재적 문제입니다.

물론 다른 방법이 있습니다. RSA 공개 키에는 getEncoded() 메소드를 사용하여 액세스 할 수있는 업계 표준 인코딩이 있어야합니다. 이렇게하면 write에서 FileOutputStream까지의 바이트 배열을 얻을 수 있습니다. 그래서 정말 쉽습니다.

+0

이것은 사실이지만 실제로 유용합니다. 인코딩 된 바이트가있는 경우, 어떻게 다시 publicKey를 구성 할 수 있습니까? – Suma

+0

대답은 X509EncodedKeySpec에있는 것 같습니다. 답변에이 내용을 포함시킬 수 있습니다. http://v1.dione.zcu.cz/java/docs/tutorial/security/apisign/vstep2.html에서 사용할 수있는 예제 코드 – Suma

관련 문제