첫째, 용어 관점 : 설명하는 것은 대칭 암호화 이며 참가자들간에 공유되는 키는 일반적으로 비밀 키라고합니다. "개인 키"는 일반적으로 한 명의 참가자 만 알고 있는 공개 키 암호화 의 키 부분을 의미합니다 .
비밀 키를 배포하는 방법에는 두 가지가 있습니다. 물리적으로 안전한 방식으로 전송되거나 다른 형태의 암호화 (일반적으로 공개 키 암호화)를 사용하여 전송 될 수 있습니다.
비밀 통신 채널이 필요없는 비밀 키를 교환하는 방법이 있습니다. 가장 인기있는 것은 Diffie-Hellman 키 교환 프로토콜입니다.. Diffie-Hellman의 원칙은 각 참가자가 고유 한 키 쌍을 생성하며 하나의 공개 키와 하나의 개인 키로 많은 수를 구성하는 수학 연산이 있다는 것입니다. 이 수학적 연산에는 매우 흥미로운 속성이 있습니다. 다수는 Alice의 개인 키와 Bob의 공개 키 또는 Bob의 개인 키와 Alice의 공개 키로 구성 할 수 있습니다. 어느 쪽이든 같은 숫자를 얻습니다. 따라서 Alice와 Bob은 공개 키를 교환하고 두 당사자는 다수를 알고 비밀 키로 사용할 수 있습니다. 도청자는 공개 키를 모두 찾을 수 있지만 공개 키만으로는 많은 수를 찾을 수 없습니다 ¹.
Diffie-Hellman 키 교환을 통해 두 사람이 누가 듣고 있든 비밀을 교환 할 수 있습니다. 그러나 Alice를 Bob에게 인증하거나 그 반대로 인증하지 않습니다. 따라서 중간자 공격이 가능합니다 . Mallory는 Alice (Bob과 대화하고 있다고 생각하는 Alice)와 Bob (Alice와 대화하고 있다고 생각하는 Bob)과 별도로 키 교환을 수행하여 결정 또는 최소한 비밀을 알고 있습니다.
공격자가 메시지를 가로 채서 주입 할 수 있으면 참가자가 서로를 인증하는 데 더 많은 암호화가 필요합니다. (수동 공격자는 효과적으로 기본 전송 프로토콜이 인증을 제공함을 의미합니다.) 쉬운 방법은 각 참가자가 서로의 공개 키를 이미 알고있는 것입니다. Alice가 Bob의 공개 키를 알고있는 경우 :
- Alice는 Bob의 공개 키로 암호화 된 임의 값 ( nonce ) 을 보내서 Bob을 인증 할 수 있습니다 . Bob이 해당 값을 해독하여 다시 보낼 수 있다면 Alice는 자신이 실제로 Bob과 대화하고 있다는 것을 알고 있습니다.
- Bob은 공개 키로 서명 된 메시지를 보내 Alice와 인증 할 수 있습니다. Alice는 서명을 확인하여 Bob과 실제로 대화하고 있는지 확인합니다.
이러한 방법 중 하나 (또는 또 다른 변형)를 한 방향으로 사용하고 다른 방향으로 동일하거나 다른 방법을 사용하거나 한 방향으로 만 인증하는 많은 변형이 있습니다. 예를 들어 SSL / TLS (HTTPS, SMTPS, IMAPS 등과 같은 많은 -s 프로토콜의 암호화 계층)는 여러 가지 다른 암호 조합을 사용할 수 있으며 일반적으로 서버를 클라이언트로 인증하지만 선택적으로 클라이언트를 인증 할 수도 있습니다. Diffie-Hellman은이 애플리케이션에서 느리고 번거 롭습니다. 공개 키 배포를 통해 가장 널리 사용되는 알고리즘은 RSA 입니다.
물론 Alice와 Bob은 서로의 공개 키를 미리 알지 못할 수도 있습니다. Bob은 Alice에게 공개 키를 사용합니다. Bob은 Alice에게 공개 키와 함께이 키가 실제로 Bob의 공개 키임을 확인하는 서명 된 진술서를 보냅니다. 이 서명 된 진술서를 인증서 라고하며 세 번째 당사자는 인증 기관 입니다. 제 3자는 Bob에게 알려 지거나 제 4 자에 의해 신원이 확인 될 수 있습니다. 결국이 신뢰 체인 (… Bob을 보증하는 Charlie를위한 Dominique 보 증권)은 Bob이 이미 신뢰하는 당사자 Ron에게 도달해야합니다. 즉, Bob은 Ron의 공개 키를 가지고 Ron이 유효한 인증서 만 서명하도록 신뢰합니다.
공개 키 암호화에 의존하지 않는 프로토콜이 있습니다. 특히 Kerberos 프로토콜은 클라이언트와 서버 사이의 연결을 설정하기 위해 유닉스 기반 및 Windows 기반 네트워크 모두에서 사용됩니다. Kerberos는 KDC ( 키 배포 센터) 라는 중앙 인증 서버를 사용합니다 . KDC에는 사용자 암호가 데이터베이스에 저장되어 있어야하며 클라이언트는 일반적으로 사용자에게 암호를 묻습니다. 암호 노출을 피하기 위해 프로토콜은 암호를 직접 사용하지 않지만 암호 해시 또는 일반적으로 암호에 적용되는 키 파생 함수를 사용합니다.
이 공유 비밀을 사용하여 클라이언트와 KDC는 보안 채널을 설정하고 KDC는 클라이언트에 "티켓"을 보냅니다. 티켓에는 세션 키 (예 : 새로 생성 된 비밀 키)와 KDC와 클라이언트가 연결하려는 서버간에 공유되는 다른 대칭 키로 암호화 된 키 사본이 포함됩니다. 그런 다음 클라이언트는이 암호화 된 사본을 서버로 전달합니다. 서버는이 메시지를 해독하여 세션 키를 가져오고 세션 키로 암호화하여 클라이언트로 다시 보내는 nonce를 생성합니다. 그런 다음 클라이언트는 서버로 보안 채널을 시작하고 세션 키로 암호화 한 다음 nonce를 해독 할 수 있음을 표시하여 시작합니다. 이렇게하면 클라이언트가 서버에 인증됩니다. Kerberos 세션 설정은 Needham-Schroeder 프로토콜 의 변형입니다 .
¹ 암호 전문가들은 매우 열심히 노력했지만, 그들이 찾은 최선의 방법은 달성 할 수없는 컴퓨팅 능력을 요구합니다.