공인인증서와 블록체인을 이용한 공동인증 [1]

     

목차

I. 

암호화와 전자서명
    1.암호
        a.대칭키 암호화
        b.공개키 암호화
    2.전자서명
    3.공인인증서

II. 블록체인을 이용한 인증 바로가기

I.암호화와 전자서명

1.암호화(encryption) 

 암호화(encryption)는 원본 데이터를 해독하지 못하게 암호화하여 데이터의 보안을 유지하는 기술입니다. 초기에 군사 목적으로 사용되던 암호화는 인터넷이 보급되고 개인정보가 중요해 지면서 주변에서 쉽게 접할 수 있는 기술이 되었습니다. 암호화는 일반 평문(PlainText : 암호화하는 대상이 되는 데이터)을 암호화된 데이터(Cyber Text)로 바꾸는 암호화(encrypt) 과정과 암호화된 데이터를 다시 평문으로 복원하는 복호화(decrypt) 과정이 있습니다. 이번 포스팅에서는 대표적인 암호화 방법 중에 암호화 키를 이용한 암호화에 대해서 알아보겠습니다. 암호화 키란 암호화 또는 복호화하는데 필요한 특정 상수값이라고 생각하시면 됩니다.


a.

대칭키 암호화 (Symmetric Key)


 대칭키 암호화는 암호화 과정과 복호화 과정에서 같은 키를 사용하는 암호화 방법입니다. 두 과정에서 같은 키를 사용하기 때문에 대칭키 암호화 방법이라고 불립니다. 대칭키 암호화 방법은 키 하나로 암/복호화가 가능하기 때문에 편리하며, 속도도 매우 빠릅니다. 하지만 대칭키 암호화를 인터넷 통신에 적용하기에는 어려움이 있는데, 그 이유는 송신자와 수신자 모두 암호화 키를 사전에 어떤 방법으로든 공유를 해야 하기 때문입니다. 아래 예를 통해 이 과정에서 어떤 문제가 발생하는지 알아보겠습니다.



예) 박의리는 제일 친한 친구인 김신용에게 소개팅을 시켜주려고 한다. 박의리는 소개팅 상대의 정보와 약속장소 및 시간을 이메일로 전달하려고 한다. 김신용과 박의리는 아무에게도 소개팅 사실을 알리고 싶지 않아 대칭키를 사용하여 암호화 통신을 하기로 했다. 둘은 서로 합의하에 정한 TRI KEY라는 대칭 암호화키를 이용해 암/복호화를 수행했다.



그림1, TRI KEY 대칭키를 이용한 통신

 그림1처럼 박의리는 소개팅 정보(원본)를 TRI KEY로 암호화하여 암호화된 문서를 만들고, 김신용에게 전송합니다. 김신용은 암호화된 문서를 TRI KEY로 복호화하여 소개팅 정보에 대한 원본을 얻을 수 있습니다. 통신환경에서는 암호화된 문서가 전달되기 때문에 중간에 다른 사용자가 문서를 가로채도 암호화 키인 TRI KEY가 없다면 내용을 알 수 없습니다. 하지만 만약 TRI KEY유출된다면, 암호화된 문서를 가로채서 복호화하여 내용을 확인할 수 있고, 원본을 위변조하여 위조된 문서TRI KEY로 암호화해 김신용에게 전달할 수 있습니다. 

그림2. 암호화 키가 유출되어 제 3자가 데이터를 볼 수 있다.

그림3. 제 3자가 데이터를 가로챈후 위조된 데이터를 보낼 수 있다.

 그림2와 3처럼 TRI KEY가 노출되면 누군가가 데이터를 훔쳐보거나, 위변조가 가능합니다. 따라서 TRI KEY를 관리하는 것이 중요한데, 어찌 됬던 통신을 주고받는 두 사람은 TRI KEY를 공유해야 하기 때문에 최초 1번은 TRI KEY를 주고받아야 합니다. TRI KEY를 통신을 통해 주고받으면 되지만, 이 과정에서는 암호화를 할 수 없기 때문에 유출될 가능성이 커집니다. 아니면 온라인이 아니라 오프라인에서 직접 만나서 전달하는 방법도 있지만, 비효율적입니다. 이런 문제를 해결하기 위해 공개키/개인키 암호화 방법이 등장했습니다.


