암호화는 전통적으로 소중한 정보를 지키는 방법으로 이용되어 왔습니다. 현대 암호화시스템에서는 RSA알고리즘, 인증서, 인증서 체인 등 복잡다단하게 암호화 통신을 하고 있지만 이렇게 발전하게 된 것은 그리 오래되지 않습니다.
2차세계대전에서 독일군은 현대 암호화의 전신인 에니그마(enigma)라는 암호시스템을 이용하였는데, 튜링이라는 수학자가 이를 해독함으로써 연합군이 승기를 잡을 수 있게 되었죠. 영화 이미테이션 게임에는 이런 튜링의 일화가 잘 나와 있습니다.
대칭키 암호화 (Symmetric key algorithm)
전통적으로 암호화는 대칭키를 이용한 암호화로 이루어져 왔습니다. 송신자는 평문(Plain Text)을 대칭키로 암호화하고 수신자는 동일한 대칭키로 복호화하는 방식입니다.

이러한 대칭키 암호화는 근본적인 문제점이 있는데 송신자와 수신자가 서로 동일한 대칭키를 이미 암호화가 시작되기전에 알고 있어야 한다는 것입니다. 이를 Pre-Shared Key라고도 하죠. 이런 문제를 근본적으로 해결하고 암호키를 쉽게 전달하기 위해 나온 방법이 바로 비대칭키 암호화(Asymmetric key algorithm) 입니다.
비대칭키 암호화 (Asymmetric key algorithm)
현대의 암호화 방식은 암호 시스템의 모든 것이 모두 공개되어도 안전해야 한다는 관점(Kerckhoff의 법칙)을 가지고 있습니다. 이를 만족하면서 키를 공유할 수 있는 방식이 바로 우리가 SSL/TLS 에서 주로 사용하는 RSA 공개키 암호화 방식입니다.

로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman) 세명의 이름(Surname)의 첫글자를 따서 RSA가 됨
RSA 공개키 암호화 방식의 가장 큰 특징은 암호화 키가 한쌍이라는 것입니다. A로 잠궈진 문은 B로만 열 수 있고, B로 잠궈진 문은 A로만 열 수 있다라는 것이 RSA 알고리즘의 핵심 원리입니다.

일반적으로 암호화에 사용될 대칭키를 전달할 때, 이 대칭키를 RSA의 공개키로 암호화하여 상대방에게 전달하고, 비밀키를 가진 상대방만 이를 복호화하여 대칭키를 알아내는 것이 SSL/TLS에서 RSA를 통해 대칭키를 공유하는 방식입니다. RSA 비대칭키는 CPU리소스를 많이 소모하기 때문에, 대칭키 공유시에만 RSA를 쓰고 이후는 대칭키로 암호화 통신하게 됩니다.
인증서와 공개키의 무결성 검증이 필요한 이유

웹서버는 공개키가 포함된 인증서를 사용자에게 보내주어 이 공개키로 암호화 하면 된다고 알려줍니다. 하지만 이 공개키가 정말로 rsec.kr에서 발송한 것인지 아니면 중간에 해커가 조작하여 발송한 것인지는 알 수 없습니다. 해커가 조작한 공개키로 통신하게 되면 도감청이 가능하게 되죠. 이 때 사용되는 것이 인증서 체인(Certificate Chain)입니다.

해쉬와 디지털 서명 (Hash and Digital Signing)

내가 발행한 공개키(rsec.kr)를 보증받기 위해 인증기관(CA)에 공개키를 등록합니다. 이는 인감도장을 동사무소에 등록하는 것과 비슷합니다.
인증기관(CA)이 나의 공개키(인증서)를 보증하기 위해 서명을 합니다. 여기서 서명이란 나의 공개키를 해쉬한 값(SHA256 등)을 인증기관의 비밀키로 암호화한 결과값을 디지털 서명이라고 합니다.
- 공개키에 대해 (해쉬 후) 인증기관의 비밀키로 암호화함
- 역으로 인증기관의 공개키로 이 디지털 서명값을 복호화하면 인증서의 해쉬값을 얻을 수 있음
- 인증서에 등록된 해쉬값과 서명값을 복호화해서 나온 해쉬값이 동일하면 위변조 되지 않았음을 보증
인증서의 주요 정보는:
- 발급대상 (issued, 예: rsec.kr)
- 발급대상의 공개키
- 발급자 (issuer, 인증기관)
- 발급자의 서명 (issuer signing)
이런식으로 상위 인증기관이 하위 인증서의 공개키를 상위기관의 비밀키로 암호화하여 상호 보증하게 되는데 이것이 인증서 체인(Certificate Chain)입니다. 이 체인을 통해 최종 인증서는 중계기관(Intermediate CA)이 보증해주며, 중계기관의 인증서는 루트 인증기관(Root CA)가 보증해주게 됩니다. 루트 인증기관은 셀프 사인하게 됩니다.


사설인증서는 셀프사인하기 때문에 보증하는 기관이 없으며, 따라서 신뢰할 수 없는 인증서가 되는 것이지요. 인증서 체인의 원리는 블록체인의 원리와 동일합니다.

루트 인증기관, 중계기관의 공개키들은 브라우저와 피씨에 이미 포함되어 있습니다 (맥의 경우에는 키체인에 있습니다~).

끝까지 읽어주셔서 감사합니다~
