2013-12-13 3 views
0

현재 웹 API를 만들고 있습니다. 나는 클라이언트에서 서버로 보낸 메시지가 충분히 보안이되어 있는지 확인해야한다 (공격자가 읽을 수 있고 클라이언트를 식별 할 수 없다).내 메시지 암호화 설계가 안전합니까?

여기에 예비 설계가 있습니다. 충분히 안전합니까?

나는 PKI를 사용하기로 결정했습니다. 즉, 서버와 클라이언트 모두 RSA 공개 키와 개인 키가 있습니다. 서버에는 클라이언트 ID와 공개 키를 저장하는 데이터베이스도 있습니다.

클라이언트와 서버는 통신하기 전에 diffie-hellman 키 교환을 사용하여 세션 키를 설정합니다. diffle-hellman에서 사용되는 "비밀"은 개인 키입니다. 보낸 메시지는 보낸 사람의 개인 키로 암호화됩니다. 따라서 수신자는 발신자의 공개 키를 사용하여 발신자를 식별 할 수 있으며 중간자 (man-in-the-middle) 공격은 차단됩니다. 그런 다음 세션 키 K가 설정됩니다.

다음 클라이언트가 서버로 메시지를 보내 클라이언트 보내기 : 클라이언트 ID, E H()는 SHA256의 해시 함수 (K, 메시지), H (K, E (메시지) 된 ClientID) 한다.

서버가 메시지를 수신하면 H (K, E (메시지), ClientID)를 계산하고 수신 된 HMAC와 비교합니다. 동일하면 메시지를 보호해야합니다.

내 디자인이 재생 공격을 막지 못한다는 것을 알고 있습니다. 그러나 나는이 단계에서 그것을 고려하지 않을 것이다. 내 디자인이 충분히 안전합니까? 모든 의견은 크게 감사하겠습니다. 많은 감사합니다!

+1

왜 여기 바퀴를 재발 명하고 있습니까?여기 SSL/TLS와 같은 표준 메커니즘이 충분하지 않습니까? –

+0

난 그냥 일을하고 내부의 것들을 배우려고. – KenLai

+0

http://crypto.stackexchange.com –

답변

0

내가 작성한 것처럼 가장 먼저 생각한 것은 재생 공격입니다. 타임 스탬프 또는 카운터를 메시지에 추가하여 메시지를 방지 할 수 있습니다 (두 메시지가 모두 다름).

또한 공개 키를 배포하는 방법에 대해 걱정해야한다는 점에 유의하십시오. 공개 키를 얻으려고 할 때 인증 기관 (CA)없이 인터넷을 통해 수행하는 경우 MitM 공격에 노출 될 수 있습니다!

일부 정통성있는 키를 얻는 것이 중요합니다. 제 생각에는 SSL이 처리해야 할 주요 문제입니다 (CA를 사용하는 경우). 확실한 대칭 키가 주어진 암호화 및 인증은 간단합니다! (암호화 및 MAC 사용)

추가 사항 : H 란 무엇입니까? 해시 함수 또는 HMAC? 둘 다 다른 것입니다!

다음과 같이 작성했습니다. H (K, E (message), ClientID). H를 MAC (MAC에 키가 있음)로 지칭하고 K가 키인 경우 MAC 및 암호화에 대해 다른 키를 사용하는 것이 좋습니다. 그렇지 않으면 - 나는 당신이 당신의 열쇠에 해시/맥을 보내야한다고 생각하지 않는다.

그리고 마지막 두 가지 :

  1. 누군가가 단지 (새 클라이언트 각 시간) 서버 여러 번 문의 할 수 있습니다 및 DoS 공격이 발생합니다.

  2. 왜 클라이언트의 공개 키를 저장합니까? 서버가 클라이언트를 처음으로 알고있는 첫 번째 (잘하면 보안이 설정된) 연결에서 대칭 키를 만들어 저장할 수 있습니다! 더 짧고 효율적입니다.

관련 문제