HTTP는 HyperText인 html을 전송하기 위한 통신규약을 의미하고, 뒤에 S(Secure)를 붙인 HTTPS는 보안이 강화된 통신규약을 의미한다.
HTTP는 암호화 되지 않은 방식으로 서버에 데이터를 전송하기 때문에 중요한 데이터를 전송할 경우 HTTPS 프로토콜을 사용하여 통신해야 한다.
이러한 HTTPS는 SSL 프로토콜을 기반으로 돌아간다.
SSL은 Secure Sockets Layer의 약자로, 암호규약이다. SSL3.0을 계승하는 TLS1.0은 SSL의 new version으로서, 클라이언트/서버 응용 프로그램이 네트워크로 통신하는 과정에서 도청, 간섭, 위조 등을 방지하기 위해 설계되었으며, 암호화를 통해 최종단의 인증과 통신 기밀성을 유지시켜주는데, 보통 TLS도 SSL이라 칭하는 경우가 많다.
SSL 인증서란 클라이언트와 서버 간의 통신을 제 3자가 보증해주는 문서이다. 클라이언트가 서버에 접속하면 서버는 클라이언트에게 인증서를 전달하고, 클라이언트는 이 인증서를 보고 신뢰할 수 있는 대상인지 확인한 후 데이터를 보내는 등의 다음 절차를 수행한다.
즉, SSL의 장점은 다음과 같다.
대칭키 방식은 동일한 키로 암호화와 복호화를 할 수 있는 기법을 말한다. 예를 들어 123를 사용하여 암호화하였다면 복호화도 123를 입력해야 가능하다.
암호화(=암호를 만드는 행위)를 할 때 사용하는 비밀번호를 키(key)라고 한다. 이 키에 따라서 암호화된 결과가 달라지기 때문에 키를 모른다면 암호를 푸는 행위인 복호화도 할 수 없다.
클라와 서버는 대화를 하기 위해서 반드시 대칭 키를 알고 있어야 한다. 그렇기 때문에 통신을 하기 앞서 키를 전달해야하는 과정이 필요하다.
그런데 만약 중간에 대칭키가 유출된다면 키를 획득한 공격자는 암호화된 데이터를 복호화하여 볼 수 있기 때문에 HTTPS를 사용할 필요성이 사라진다.
이러한 단점을 보완하기 위해 나온 방식이 공개키 기법이다.
공개키 방식은 대칭키 방식과 다르게 2개의 키를 가지고 시작한다. 이를 각각 공개키(public key), 비밀키(private key, 개인키/비밀키)라 부른다. 비밀키는 자신만이 소지하고 공개키는 타인에게 제공한다.
동작 원리는 다음과 같다.
공개키로 암호화하면 비밀키로 복호화 한다.
비밀키로 암호화하면 공개키로 복호화 한다. 예를 들어, 클라이언트가 서버의 공개키를 가지고 1234(정보)를 암호화하여 서버에 !@#$ 라는 text를 전달한다. 서버는 클라이언트가 보낸 !@#$ 라는 단어를 비밀키로 복호화하여서 1234라는 것을 확인한다.
일반적으로는 공개키로 암호화 -> 비밀키로 복호화를 한다고 칭한다. 그렇다고 비밀키로 암호화 -> 공개키로 복호화가 틀리다는건 아니다.
그렇기 때문에 개념을 다음처럼 생각하는게 좋다.
공개키 = A / 비밀키 = B
"A 키로 암호화한 데이터를 B 키로 복호화 한다."
즉 키를 공개키로 부르냐 비밀키로 부르냐의 차이가 있을 뿐, 사실상 데이터의 보안을 위해 사용되는 키라는 점을 기억하자.
공개키는 공개되어 있으며 보통 디지털 인증서안에 포함되어 있다. 그렇기 때문에 공개키가 존재한다는건 서버의 신원이 안전하다고 볼 수 있다.
이것을 우리는 전자서명이라고 부른다.
공개키 암호화 방식의 알고리즘은 계산이 느리다는 단점이 있다.
SSL 통신은 handshake -> session -> end session의 과정을 거친다.
