인증기관(CA)의 역할과 개인키의 유출

2019. 1. 30. 18:08Programming/보안

반응형

Self-signed된 SSL인증서와 관련된 이슈가 발생했다. 개인키(SK)/공개키(PK)에 대한 내용이 잘 기억나지 않아서, 자료를 찾아보며 간단하게 정리하기로 했다.


-----


> 문제가 되는 사항은 다음과 같다. Self-signed된 인증서를 저장하고 있는 서버가 여러개 존재하며, 이 중 하나의 서버에서 개인키가 유출되면 어떠한 상황이 발생하는가? 또한 적합한 인증기관(CA)에서 발급받은 인증서를 적용할 경우, 개인키가 유출되는 사고가 발생하더라도 보안적인 측면에서 문제가 없는가? 


물론 개인키가 유출된 시점에서 보안 측면에서의 얘기는 끝난다. 이유는 인증기관의 역할과 개인키/공개키의 개념이 잡혀있다면 어렵지 않게 설명할 수 있다. 하지만 안타깝게도 백수의 시간과 직장인의 시간 사이에서 시차적응을 하고 있던 나는 개념이 가물가물했기에, 인증기관이 존재함에도 불구하고 개인키를 탈취한 제3자가 전송되는 데이터를 탈취할 수 있는지 정확하게 설명하지 못했다. 어째서인지 기본적인 내용일수록 필요할때 바로 튀어나오지 않는듯한 느낌이 든다.


개인키(Secret Key)와 공개키(Public Key)

=====

이 암호화 방식은 한 쌍을 이루는 두 개의 키로 구성된 암호화 방식이다. 하나의 키로 암호화 된 내용은, 다른 하나의 키로 복호화 할 수 있다는 특징을 가진다. 이런 특성을 지닌 두 개의 키 중 하나의 키를 개인키로써 소유하고, 나머지 하나의 키를 공개키로써 다른 사용자에게 공유한다. 이렇게 키를 관리하는 방법을 개인키/공개키라고 부른다.


공개키로 암호화된 내용은 개인키로만 복호화할 수 있기 때문에, A가 B에게 *B의 공개키*를 이용해서 암호화한 데이터를 전송하면 *개인키를 가지고 있는 B만 데이터를 복호화할 수 있게 되는 것*이다. 안전하게 데이터를 전달할 수 있을뿐만 아니라, 데이터를 제공한 사람이 누구인지도 전달하게 된다.


인증기관(CA, Certificate Authority)이 제공하는 인증서

=====

CA는 서버에 접속하려하는 클라이언트가, 자신이 연결하려고 하는 서버가 맞는지 인증해주는 역할을 한다. CA의 공개키는 브라우저에 제공되며, CA의 비밀키로 서버의 공개키와 서버의 정보를 암호화하여 인증서의 형태로 전달을 하게 된다. 브라우저가 서버에 접속을 할 때 인증서를 전달받게 되는데, 브라우저는 이 인증서를 발급한 CA가 자신의 CA 리스트에 존재하는지 확인한다. 발급한 CA가 자신의 CA 리스트에 존재하는 경우, CA의 공개키로 복호화함으로써 *CA에 의해 인증된 서버임을 알 수 있다.*


여러개의 서버가 하나의 개인키를 공유하고 있을 때, 개인키가 유출된다면 어떻게 될까?

=====

안전한 곳에 개인키를 저장한다면, 유출되는 일은 거의 없을 것이다. 하지만 개인키가 유출된다면 어떠한 상황이 발생할 수 있을까? 당연히 공개키를 이용해서 암호화된 내용을 복호화할 수 있게 되므로, CA와 상관없이 암호화된 내용을 복호화할 수 있다. 여러개의 서버가 동일한 개인키를 사용하고 있다면, 개인키를 공유하고 있는 모든 서버가 안전하지 않게 되는 것이다.


결론

=====

*개인키를 안전한 곳에 안전한 방법으로 보관하지 않으면, CA에서 발급받건 Self-signed 인증서건 의미가 없다.* CA에서 발급된 인증서를 사용하지 않으면 중간자 공격 등에 취약할 수 있다는 내용을 전달받았었는데, 다른 방식의 공격을 착각한게 아닐까 싶다.

반응형