들어가기 앞서
해당 글은 널널한 개발자님의 인프런 강의 '외워서 끝내는 SSL과 최소한의 암호기술'의 section 1과 section 2를 보고 공부한 내용을 정리한 글입니다.
대칭키는 인터넷 환경에서 심각한 문제를 가지고 있다
인터넷 환경에서 대칭키를 사용하기 위해서는 통신을 진행하고자 하는 두개 이상의 호스트가 자신들이 암호화 해서 주고 받는 암호문을 생성/해석하기 위해 서로 같은 대칭키를 각자가 보유할 필요가 있다. 대칭키는 암호화와 복호화가 모두 하나의 키로 수행되는 키 형태이기 때문에 가령 내 호스트에서 A라는 대칭키로 암호문을 만들어 상대방에서 송신을 한다면, 해당 암호문을 수신받은 수신 호스트는 암호문을 해석하기 위해 A라는 대칭키를 가지고 있어야만 한다는 이야기이다.
그런데 여기에 심각한 문제점이 하나 있다. 일반적으로 키라는 것은 하나의 호스트로부터 생성되는 일종의 '정보'이다. 말 그대로 키는 정보이기 때문에 최초에 암호문으로 인한 통신이 시작될 때, 암호 통신을 주고 받으려고 하는 관계자 호스트들은 암호문의 복호/암호에 사용될 키를 주고 받는 과정이 반드시 필요한 것이다. 키를 주고받기 전에는 상대측에 키가 없으므로 암호화를 진행해서 통신을 진행할 수 없다. 결국 키를 주고 받기 위한 일련의 과정이 암호 통신이 이루어지기 전에 한번은 반드시 필요한 것인데, 이 통신은 키를 주고 받기 이전에 이루어지므로 암호화되어 이루어질 수 없다. 즉, 암호 통신을 수행할 키를 주고 받는 과정이 인터넷 상에서 암호화가 진행되지 않은 상태, 평문 상태로 오고갈 수 밖에 없는 것이다.
이를 해결하기 위해서는 어떤 방법이 필요할까? 인터넷을 통하지 않고 키를 주고 받으면 된다. 물리적인 환경에서 키를 주고 받고, 주고 받은 키를 통해 암호 통신을 시작하면 된다. USB에 대칭키를 담아서 택배로 보내 상대측의 PC에 해당 키를 설치하라고 하던, 종이에 키를 적어서 직접 상대측에게 전달하는 방법들이 있을 수 있겠다.
그런데 만약 송신지와 수신지가 한국과 미국이라면? 만약 수신지가 한군데가 아니라 수십군데 이상이 된다면? 만약 수신지가 계속해서 바뀌거나 계속해서 새로 생겨난다면? USB에 대칭키를 담아 비행기를 타고 계속해서 키를 설치하러 다닐 것인가? 아무래도 물리적인 환경에서 키를 주고 받는 행위는 실현 가능한 시나리오로 보이지는 않는다.
사실 대칭키는 비대칭키와 비교해 매우 효율적인 암호화 시스템이다. 컴퓨터의 전산을 비대칭키만큼 광범위하게 사용하지는 않기 때문이다. 그러나 대칭키는 인터넷 환경에서 위에 언급한 바와 같은 치명적인 문제를 가지고 있다. 비대칭키는 비효율적인 측면에도 불구하고, 대칭키의 이러한 문제점을 개선하기 위해 인터넷 상에서 사용되기 시작했다.
대칭키의 문제점을 해결할 수 있는 비대칭키 시스템
비대칭키는 컴퓨터의 전산을 많이 사용한다는 비효율적인 측면에도 불구하고 인터넷 환경에서 대칭키 시스템이 가지고 있는 치명적인 보안 문제점을 해결할 수 있는 메커니즘을 가지고 있다. 이는 비대칭키가 대칭키와는 달리 하나의 키로 암호/복호화를 진행하는 것이 아니라 쌍을 이루는 각각의 키로 암호화와 복호화를 진행하기 때문인데, 핵심은 하나의 키는 공개를 하되 하나의 키는 공개하지 않음으로써 발생하는 정보의 비대칭성을 암호화에 사용하는 것이다.
백문이 불여일견. 아래의 과정을 통해 비대칭키로 두개의 호스트가 암호 채널을 개설하는 과정을 살펴보자.
- 여기 클라이언트와 서버 호스트가 있다. 양측은 암호 통신을 개설하고 싶다.
- 클라이언트 호스트와 서버 호스트가 각각 자신의 컴퓨터에서 비대칭키를 생성한다.
- 클라이언트 호스트 비대칭키 생성 (클라이언트 공개키, 클라이언트 비밀키)
- 서버 호스트 비대칭키 생성 (서버 공개키, 서버 비밀키)
- 클라이언트 호스트와 서버 호스트가 각각 자신의 공개키를 인터넷상에 공개한다. (IKE, Internet Key Exchange)
- 클라이언트 호스트가 서버 호스트로 통신하고자 하는 평문을 서버의 공개키로 암호화한다. 이후 인터넷으로 암호화된 암호문을 서버 측으로 전송한다. *서버의 공개키로 암호화된 암호문은 서버의 비밀키로만 복호화할 수 있다. 따라서 해당 암호문을 인터넷 상의 누군가가 감청하더라도 해당 암호문을 해석할 수 없다.
- 클라이언트 호스트의 암호문을 서버 호스트가 자신의 비밀키로 복호화한다. 그리고 응답 메시지를 클라이언트의 공개키로 암호화해 클라이언트 측으로 전송한다.
위와 같은 일련의 과정을 통해, 암호 통신을 하는 호스트들은 키를 인터넷에 공개를 하는 과정을 거치고도 보안적으로 안전한 통신을 실시할 수 있다. 대칭키의 문제점이 키를 공개함으로서 발생하였지만, 비대칭키는 이러한 과정을 똑같이 거치고도 공개키와 비밀키 중 공개키만 공개한다는 정보의 비대칭성을 이용해 보안적으로 문제 없이 통신이 진행될 수 있는 것이다.
참고로, 이러한 일련의 과정을 통해 양측의 호스트가 암호 채널을 생성했다면, 이때 생성된 암호 채널(비밀 통신 채널, 암호화 채널...)을 터널이라고 칭한다. 터널은 비유적인 표현으로 외부에서 봤을 때 보이지 않는다는 터널의 특징을 컴퓨터 공학적인 용어로 가져와 사용하는 것이다.
와우 다 좋은데 비대칭키 너무 비효율적이야..
비대칭키는 대칭키에 비해 전산 자원을 많이 사용한다. 이는 공개키를 토대로 해커 등이 비밀키를 추론하지 못하도록 키를 고도로 복잡하게 만들기 때문인 것인데, 키를 복잡하게 만들었기 때문에 키를 생성했을 때 뿐 아니라 해당 키를 이용해 암호/복호화를 진행할 때도 CPU와 같은 컴퓨터의 전산이 과도하게 사용될 수 있다. 또한 키의 일부(공개키)를 공개해 사용하기 때문에 공개키를 기반으로 비밀키를 유추하는 것이 (매우 어렵기는 해도) 불가능한 것이 아니기 때문에 키의 유통기한이 있어 주기적으로 키를 새로 생성해 주어야 하는 과정도 필요하다. 따라서 비대칭키는 사용하지 않을 수 있다면 가급적이면 사용하지 않는 것이 좋다. 그래서 고안된 방법이 비대칭키와 대칭키를 혼합해 사용하는 아래의 방법이다.
- 위와 같은 상황으로 클라이언트와 서버 호스트가 있다.
- 이번에는 서버 호스트에서만 비대칭키를 생성하고, 클라이언트 호스트에서는 대칭키를 생성한다.
- 클라이언트 호스트 대칭키 생성
- 서버 호스트 비대칭키 생성 (서버 공개키, 서버 비밀키)
- 서버 호스트가 자신의 공개키를 인터넷상에 공개한다. (IKE, Internet Key Exchange)
- 클라이언트 호스트가 서버 호스트로 통신하고자 하는 평문을 서버의 공개키로 암호화한다. 이 때 자신이 생성한 대칭키를 함께 암호화한다.
- 서버는 자신의 비밀키로 클라이언트 호스트의 암호문을 복호화한다. 해당 복호문에는 클라이언트 호스트의 대칭키가 함께 들어 있다.
- 서버와 클라이언트 호스트는 클라이언트 호스트의 대칭키를 사용해 터널을 개설하고, 암호 통신을 시작한다.
위의 과정을 통하면 비대칭키를 통해 계속해서 통신을 주고받을 필요가 없다. 비대칭키는 양 호스트가 서로 사용할 수 있는 공동의 대칭키를 안전하게 교환하는 과정에만 사용되기 때문이다. 대칭키가 교환된 이후에는 양 호스트는 대칭키를 사용해 컴퓨터 전산을 효율적으로 사용할 수 있다. 이러한 상황에서 사용되는 대칭키는 특별히 세션키라고 불리기도 한다. 세션키는 '어떠한 통신 채널에서 한시적으로만 사용되는 키'를 의미한다.
그러나 해커는 항상 방법을 찾는다 (비대칭키의 문제점)
위의 비대칭키 시스템의 암호 통신 개설은 보안적인 측면에서 언뜻 훌륭한 답안처럼 보인다. 그러나 허점 또한 존재한다. 웹 해킹 기법중 MITM이라는 해킹 기법이 이러한 비대칭키의 허점을 노린 공격 기법인데, MITM은 Man In The Middle의 약자로 한국어로 번역하면 중간자 공격이라고 한다. 중간자 공격이 무엇인지 아래에서 간략하게 살펴보며 비대칭키 시스템이 가진 허점을 한번 확인해보자.
- 악의적인 의도를 가진 해커가 비밀 통신을 개설하고자 하는 클라이언트와 서버 사이에 몰래 끼어든다. 클라이언트와 서버는 해커가 자신들 중간에 끼여 있다는 사실을 모른다.
- 클라이언트 호스트가 서버에게 공개키를 요청한다. 서버는 클라이언트 호스트에게 자신의 공개키를 공개한다.
- 서버의 응답(공개키 제공)이 클라이언트로 닿기 전, 해커는 해당 메시지를 가로채 서버의 공개키를 자신이 보유하고 임의로 만든 자신의 비대칭키 중 공개키를 서버의 공개키인 것처럼 클라이언트에게 전송한다.
- 서버의 공개키가 아닌 해커의 공개키가 왔다는 것을 전혀 모르는 클라이언트 호스트는 해커의 공개키로 자신의 세션키를 암호화 해 서버로 전송한다.
- 클라이언트의 세션키 정보가 담긴 암호문이 해커에 의해 다시 가로채진다. 해당 암호문은 해커의 공개키로 암호화 되었기 때문에 해커는 자신의 비밀키로 암호문을 복호화할 수 있다. 해커는 클라이언트의 세션키를 확보해 보유한 후, 3번 과정에서 확보한 서버의 공개키로 복호화된 정보를 다시 암호화한다. 그리고 클라이언트의 요청인 것처럼 서버에 전송한다.
- 서버는 해커로부터 온 암호문이 클라이언트로부터 온 암호문이라고 생각하고 자신의 비밀키로 클라이언트의 세션키를 확보한다.
- 해커가 중간에 있다는 사실을 클라이언트와 해커는 모르기 때문에 정상적으로 터널이 개설되었다고 생각하고 세션키로 정보를 암호화해 통신을 시작한다.
- 클라이언트의 세션키를 확보한 해커는 확보한 세션키를 통해 클라이언트와 서버의 통신을 모두 엿듣는다.
MITM 공격이 이용하는 비대칭키의 보안적 허점은 클라이언트 호스트가 수신한 공개키가 서버가 보낸 공개키임을 식별할 수 없다는 부분이다. 비대칭키는 정보의 비대칭성을 이용함으로써 키를 공개하더라도 암호문을 누군가가 감청할 수 없도록 하는데는 성공했지만 누군가 공개키를 위조하는 방식에는 대응할 수 없다.
공개키는 반드시 검증되어야 한다 (SSL 인증서)
MITM과 같은 공격을 방지하기 위해서는 클라이언트 등과 같은 호스트가 자신의 세션키를 암호화하는데 사용되는 공개키가 서버의 진짜 공개키가 맞는지 검증할 수 있는 메커니즘이 필요하다. 만약 신뢰할 수 있는 기관이 신뢰할 수 있는 서버의 공개키를 모두 보유하고 있고, 특정 공개키가 신뢰할 수 있는 서버의 공개키가 맞는지 검증해줄 수 있다면 MITM 공격을 막을 수 있을 것이다. 임의로 생성된 해커의 공개키는 신뢰할 수 있는 기관의 공개키 목록에 들어 있지 않을테니, 만약 클라이언트 호스트가 자신의 세션키를 임의의 공개키로 암호화하기 전에 해당 공개키가 안전한 공개키인지 물어본다면 바로 판병이 가능할 것이기 때문이다.
이러한 과정에서 생겨난 개념이 CA, RA와 같은 개념으로 CA는 인증기관(Certication Authority), RA는 등록기관(Registration Authority)를 일컫는다. CA는 공개키를 생성하고 서버에게 해당 공개키를 할당하는 주체이다. CA의 공개키는 CA에 의해 관리되기 때문에 클라이언트는 특정 서버로부터 공개키를 받았을 때, 이 공개키가 진짜 서버의 공개키인지 아니면 해커의 공개키인지 CA를 통해 검증할 수 있다.
CA로부터 서버로 내려오는 공개키는 사실 공개키만 내려오지 않고 x.509 표준 형식으로 공개키에 부가적인 정보들을 잔뜩 담아서 내려오는데, 이때의 공개키와 부가적인 정보들을 통틀어 SSL이라고 부른다. CA로부터 내려오는 공개키와 부가적인 정보들의 총체를 다른 말로 인증서라고 한다. SSL 인증서는 별게 아니고, MITM 등의 공격을 회피하기 위해 신뢰할 수 있는 검증된 기관으로부터 발행된 비대칭키의 공개키와 부가적인 정보들의 총합인 것이다.
CA로부터 할당받는 SSL 인증서는 유효기간이 존재하는데, 보통 1년까지 SSL 인증서를 많이 사용한다. 신뢰할 수 있는 CA로부터 생성된 SSL 인증서는 돈을 내야 살 수 있다.
함께 공부하면 좋은 내용
공부를 하면서 이해가 된 것 같은데 말로 설명할 수는 없을 것 같은 것들을 기술한다. 말로 설명할 수 없는 것들은 사실 이해되지 않았다는 것을 의미하기 때문에.... 나중에 공부하기 위해 기술한다.
- PKI 인증체계 : SSL 인증서는 공개키, 사용자 정보와 같은 부가적인 정보들, 그리고 공개키와 부가적인 정보들을 해시값으로 암호화한 검증값(Digital sign of CA)가 들어 있다. 이 때 SSL 내부의 해시값은 CA의 비밀키로 암호화되는데, CA의 공개키로 검증값을 복호화해 공개키와 부가적인 정보들의 해시값과 일치하는지 비교해 데이터가 위변조되지 않았는지 검증할 수 있다고 한다. PKI 인증체계는 디지털서명이나 공인인증서, 민간인증서의 근간을 이루는 기술이다.
- 공인인증서, 민간인증서 : PKI 인증체계가 인증서의 근간을 이루는 기술인데... PKI가 이해가 잘... 인증서는 인터넷뱅킹 등에 필요한 기술적인 혜안을 제공할 수 있기 때문에 중요한 것 같다..
'암호학' 카테고리의 다른 글
[외워서 끝내는 SSL과 최소한의 암호기술] 체크섬, Hash, 대칭키, 비대칭키, 디지털 서명 (0) | 2023.04.25 |
---|