2012-04-11 2 views
1

나는 안전하게 서버에 데이터를 전송할 수 있어야하는 안드로이드 애플리케이션을 만들고 있습니다. 그래서 저는 RSA를 생각했습니다.한 명의 사용자에 대해 여러 개의 비대칭 키 쌍이 있습니까?

나는 공개 키를 사용자에게 보내고, 사용자가해야 할 일을시키고, 개인적으로 수신하고 해독합니다. 그게 다 괜찮아.

하지만 이제는 다른면에도 암호화가 있어야합니다. 즉, 메시지를 암호화하여 사용자에게 보내는 방법이 있어야하며 특정 사용자 만 메시지를 읽을 수 있어야합니다.

2 쌍의 키가 있고 한 쌍의 공개 키와 다른 한 쌍의 개인 키를 사용자에게 보내고 나머지를 서버에 보관하는 것과 같은 냄새가납니다.

나는 대칭 키를 보았지만 어떻게 든 나에게는 덜 안전 해 보입니다.

내가 누락되었거나 일반적입니까? 나는 전체 암호화 장면에 다소 새로운 것이다.

+0

일반 HTTPS 사용이 작동하지 않습니까? – Thilo

+0

여러 가지 이유로 제어 할 수없는 HTTPS는 현재 선택할 수있는 옵션이 아닙니다. –

+0

각 사용자는 하나의 키 쌍을 가져야합니다.다른 방향으로 보내려면 해당 공개 키로 암호화합니다. – CodesInChaos

답변

1

일반적인 조언이 적용됩니다. HTTPS를 사용하고 보안 메시징 프로토콜을 고안하지 마십시오. 당신은 거의 실패 할 것입니다. 이 작업이 절대적으로 필요한 경우 RSA 키를 사용하여 대칭 세션 키를 암호화하고 데이터를 암호화합니다. 또한 RSA 키로 암호화 할 수있는 데이터의 크기는 키 크기 (1024, 2048 등 비트)로 제한됩니다. 양방향 통신의 경우 각 당사자는 상대방의 공개 키가 있어야합니다. 그래서 이런 식입니다 :

  1. 앨리스 안전하게
  2. 때 앨리스
  3. 밥이 자신의 공개 키 (RSA) 손 (아래 참조)의 공개 키를 안전하게 밥 (RSA) 를 손 Bob은 Alice와 통신하기를 원하고 세션 키 (예 : 256 비트 AES 키)를 생성 한 다음 공개 키를 사용하여 암호화합니다.
  4. Bob이 암호화 된 세션 키를 Alice에게 보냅니다.
  5. Bob은 AES (세션 키)를 사용하여 메시지를 암호화 한 다음 Alice로 보냅니다.
  6. Alice는 그녀의 개인 키 (RSA)를 사용하여 세션 키 (AES)를 해독합니다.
  7. Alice는 세션 키 (AES)를 사용하여 Bob으로부터 메시지를 해독합니다.

다른 방법으로 통신하기 위해 3-7 단계에서 Bob의 Alice 역할을 역순으로 수행합니다.

물론 누군가에게 공개 키를 보내는 경우 실제로 키가 아닌 내 키인지 어떻게 확인할 수 있습니까? 직접 제출하지 않고 사진 ID를 표시하지 않으면 사소한 일입니다.

그런 다음 Bob의 (암호화 된) 메시지가 수정되지 않았 음을 확인하는 방법이 필요합니다 (절반으로 줄이고 여전히 유효하고 암호 해독 가능하며 다른 더 복잡한 공격이 있음).).

HTTPS 나 다른 프로토콜을 사용하도록 설득 할 필요가있는 사람을 설득하고 바퀴를 다시 발명하려고하지 마십시오.

+0

약간의 설득력 있고 HTTPS 였지만, 내부적 인 것들을 위해 사용 된 약간의 핵심 마법을 사용했습니다. 감사! –

관련 문제