대칭키의 키 분배문제를 해결하기 위해 1970년대 새로 나온 암호화 방식.
한 사용자는 두개의 키(공개키와 비밀키)를 갖는데, 공개키로 암호화한 원문은 비밀키로만 복호화할 수 있음. 반대로 비밀키로 암호화한 것은 공개키로만 복호화 할 수 있음.
이 중 하나의 키는 공개해서 다른 사람들이 그것으로 암호화해서 자신에게 보내게 하는데 이 키가 공개키. 이 공개키는 누구나 알고 있지만 그것을 복호화 할 수 있는 것은 그것의 비밀키를 가진 한 사람 뿐이므로 안전하다.
공개키는 사용자 인증도 할 수 있는데, A라는 사람이 자신의 비밀키로 암호화해서 보내면 그것을 받은 사람은 A의 공개키로 그것이 열린다면 이것은 A가 암호화해서 보낸 것이구나하고 A에게서 온 것임을 인증할 수 있게 됨.
대신 A가 뿌린 공개기카 A의 것인지 확인할 수 있어야 함. 이 문제는 CA라는 신뢰할 수 있는 기관에게 맡김.
클라이언트와 서버를 신뢰하기 위해서 핸드쉐이크 과정을 거치는데 클라이언트와 서버가 무작위 데이터를 주고받는데 이 때 서버는 인증서를 같이 보냄.
인증서란 CA의 개인키로 암호화되었는데 이것이 CA의 공개키로 풀린다면 믿을 수 있는 CA가 서버를 인증해 준것이라고 판단.
서버가 CA와 함께 자신의 공개키를 주었으므로 이제 그것으로 서로 통신
그러나 공개키방식은 컴퓨터에 부담이 크기때문에 이후에는 공개키방식과 대칭키 방식을 혼용해서 사용.
대칭키의 키분배 문제를 분배 시에 공개키방식을 써서 해결하고, 공개키의 오버헤드는 이후 대칭키로 해결하는 것.
아까 둘이 보낸 무작위 데이터를 가지고 둘이 대칭키를 만드는 것.