2013-05-10 2 views
0

우선 네트워크 트래픽을 보호하는 방법을 살펴 보았습니다. 많은 답변을 발견했습니다 ... 문제는 내가 너무 많은 예제와 방법을 발견했으며 그 중 대다수가 발견되었습니다. 아주 오래되었습니다 (10 년 이상). 그래서 조금 걱정됩니다.Java 네트워크 트래픽 보호

내가 알고 싶은 것은 서버와 클라이언트 간의 네트워크 트래픽을 암호화 할 수있는 방법입니다.

나는 그것에 대해 학사 학위 수업을 가지고 있으며, 내가 이해하는 바에 따르면, 나는 개인 키와 공개 키 쌍을 암호화하고 해독해야한다. 그러나 나는 중요한 질문에 대한 답을 얻지 못했을 것입니다. 네트워크를 보호해야하는 열쇠가 열쇠 일 때 네트워크를 통해 어떻게 열쇠를 보낼 수 있습니까? 심지어 Java를 처리해야합니까, 아니면 보안 네트워킹의 기본 제공 응용 프로그램이 있습니까?

내가 수업에서 본 것은 강사가 수동으로 일부 키 코드를 확인하여 일부 사람이 메시지를 보내고 있는지 확인해야한다는 것입니다 (수동으로 다른 사람의 화면을보고 키를 비교하여 그들은 실제로 동일했습니다).

현재 소켓을 사용하고 있으며 네트워킹이 Java에서 다르게 수행 될지조차 모르겠습니다. 보안 네트워킹을 어떻게 달성 할 수 있었는지 알고 싶습니다.

관련 자료에 대한 링크가 있으면 좋겠지 만 가능한 경우 가장 좋은 해결책을 알고 싶습니다. 링크/기사의 기한이 지난 경우 5 년 또는 10 년 후에도 사용할 수 있다고 정당화하십시오.

감사합니다.

+2

당신이 웹 서비스를 구축하는 경우, 그냥 컨테이너 (바람둥이, 부두, 등)에 배포 및 SSL 인증서를 사용하는 것을 구성합니다. – David

+0

표준 구현은 [Diffie-Hellman 키 교환]이라고합니다 (http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange) - 이것이 SSL 작동 방식입니다. 많은 수의 구현이 있습니다. 대부분의 (모든?) 웹 서버는 인증서 기반의 인증 기능을 기본적으로 지원합니다. –

+0

미안하지만, 웹 서비스가 아닌 독립형 클린트를 사용하고 있습니다. – skiwi

답변

3

Transport Layer Security (예 : OpenSSL 라이브러리)을 사용하십시오.

보안을 롤업하려면 AES을 사용하여 데이터를 암호화하십시오. Java에는 내장형 지원 또는 AES가 있습니다. 그렇지 않으면 Bouncycastle 라이브러리를 사용할 수 있습니다. 그런 다음 RSA을 사용하여 AES 키를 암호화하고 암호화 된 키와 AES로 암호화 된 데이터를 서버에서 클라이언트로 전송하십시오. 클라이언트는 키를 해독 한 다음 키를 사용하여 AES로 암호화 된 데이터를 해독합니다.

Java AES Tutorial , Java RSA Tutorial

+0

당신은 여전히 ​​네트워크를 통해 RSA 암호화 된 AES 키를 보내는 것을 끝낼 수 있습니까? 그러면 공격자가 AES 키를 스스로 해독 할 수 없습니까? 아니면 100 % 안전합니까? 다른 말로하면 : ** 클라이언트가 AES 키를 해독 할 수있는 이유는 무엇입니까? – skiwi

+1

@skiwi RSA는 개인 키 (또는 비밀 키 또는 대칭) 암호 시스템 인 AES와는 달리 공개 키 (또는 비대칭) 암호 시스템이므로, RSA 및 기타 공개 키 암호 시스템은 보안되지 않은 네트워크를 통해 안전하게 데이터를 전송하도록 특별히 설계되었습니다. [public-key cryptography] (http://en.wikipedia.org/wiki/Public-key_cryptography)의 Wikipedia 페이지에서보다 잘 설명 할 수 있습니다. –

+1

@skiwi 공개 키 암호화는 비밀 키 암호화보다 계산 상으로 많은 비용이 들며 때로는 암호화 할 수있는 데이터의 크기에 대한 제한도 있습니다. 이것이 공개 키와 비밀 키를 모두 사용하는 이유입니다 공개 키 암호 만 사용하는 대신 암호를 사용하여 메시지를 보냅니다. –

관련 문제