수동 세션 키 교환
참고
이 섹션에 설명된 절차에서는 사용자(또는 CryptoAPI 클라이언트)가 이미 자체 퍼블릭/프라이빗 키 쌍 집합을 보유하고 있으며 서로의 공개 키도 획득했다고 가정합니다.
다음 그림에서는 이 절차를 사용하여 암호화된 메시지를 보내는 방법을 보여 줍니다.
이 접근 방식은 하나 이상의 일반적인 공격 형태에 취약합니다. 도청은 하나 이상의 암호화된 메시지와 암호화된 키의 복사본을 가져올 수 있습니다. 그런 다음, 나중에 도청자는 이러한 메시지 중 하나를 수신자에게 보낼 수 있으며 수신자는 메시지가 원래 보낸 사람으로부터 직접 오지 않았다는 것을 알 방법이 없습니다. 이 위험은 모든 메시지를 타임스탬핑하거나 일련 번호를 사용하여 줄일 수 있습니다.
다른 사용자에게 암호화된 메시지를 보내는 가장 쉬운 방법은 수신자의 키 교환 공개 키로 암호화된 세션 키와 함께 임의의 세션 키로 암호화된 메시지를 보내는 것입니다.
다음은 암호화된 세션 키를 보내는 단계입니다.
암호화된 세션 키를 보내려면
- CryptGenKey 함수를 사용하여 임의 세션 키를 만듭니다.
- 세션 키를 사용하여 메시지를 암호화합니다. 이 절차는 데이터 암호화 및 암호 해독에서 설명합니다.
- 대상 사용자의 키 교환 공개 키로 키를 암호화할 것을 지정하여 CryptExportKey 함수를 사용하여 세션 키를 키 BLOB으로 내보냅니다.
- 암호화된 메시지와 암호화된 키 BLOB을 모두 대상 사용자에게 보냅니다.
- 대상 사용자는 CryptImportKey 함수를 사용하여 키 BLOB을 CSP로 가져옵니다. 3단계에서 대상 사용자의 키 교환 공개 키를 지정한 경우 세션 키의 암호가 자동으로 해독됩니다.
- 그런 다음, 대상 사용자는 데이터 암호화 및 암호 해독에 설명된 절차에 따라 세션 키를 사용하여 메시지의 암호를 해독할 수 있습니다.