b.공개키/개인키 암호화
 (public key cryptography)

 공개키/개인키를 사용한 암호화 방법은 보통 공개키 암호화라고 불립니다. 암호화/복호화에 하나의 키를 사용하는 대칭키 방식과는 다르게, 두 개의 키가 한 쌍으로 하나는 암호화, 다른 하나는 복호화에 사용합니다. 일반적으로 두 개의 키 중에 하나는 모두에게 공개하고, 다른 하나는 개인만 갖고 있습니다. 암호화 와 복호화 키중 어떤 키를 공개하느냐 따라 용도가 다른데, 암호화 키를 공개할 경우 암호화는 누구나 할 수 있지만, 복호화는 자신만 가능하기 때문에 안전하게 데이터를 주고받을 수 있습니다. 

그림4. 공개키 암호화를 사용한 데이터 전달

 

 반대로 복호화 키를 공개하는 경우가 있습니다. 복호화 키를 공개하는 경우는 '전자서명' 용도로 사용하는 경우입니다. 전자서명이란 전달된 데이터가 자신이 만든 데이터라는 것을 증명하는 절차입니다. 전자서명을 하기 위해서는 원본, 원본을 개인 키(암호화 키)로 암호화한 데이터, 그리고 공개키(복호화 키) 3가지를 한 번에 전달합니다. 데이터를 받은 사람은 암호화된 데이터를 공개키로 복호화하고, 원본과 비교하여 일치하는지 확인함으로써 이 데이터가 송신자가 보낸 데이터가 맞는지 확인하게 됩니다.


그림5. 전자서명을 위한 공개키 사용

 그림5에서 박의리는 원본데이터와 개인키로 암호화한 문서, 그리고 공개키(복호화 키)를 김신용에게 보냅니다. 데이터를 받은 김신용은 암호화된 문서를 공개키로 복호화해 복호화된 문서를 만듭니다. 이 복호화된 문서와 원본이 일치한다면 김신용은 이 데이터가 박의리가 보낸 데이터라는 것을 검증할 수 있습니다. 왜냐하면 복호화해서 원본과 똑같이 만들 수 있는 암호화 키(개인키)는 박의리 혼자만 알고 있기 때문이죠.

 공개키 암호화 방법은 대칭키보다 보안에 더 강하지만, 일반적으로 상당히 복잡한 로직을 사용하기 때문에 속도가 매우 느립니다. 따라서 실시간으로 데이터를 주고받는 통신에서는 공개키를 사용하는 것은 매우 비효율적입니다. 그 때문에 보안을 위한 통신에서는 공개키 방식과 대칭키 방식을 혼합하여 사용합니다.

그림6. 최초 통신에서 공개키를 이용해 대칭키 전달

그림7. 이후 통신에서는 대칭키 사용

 그림6처럼 최초 통신에서 공개키를 이용해 대칭키를 교환한 후, 그림7처럼 이후 통신에서는 대칭키를 사용해 빠르게 통신할 수 있습니다. 우리가 흔히 사용하는 SSL 프로토콜도 위와 같은 방식을 사용합니다.



2.전자서명

 에서 공개키를 사용해 전자서명을 진행하는 방식을 설명해 드렸지만, 실제 전자서명은 더 복잡한 과정으로 이루어져 있습니다. 전자서명의 핵심 기술은 위에서 말했던 '복호화 키를 공개키로 설정하는 것'과 'HASH함수를 사용하는 것' 입니다. HASH함수는 원본 데이터에서 유니크한 '특정 값'을 추출하는 역할을 합니다. 예를 들어 '전화번호 뒷자리'라는 HASH함수는 사람들의 전화번호에서 전화번호 뒷자리만 추출합니다. 010-5400-1234라는 전화번호의 HASH값은 '1234'가 됩니다. 하지만 실제로 전화번호 뒷자리가 같은 사람은 많기 때문에 이 HASH함수는 효과적이지 못합니다. 하지만 널리 사용되는 HASH함수인 MD5나 SHA는 HASH함수의 결과가 겹치는 경우가 거의 없습니다. 이런 HASH함수의 특징 중에 하나는 HASH값을 이용해 원본 데이터로 복원할 수 없다는 점입니다. 우리가 전화번호 뒷자리만 가지고 전화번호 전체를 알 수 없는 것과 같은 원리입니다.

