대칭키의 장단점과 그 단점을 해결하기 위해 나온 것이 공개키이다. 그 등장배경과 특징을 알아보자
대칭키 암호화방식은 암호화, 복호화에 사용하는 키가 동일한 암호화방식을 말한다. 공개키 암호화방식은 암호화, 복호화에 사용하는 키가 서로다른 암호화방식을 말한다.
암호화, 복호화 키가 동일하므로 해당 키를 아는 사람만이 문서를 복호화할 수 있게 된다. 대표적인 알고리즘에는 DES, 3DES, AES, SEED, ARIA가 있다.
공개키 암호화 방식보다 연산속도가 빠르다는 장점이 있으나 키를 교환해야하는 문제가 있다. 키를 교환하는 도중에 탈취될 위험도 있다. 또 사용자가 증가할수록 각각의 키가 필요하므로 관리해야할 키가 방대하게 늘어난다.
이 문제를 해결하기 위해 키의 사전공유, 키 배포센터 사용, Diffie-Hellman 키 교환, 공개키 암호화 방식이 있다.
공개키 암호화방식은 대칭키 암호화방식보다 효율은 떨어지지만 대칭키 암호화방식의 키를 교환해야한다는 문제를 해결하기 위해 등장했다.
대표적인 알고리즘은 Diffie-Hellman 키 교환, RSA, DSA, ECC가 있다. A가 B에게 데이터를 보낸다고 가정하면, A는 B의 공개키로 데이터를 암호화해서 보내고 B는 본인의 개인키로 해당 암호화된 데이터를 복호화해서 볼 수 있다.
➡️ 암호화된 데이터는 B의 공개키에 대응되는 개인키를 가진 B만이 볼 수 있게 된다.
공개키는 키가 공개되어있으므로 키 교환이나 분배를 할 필요가 없다. 중간 공격자가 B의 공개키를 얻는다해도 B의 개인키로만 복호화가 가능하다. 다만, 암호화 복호화를 위해 복잡한 수학연산을 수행하므로 대칭키 알고리즘보다 속도가 느리다.
대칭키만 사용하면 대칭키 탈취 위험도 있고 관리해야할 키의 증가라는 문제가 있었다. 공개키만 사용하면 HTTP 메세지 길이가 큰 경우, 부하로 큰 무리가 될 수 있다. 왜냐하면 공개키 알고리즘은 복호화와 암호화 알고리즘이 매우 복잡하기 때문이다.
따라서 HTTPS에서 공개키 방식으로 대칭키를 전달하고, 서로 공유된 대칭키를 가지고 통신하게 된다. 따라서 사용자들은 공개키 알고리즘으로 안전하게 키 교환을 하고 대칭키 알고리즘을 통해 통신을 하게 된다.
A는 B의 공개키로 암호화 통신에 사용할 대칭키를 암호화해서 B에게 보내면,
B는 암호문을 받고 자신의 비밀키로 복호화해, A로부터 받은 대칭키로 A에게 보낼 평문을 암호화해서 A에게 보낸다.
그럼 A는 자신의 대칭키로 암호문을 복호화한다.
이렇게 해당 대칭키로 계속 통신하게 된다.
대칭키 알고리즘은 기밀성을 제공, 무결성/인증/부인방지를 제공하지 않는다.
공개키 알고리즘은 기밀성/인증/무인방지를 제공한다.
여기서 무결성은 대칭키와 공개키 알고리즘 모두에서 성립되지 않는다. 따라서 전자서명을 추가해서 무결성을 보장한다.