문제

현재 클라이언트와 서버간에 데이터를 전송하기위한 시스템을 개발하고 있으며, 내가 계획했던 암호화의 강점이 무엇인지 궁금해하고있었습니다.

제 생각에는 개인/공개 RSA 키 쌍이 있고 각 고객에게 공개 키를 나눠주는 것이 었습니다 (개인 키는 서버에만 남겨 둡니다). 그런 다음 각 클라이언트는 자신의 AES 키를 생성하고 RSA는이를 암호화합니다. 그런 다음 AE는 데이터를 암호화하고 암호화 된 데이터와 암호화 된 AES 키를 서버로 보냅니다. 그런 다음 서버는 개인 키를 사용하여 AES 키를 해독 한 다음 AES 키를 사용하여 데이터를 해독합니다.

내가 놓친 보안 결함이 있거나 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

이것은 거의 정확한 방법입니다 SSL/TLS 작업 (핸드 셰이크 섹션을 확인하십시오). 더 강하게 만드는 유일한 것은 매번 동일한 키를 사용하지 않고 각 연결에 대한 AES 키를 생성하는 것입니다. 또한 중간 및 기타 스푸핑 공격을 피하기 위해 앞뒤로 이동하는 메시지를 디지털로 서명 할 수도 있습니다.

일반적으로 좋은 암호 시스템을 만드는 것은 매우 어렵습니다. 가능하면 항상 기존 (신뢰할 수있는) 응용 프로그램을 선호해야합니다. 이 경우 자신의 시스템을 만드는 대신 HTTPS를 사용하여 메시지를 보내는 것을 고려할 수 있습니다.

다른 팁

사용중인 언어 및 플랫폼에 대한 자세한 정보를 제공하여 이미 존재하는 라이브러리에 대한 구체적인 권장 사항을 제공 할 수 있으며 Wich는 귀하를 위해 세부 사항을 처리 할 것입니다. 암호화 프리미티브를 직접 사용하는 것은 사소하고 정확하게 올바르게 얻는 것이 어렵지 않으며, 암호화를 사용하면 보안이 깨지기 위해서는 한 번만 "정확하지 않다"고해야합니다.


귀하의 질문에 답하기 위해 일반적으로 AES 키 (AES 키)를 Diffie-Hellman Exchange 및 각 측면은 개인 RSA 키를 사용하여 주요 교환 데이터에 서명합니다.

그렇지 않으면, 세션 비밀이 DH 교환을 통해 확립되지 않은 경우, 개인 RSA 키에 대한 액세스를 얻는 대적 (어딘가에 저장해야 함)은 클라이언트와 서버간에 전송 된 모든 트래픽을 해독 할 수 있습니다.

비밀이라면 ~이다 DH Exchange를 통해 확립 된 후 프로토콜의 인증 부분 만 노출됩니다. 개인 RSA 키를 소지 한 적은 이전 커뮤니케이션을 읽을 수는 없지만 여전히 클라이언트/서버와 인증 된 대화 상자를 입력하거나 중간 공격 (Man-in-the-Middle Attack)을 시작할 수 있습니다. 네트워크에 따라 쉽게 수행 할 수 없습니다).

공격자가 공개 키를 "실제"공개 키로 대체 한 경우 중 하나의 취약점이 있습니다. 그러면 그들은 트래픽을 "중간에"가로 채울 수있었습니다.

S/MIME, PGP 및 TLS와 같은 프로토콜은 RSA 암호화를 사용하여 제안한대로 전송 키를 사용합니다. 그러나 그들이 사용하는 공개 키는 신뢰할 수있는 당국이 서명 한 인증서에 있습니다.

이 신뢰할 수있는 당국의 무결성은 신중하게 보호되어야합니다. 예를 들어, 변조 방지 하드웨어 토큰으로 태워 지거나 암호를 사용하여 Mac을 계산할 수 있습니다.

나는 당신의 접근 방식이 무엇이든 보호 할 것이라고 확신하지 않습니다! 서버의 개인 키를 유지하면 공개 키가 배포됩니다. 공개 키를 보유하면 마음대로 서버와 상호 작용할 수 있습니다. 주요 소유권을 되돌려 야한다고 생각합니다. 각 클라이언트는 개인 개인 키를 유지하고 서버에는 공개 키 목록 (ALA SSH)이 있습니다. 서버는 '승인 된'공개 키를 추가해야하며 개인 키 보유자에게만 연결할 수 있습니다.

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top