SSL의 동작원리1 (암호화 알고리즘)
데이터를 안전하게 전송하려면?
인터넷을 하다보면 포털사이트 혹은 쇼핑몰 등의 사이트에서 브라우저 마다 다르지만 주소를 적는 부분에 자물쇠 모양으로 신뢰감을 주는 페이지를 볼 수 있다. 이런 페이지는 대부분 개인정보를 적는 페이지나 로그인을 하는 페이지에서 많이 볼 수 있다. http 프로토콜에서의 통신은 URL이나 header에 평문으로 데이터를 전송하기 때문에 중간에 누군가가 패킷을 가로채기라도 한다면 개인정보는 그대로 노출 될 수 있다. 이 문제를 해결하려면 클라이언트가 서버로 데이터를 전송 할 때 암호화해 전송하고 서버에서는 복호화하면 된다. 데이터를 암호화 하는 알고리즘의 종류인 대칭키 알고리즘과 공개키 알고리즘에 대해 먼저 살펴보자!
대칭키 알고리즘
대칭키 알고리즘은 데이터를 암호화 하고 복호화 할 때 같은 암호키를 사용하는 암호화 알고리즘이다. 즉, 클라이언트와 서버가 같은 암호화 키를 공유해야 한다는 의미이다. 먼저 서버는 클라이언트에게 암호화 키를 건네주면 클라이언트는 건네받은 암호화키로 데이터를 암호화하여 서버에 전송하면 된다. 문제는 서버가 클라이언트에게 암호화 키를 건네 줄 때다. 기껏 데이터는 암호화 했지만 정작 암호화 키는 암호화 되어 있지 않기 때문에 암호화 키가 노출 되었을 때 데이터는 쉽게 복호화 될 것 이다. 바로 이런 키 관리가 어렵다는 점이 대칭키 알고리즘의 큰 단점이다. 장점으로는 암호화 키를 한 개만 사용하기 때문에 암호화나 복호화를 할 때 비용이 적게 든다는 것이다.
공개키 알고리즘
공개키 알고리즘은 대칭키 알고리즘과 다르게 공개키(public key) 와 비밀키 (private key), 2개의 암호화 키를 사용한다. (비밀키는 개인키라고도 부른다.) 공개키 알고리즘은 공개키를 통해 암호화 된 데이터는 비밀키로만 복호화 할 수 있다. 또, 비밀키로 암호화된 데이터는 공개키로만 복호화 할 수 있다. 왜 이렇게 키를 2개는 쓰는 것일까? 대칭키 알고리즘의 문제점을 말했다시피 암호와 복호화를 하는 데 하나의 키값을 쓰고, 키 값을 서로 공유할 때 노출 될 수 있는 문제점이 있다. 하지만 공개키 알고리즘에서는 공개키를 누구에게나 공개해도 상관없다. 공개키로 암호화 된 데이터는 비밀키로만 복호화 할 수 있기 때문이다. 따라서 공개키는 공유하고 비밀키만 안전하게 보관한다면 암호화 된 데이터를 복호화 하긴 어려울 것이다.
공개키 알고리즘은 이처럼 2개의 키를 사용함으로서 대칭키 알고리즘에 비해 훨씬 안전하게 키를 공유하고 데이터를 암호화 할 수 있다는 장점이있다. 단점은 2개의 키로 암호화를 하다보니 암호화/복호화 하는데 비용이 크다는 문제점이 있다.
SSL의 암호화 알고리즘?
SSL 에서는 위에서 본 2개의 알고리즘 중 어떤 것을 사용 할 까? 나는 당연히 공개키 알고리즘을 사용 해야 한다고 생각했다. SSL은 대칭키 알고리즘과 공개키 알고리즘 둘 다 사용한다. 그 이유는 각 알고리즘의 장점을 보면 알 수 있듯이 대칭키 알고리즘은 암호화/복호화 비용이 적고, 공개키 알고리즘은 키 관리와 보안에 우수한 장점을 섞는 편이 훨씬 좋기 때문이다.
참고자료 암호화 알고리즘