
이 포스트는 널널한 개발자님 강의를 참조하여 작성하였습니다.
이제 조금 더 본격적으로 들어가서 인터넷 환경과 결합해서 암호기술을 이해해보겠다. 대칭키 시스템은 인터넷 환경에서 아주 심각한 문제가 있는데 이게 뭐냐면 다음과 같다. 키라는 것도 단순한 정보이다. 그러니까 네트워크로 송수신이 가능하고 usb같은데 저장을 할 수 있고 파일로도 저장이 가능하다. 그래서 이 자체가 노출이 되면 안되는게 대칭키는 보안성을 부여하는 것과 보안성을 해제하는 것 즉, 암호화/복호화를 하나의 키로 해서 인터넷 환경에 적합하지 않다. 이 부분을 자세히 살펴보자.

위의 그림과 같이 호스트 1대와 서버가 1대 있고 이 둘간에 비밀통신을 하려고 한다. 그런데 그대로 기밀정보를 public한 인터넷 환경에 보내게 되면 바로 보안사고가 날 수 있다. 그래서 기밀정보를 암호화를 해서 보내야하고 즉, 대칭키를 통하여 정보를 암호화해서 서버한테 전달하고 이 암호문을 다시 대칭키를 통하여 복호화를 해야하는데 이 대칭키를 어떻게 서버한테 안전하게 전달을 할 수 있을까? 정답은 'NO'이다. 그래서 대칭키 자체는 서버를 설치하거나 할 때 사람이 직접 usb들고 서버에 직접 설치를 해야한다. 이런 점에서 대칭키는 인터넷 환경에서 부적절하다고 한 것이다. 그래서 새로 나온 대안이 비대칭키 체계이다.

비대칭키가 인터넷 환경에서 어떻게 작동하는지 위의 그림을 통해 말해보겠다. 먼저 위의 그림처럼 호스트와 서버 1대가 비밀통신을 하려고 한다. 그러면 가장 먼저 이뤄지는 과정이 호스트와 서버 각각 key쌍을 생성한다. 즉 각각의 private key와 public key를 생성하는 것이다. 그 다음으로 인터넷 환경에서 각각의 public key를 교환(IKE)하는 것이다. 즉, 상대방한테 키를 전달하는 것이다. 그리고 세번째로 pc쪽에서 서버쪽으로 정보를 송신하려고 한다면 정보를 서버의 public key로 암호화를 한 후에 서버쪽에 전달한다. 그러면 서버는 자신의 private key로 복호화를 하여 평문의 정보를 복원시킨다. 반대의 경우도 마찬가지다. 이렇게 호스트와 서버간의 비밀통신 채널 하나가 만들어진 것인데 이것을 Tunnel이라고 한다.
대칭키 체계가 더 효율적이지만 인터넷 환경에 적합하지 않기 때문에 그것을 보완해서 만들어진 체계가 비대칭키 체계이다. 그런데 여기서 고민해야할 부분이 있다. 위의 과정중 첫번째 과정인 key쌍 생성부분이 시간이 매우 오래 걸린다. 그리고 public key가 공개가 되는데 해커가 이 키를 보고 어느정도 private key를 유추가 가능해져 버린다. 그래서 일반적으로 이런 부분으로 인하여 public key를 bit수를 대칭키에 비해 굉장히 늘려서 경우의 수를 늘려서 보안사고에 대비를 하는 것이다.