그림8. HASH함수의 원리

 HASH를 사용하는 이유는 공개키/개인키를 사용한 암호화 방식이 복잡하기 때문에 원본데이터의 크기가 클 경우 처리시간이 매우 길어지게 됩니다. 하지만 HASH함수를 이용하면 단축된 고정길이의 HASH값을 생성할 수 있고, 이 HASH값을 암호화(서명)함으로써 처리시간을 단축할 수 있습니다. HASH함수는 같은 값이 들어갈 경우 항상 같은 HASH값이 나오기 때문에, 원본데이터가 변하지 않았다는 무결성도 검증할 수 있습니다.

그림9. HASH함수를 사용한 전자서명

 그림9처럼 암호화와 복호화를 HASH값에 적용함으로써 속도를 향상할 수 있습니다. 어차피 같은 값이 HASH함수를 통하면 같은 HASH값이 나오기 때문에 원본을 비교하는 것과 같은 효과를 볼 수 있습니다. 

 하지만, 다른 곳에 문제가 발생할 수 있는 빈틈이 있습니다. 바로 제3자가 작정하고 가짜 개인키/공개키 쌍을 만들고 위변조된 데이터를 가짜 개인키로 암호화하고, 가짜 공개키와 같이 보내는 경우입니다.

그림10. 제 3자가 가짜 공개키/개인키를 만들어 데이터 위변조하는 경우

 그림10에서는 박의리가 보낸 데이터를 해커가 빼돌리고, 해커의 공개키/개인키를 사용하여 만든 가짜 전자서명 양식을 김신용에게 보냅니다. 전자서명 양식을 받은 김신용은 해커가 보낸 지 모르고, 서명(HASH를 개인키로 암호화한 것)을 공개키로 복호화한 HASH값과 변조본에서 추출한 HASH값을 비교합니다. 당연히 해커의 개인키/공개키 쌍으로 만들었기 때문에 두 HASH값은 일치하게 되고, 전자서명이 검증되어 김신용은 이 데이터가 박의리가 보낸 데이터라고 믿게 됩니다. 실제로는 박의리가 아닌 제3자가 보냈지만, 제3자가 보냈다는 증거를 찾을 수 없기 때문입니다. 이 문제를 해결하기 위해서 박의리와 김신용은 믿을 수 있는 제3자의 도움을 받을 수밖에 없는데, 그것이 바로 '공인인증서'입니다.


3.공인인증서

 앞에 문제를 어떻게 해결할 수 있을까요? 문제해결의 포인트는 데이터의 출처를 증명하는 데 있습니다. 위 문제는 김신용이 받은 데이터에 "이 데이터는 박의리가 보낸게 확실하다"라는 증명이 있으면 해결됩니다. 하지만 이 증명을 할 방법이 없기 때문에 정말 박의리가 보낸 데이터인지, 아니면 제3자가 보낸 데이터인지 알 수 없습니다. 따라서 누군가 믿을 수 있는 제3자가 데이터의 출처를 증명해준다면 이 문제는 해결할 수 있죠. 그 제3자가 바로 공인인증기관입니다. 공인인증기관은 공인인증서 발급해 그 사람이 누구인지 증명하는 역할을 하고 있습니다. 공인인증서를 사용하면 어떻게 되는지 이전방법과 비교해보도록 하죠.

 일단 공인인증서를 이용한 전자서명과정을 설명하기 전에, 공인인증서가 어떻게 구성되어있는지 알아야 합니다. 실제 공인인증서는 상당히 많은 정보를 포함하고 있지만, 핵심이 되는 정보는 "인증주체""주체의 공개키""공인인증기관의 서명" 입니다.

