2013-11-10 2 views
0

키 교환에 관한 작은 보고서를 작성하고 있으며이 시나리오가 안전한지 묻고 싶습니다.C# AES 키 교환 시나리오 : 안전할까요?

먼저, 간단한 서버 클라이언트 기반 채팅 소스를 만듭니다.

두 개의 필드 (송신자 ID, 메시지)로 구성된 클래스를 서버로 보내면 AES로 암호화됩니다. 서버는 다른 클라이언트에 메시지를 알립니다.

각 클라이언트는 Diffie-Hellman 키 교환을 사용하여 서버와 키를 공유합니다.

모든 단일 클라이언트가 다른 클라이언트에 비해 다른 키가되고, 키 값은

각 클라이언트에 저장되며, 서버 (서버는 모든 클라이언트에 대한 모든 키를 유지합니다.)

내가 물어보고 싶은 첫 번째 일은 이것이 가능한가?

둘째로, 안전할까요?

셋째, 더 똑똑한 방법으로 비슷한 효과를 낼 것입니까?

답변

2

아니요 안전한 것은 아니며 중간 공격의 경우 사람으로부터 자신을 보호하지 않습니다.

귀하가 귀하의 질문에서 귀하가 제공 한 정보에서 클라이언트는 실제 서버가 아닌 서버를 가장하는 사람들이 아닌지 확인할 수있는 방법이 없습니다. 그 가짜 서버는 차례 차례로 클라이언트 인 척하는 실제 서버와 대화 할 수 있습니다. 그런 다음 둘 사이의 모든 통신을 차단할 수 있습니다.

키 교환은 당신이 당신이 비밀리에 에 얘기하는 사람이 정말 당신이에 이야기하고 생각하는 사람이 있는지 확인하기 위해 다른 뭔가를 사용해야합니다, 도청으로부터 보호.

+0

인증 기관에서 키를 가져 오는 것 외에는 중간 공격자를 피할 수있는 다른 방법이 있습니까? – March3

+0

공개 CA가 필요하지 않은 클라이언트와 서버를 모두 제어 할 수 있습니다. 자신의 개인 CA가되어 서버에 대한 인증서를 서명하고 CA에 대한 공개 인증서를 클라이언트에 제공하면 클라이언트는 서버가 자신에게 전송 한 인증서가 서버가 " 진짜 "서버가 아닌 다른 사람이 서버를 사칭하는 것은 아닙니다. CA를 안전하게 유지하고 배포하는 모든 서버에 새 인증서를 사용한다고 가정하면 서버 소프트웨어 복사본을 디 컴파일 할 수 있으며 가짜 서버에서 실제 서버). –