그림11. 공인인증서의 내용

 여기서 인증주체는 인증서를 발급받는 대상입니다. 즉 박의리가 인증서를 발급받으면 인증주체는 박의리가 되고, 주체의 공개키는 박의리의 공개키가 됩니다. 이제 이 공인인증서를 기존에 전자서명과정에서 공개키 대신 전송하면 됩니다.


그림12. 공개키 대신 공개키가 포함된 공인인증서를 전달한다.

 그림12에서 김신용은 인증서에 포함된 박의리의 공개키로 서명을 복호화한 HASH값과, 원본을 HASH함수를 적용해 얻은 HASH값을 비교합니다. 여기까지는 기존의 검증과 같은 방법입니다. 인증서를 사용할 경우 이후에 추가적인 검증절차를 진행하는데, 먼저 인증서에 인증주체가 박의리인지를 확인합니다. 그다음은 공인인증기관의 서명값을 공인인증기관의 공개키로 복호화한 HASH값과 인증서의 내용을 HASH함수를 적용해 얻은 HASH값을 비교해서 이 인증서가 유효한지 검증하게 됩니다.


그림13. 공인인증서 유효성 검사

 그림13에서와같이 공인인증기관의 공개키를 이용해 인증과정을 한 번 더 진행합니다. 인증을 위한 인증이라고 할 수 있습니다. 공인인증서의 유효성이 인증되면, 해당 데이터가 인증주체가 보낸 데이터라는 것을 확신할 수 있게 됩니다. 왜냐하면 공인인증기관은 꼭 해당 인증주체에게만 인증서를 발급하기 때문입니다. (이것이 우리가 공인인증서를 발급받기 위해 까다로운 절차를 진행해야하는 이유이기도 합니다.) 

 다시 공인인증서 유효성 검사과정으로 돌아가면, 공인인증기관의 공개키를 어디서 구하는지 의문이 들게 됩니다. 박의리의 공개키가 박의리 인증서에 저장되어 있듯이, 공인인증기관의 공개키 역시 공인인증기관의 인증서에 저장되어 있습니다. 일반 인증서 사용자들은 공인인증기관의 인증서를 볼 일이 없는데, 그 이유는 대부분 공인인증기관의 인증서는 시스템 서버에 저장되어있기 때문입니다. 금융기관 채널업무를 담당하시는 분들이 바로 이 공인인증기관의 인증서를 직접 관리하고 있습니다. 근데 여기서! 공인인증기관의 인증서는 그럼 누가 인증해 줄까요? 바로 공인인증기관보다 더 상위에 있는 상위 공위인증기관이 인증해 줍니다. 이렇게 타고, 타고 가다 보면 최상위에는 루트인증기관이 있습니다. 이런 루트인증기관의 인증서는 무조건 신뢰할 수 있다는 전제하에 Microsoft가 인증하고, 윈도우와 익스플로러에 설치됩니다. 

 다시 정리하자면, 우리가 사용하는 공인인증서를 통한 전자서명에서의 나에 대한 인증은 공인인증기관이 해주고, 공인인증기관에 대한 인증은 최상위 인증기관(루트인증기관)이 해주고 있습니다. 공인인증기관이 망하지 않는 이상은 일을 제대로 하지 않는 이상은 나 자신을 인증하는 효과적인 방법의 하나입니다. 이 방법까지 어떻게든 해킹하려고 한다면, 해커는 해커 스스로 가짜 공인인증기관을 만들고 루트인증기관에 인증을 받거나, 아니면 아예 루트인증기관까지 만들어 윈도우나 익스플로러에 설치하면 됩니다. 하지만 이 방법은 거~~의 불가능하거나 얻는 것에 비교해 더 큰 일을 해야 하므로 일어날 수 없는 방법이지요.


다음 포스팅에서는 블록체인을 통한 인증방법에 대해 계속해서 진행하도록 하겠습니다.



반응형

댓글

Designed by JB FACTORY