brunch

You can make anything
by writing

C.S.Lewis

액티브X 없는 블록체인 기반 PKI 시스템

카카오 개발자 콘퍼런스 'if kakao 2018' 네 번째 이야기


if kakao 2018 대학(원)생 기자단의 콘퍼런스 취재 글


01. 지식그래프 : 카카오미니와 검색 적용 소개 (발표: 남기훈 / 글: 김동현)

02. 눈으로 듣는 음악 추천 시스템 (발표: 최규민 / 글: 김태훈)

03. 이미지로 이미지 검색하기 (발표: 이주영 / 글: 이가람)

04. 딥러닝을 활용한 뉴스 메타 태깅 (발표: 김기도 / 글: 김규형)

05. 딥러닝을 이용한 실시간 인코딩 효율 최적화 (발표: 여욱형 / 글: 정소영)

06. 카카오 봇 플랫폼 소개 (발표: 황지수 / 글: 이형남)

07. 카카오가 가지고 있는 음성처리 기술 (발표: 노재근 / 글: 이형남)

08. 딥러닝을 이용한 얼굴 인식 (발표: 신종주 / 글: 김동현)

09. TOROS N2 (발표: 김성진 / 글: 김태훈)

10. 텐서플로로 OCR 개발해보기: 문제점과 문제점과 문제점 (발표: 모종훈·오형석 / 글: 이가람)

11. S2Graph와 GraphQL (발표: 윤도영 / 글: 김규형)

12. AI시대에 맞는 서비스 개발(발표: 이석영 / 글: 정소영)





최근에 나온 기사 소개를 통해 이번 글을 시작하려고 합니다. "보험업계에서 카카오페이를 사랑한다"는 '로맨틱'한 제목이 달린 글입니다.   


기사에서 소개된 카카오페이의 블록체인, 이 이야기는 지난 카카오 개발자 콘퍼런스 중 한 세션에서 설명된 바 있습니다. 카카오 개발자 콘퍼런스 그 네 번째 이야기로는 카카오페이 인증과 관련된 ‘액티브X 없는 블록체인 기반 PKI 시스템’을 소개해 드리고자 합니다. 카카오페이 개발자이신 이한욱 님은 본 세션의 발표에서 기존의 공인인증서가 가지고 있던 보안상의 문제점과 카카오페이가 이를 어떻게 해결하였는지, 그리고 카카오페이가 왜 블록체인을 사용했는지를 중점적으로 다루었습니다.


카카오페이는 기존에 청구서, 인증, 송금 부문에서 불편했던 각종 인증 절차들을 비밀번호 입력만으로 간소화하여 사용자가 생각한 편리함과 생활 속 금융의 즐거움을 담아내고 있습니다. 동시에, 카카오페이는 전자서명 플랫폼이라 할 수 있습니다. 전자서명 플랫폼은 사용자에게 인증서를 발급하고 그 인증서로 전자서명을 생성하며, 이렇게 생성된 전자서명을 쇼핑몰 등의 서비스 제공자(service provider)에게 전달하고 검증하는 역할을 수행하고 있습니다. 기존의 공인인증서가 하고 있던 역할을 기술적으로 그대로 수행하고 있다고 볼 수 있습니다.



기존 공인인증서의 문제점과 그 해결방법


전자서명은 우리가 실생활에서 계약서에 서명을 하는 것과 거의 동일한 메타포를 가지고 있습니다. 전세계약을 하는 경우를 예로 들어본다면, 전세계약서에 인감도장을 찍는 행위는 그 계약에 동의함을 의미합니다. 그리고 매우 중요한 계약인 경우에는 계약서와 함께 인감증명서를 같이 내는 경우가 많습니다. 이 인감증명서는 인감도장이 ‘나의 도장이다’라는 것을 국가가 보증해주는 문서입니다.


이러한 과정을 온라인상에서 디지털로 구현한 것이 인증서이며, 서명값을 만들어내기 위해 나만이 가진 값인 비밀키(private key) 그리고 그 쌍이 되는 공개키(public key)가 있습니다. 여기서 공개키는 대한민국 정부가 인감증명서를 발급해주는 것과 마찬가지로 신뢰있는 기관이 서명을 함으로써 비밀키를 한번 감싸준 것 입니다. 이 과정을 바로 ‘인증서를 발급한다’고 이야기하며, 발급되는 문서가 우리가 알고 있는 공인인증서 입니다.


[ 그림 1 ] HTTPs 사용과 공인인증서


이렇게 공개키 기반으로 전자서명을 생성하고 그 전자서명을 검증하기 위해 인증서를 발급하는 기술은 반드시 공인인증서에만 쓰이는 기술은 아닙니다. 대개 안전한 인터넷을 위해 우리가 알고있는 거의 모든 곳에서 이와 같은 기술을 쓰고 있다고 할 수 있을 정도로 광범위하게 쓰이고 있습니다. 이와 같은 기술을 가장 흔하게 접할 수 있는 곳은 인터넷 브라우저 입니다. 최근 인터넷 브라우저들은 HTTPs(Hypertext Transfer Protocol Secure) 통신을 장려하기 위해 주소창에 ‘안전한 연결’이라는 표시를 해주고 있으며, 이를 클릭해보면 검증에 사용된 인증서를 그대로 볼 수 있습니다.


이 인증서는 해당 웹사이트를 서빙(serving)하는 서버의 신원을 확인할 수 있는 인증서이며, 그 인증서가 유효한 인증서인지는 브라우저가 직접 검증을 하게 됩니다. 이를 두고 발표자는 공인인증서가 우리나라에서만 쓰이고 있는 이상한 기술이 아니라 전세계적으로 보안상 인정받고 널리 쓰이고 있는 표준 기술이라는 점을 강조하였습니다. 그럼에도 불구하고 공인인증서는 여러가지 이유로 많은 비판을 받고 있으며, 그 비판 중 주요한 두 가지만 살펴보겠습니다. 



공인인증서의 문제점 1. 액티브X(ActiveX)

[ 그림 2 ] 액티브X 설치 인터넷 익스플로러 창


일반적으로 웹브라우저는 사용자의 하드디스크에 저장된 데이터에 접근을 할 수 없습니다. 하지만 서비스를 이용하기 위해서는 사용자의 하드디스크에 대한 접근이 반드시 필요했고, 그 결과 우리나라에서는 액티브X(ActiveX) 기술이 가장 많이 쓰이게 되었습니다. 액티브X는 마이크로소프트(Microsoft corp)의 기술로, 인터넷 익스플로러(Internet Explorer)에 플러그인(plugin) 형태로 설치하여 작은 실행 파일처럼 동작하는 구조로 되어있습니다. 때문에 마이크로소프트 윈도우 운영체제(Microsoft Windows OS)나 인터넷 익스플로러를 쓰지 않는 사람들은 액티브X로 제공되는 서비스를 전혀 사용할 수 없다는 문제점이 있었습니다. 액티브X를 설치하지 않으면 해당 사이트에서 제공하는 서비스를 받을 수 없어, 설치 관련된 창이 뜨게 되면 [확인] 버튼을 누를 수 밖에 없는 것이죠. 그리고 사용자는 이때 설치되는 프로그램이 안전한 프로그램인지 확인할 수도 없고 오직 [설치] 버튼을 눌러 설치를 할 수밖에 없는 상황에 놓이게 됩니다.


[ 그림 3 ] 액티브X의 문제점을 극복한 카카오페이의 서비스 구조


하지만 2000년대 초반과 비교하여 현재는 상황이 많이 바뀌었습니다. 사용자들이 사용하는 운영체제와 브라우저가 다양해졌으며, 정말 많은 트래픽이 PC에서 모바일로 넘어왔습니다. 그리고 대한민국 국민 대부분이 스마트폰을 사용하고 있고, 스마트폰 사용자 대부분이 카카오톡을 쓰고 있습니다. 카카오페이는 비밀키를 사용자의 PC가 아닌 카카오톡 안에 저장하고 있어 액티브X와 같은 추가적인 프로그램의 설치 없이 얼마든지 전자서명을 만들어 낼 수 있는 구조를 가지고 있습니다. 또한 생성된 전자서명은 카카오페이의 서버를 통해 은행이나 관공서, 쇼핑몰 등과 같은 서비스 제공자에게 안전하게 전달됩니다. 이러한 점 덕분에 윈도우나 인터넷 익스플로러를 사용하지 않더라도 얼마든지 서비스를 이용할 수 있습니다.



공인인증서의 문제점 2. 비밀키의 관리방법


기존 공인인증서가 가진 두 번째 문제점은 비밀키를 어떻게 관리할 것인가의 문제입니다. 서명에 사용될 비밀키는 그 어디에도 유출이 되어서는 안되고 오직 사용자만이 사용할 수 있는 안전한 곳에 저장되어야 합니다. 공인인증서는 사용자의 비밀번호를 이용해서 비밀키를 한번 암호화 한 뒤 NPKI라는 이름의 폴더 안에 인증서와 함께 저장되고 있습니다. 그런데 윈도우라는 운영체제의 특성상 이 폴더는 얼마든지 Ctrl+C, Ctrl+V를 하는 것만으로도 복제가 가능하다는 취약점이 있습니다. 이를 탈취하고자 하는 해커가 있다면 복잡한 기술을 쓸 필요도 없이 해당 폴더만 복사하면 얼마든지 키를 탈취할 수 있다는 것이죠. 해커는 탈취된 키와 함께 사용자의 비밀번호만 알아낼 수 있다면 얼마든지 악의적인 목적으로 이를 사용을 할 수 있게 됩니다. 설령 비밀번호를 알아내지 못하더라도 키 파일만 탈취했다면 브루트 포스 어택(brute force attack)으로 사용자의 비밀번호를 알아낼 수도 있습니다.


[ 그림 4 ] 비밀키의 관리 문제를 해결한 카카오페이의 서비스 구조


하지만 최근 모바일 운영체제들은 이러한 키를 안전하게 보관할 수 있는 공간을 제공하고 있습니다. iOS는 키체인(keychain), 안드로이드는 키스토어(keystore)라는 이름으로 그 API를 제공하고 있으며, 카카오페이는 사용자의 암호화된 비밀키를 이 곳에 저장하고 있습니다. 이러한 방법을 통해 카카오톡이 아닌 다른 앱 또는 인가되지 않은 악성코드들의 접근을 원천 차단할 수 있습니다.


더 나아가 카카오페이는 사용자의 키를 암호화 할 때 그의 비밀번호로만 암호화를 하는 것이 아니라 카카오페이 서버만이 가지고 있는 ‘서버사이드 패스프레이즈(server-side passphrase)’를 이용하여 함께 암호화를 하고 있습니다. 만약 이러한 보안 환경을 뚫고 키 파일 및 사용자의 비밀번호를 탈취당한다 해도 카카오페이 서버를 해킹해서 그 서버사이드 패스프레이즈를 알아내지 않으면 키를 사용할 수 없는 구조입니다. 또한 서명을 생성하거나 요청하는 과정 역시 카카오페이 서버를 거치기 때문에 브루트 포스 공격을 차단할 수 있는 이점이 있습니다. 



카카오페이와 블록체인


카카오페이 인증이라는 서비스가 많고 많은 기술 중 어째서 블록체인을 사용했어야 했는지에 대해 많은 분들이 궁금해하실 것 같습니다. 이에 대해 발표자는 단순히 블록체인이라는 기술이 인기가 있어서 사용한 것이 아니라는 점을 강조했습니다. 서비스 제공자 입장에서는 전자서명과 함께 그 전자서명이 옳은 것인지에 대한 인증서를 전달받게 됩니다. 이후 그 인증서에서 키를 꺼내서 그 키를 가지고 전자서명이 옳은 것인지를 검증하는 과정을 거치게 됩니다. 한편으로 전세계약을 할 때 인감증명서를 내는 앞선 예시와 같이 사실 그 인감증명서 조차도 위조를 할 수 있는 가능성을 배제할 수 없기 때문에 인증서 자체에 대한 검증도 수반되어야 합니다. 그렇기에 인증서를 발급해주는 주체는 그 인증서가 옳은 것인지, 제대로 발급을 받은 인증서가 맞는 지를 검증해야 할 의무가 있습니다.


그런데 서비스 제공자 입장에서는 카카오페이의 서버조차도 의심을 해볼 수 있습니다. 예컨대 어떤 인증서를 보내서 카카오페이 서버라고 주장하는 서버가 옳은 인증서다라고 응답을 보내오는 경우를 생각해 볼 수 있습니다. 바로 이러한 점을 해결하기 위해 카카오페이는 블록체인을 활용해보기로 한 것입니다. 일반적으로 블록체인은 데이터 트랜잭션들을 블록단위로 저장을 하며, 각 블록은 이전 블록의 해시(hash) 값을 가지고 있기에 어떤 블록에 저장된 작은 데이터 조차도 위·변조를 하기 위해서는 블록체인에 저장된 모든 블록의 해시 값을 변조해야 한다는 어려움이 있습니다. 더군다나 그렇게 저장된 데이터들은 네트워크 상에 퍼져있는 여러 개의 노드(node)에 완전히 동일하게 포함되어(implicate) 저장되기 때문에 전체 네트워크를 해킹하지 않는 이상 블록체인에 한번 기록된 데이터들을 바꿀 수 없다는 이점이 있습니다.


[ 그림 5 ] 카카오페이가 활용한 비트코인 공개 네트워크


카카오페이를 개발할 당시인 2016년도에 사용할 수 있었던 유일한 블록체인은 비트코인이었습니다. 이에 비트코인 블록체인을 이용해서 개발을 하기로 결정을 했으며, 카카오페이를 오픈할 때도 마찬가지로 비트코인으로 오픈했습니다. 위의 그림에서 보이는 바와 같이 해당 'OP_RETURN'이라는 이름의 스크립트로 무엇인가 기록되어 있습니다. 비트코인 블록체인은 거래정보를 기록하기 위한 블록체인이지만, 카카오페이 개발팀이 기록하고 싶었던 것은 인증서였습니다. 비트코인에는 일반적인 데이터를 담을 수 있는 공간이 없었지만, 유일하게 있었던 것이 바로 이 OP_RETURN이라는 이름의 스크립트였습니다. 다만 해당 스크립트는 일반적인 데이터를 저장하고자 하는 용도가 아니었기 때문에 제한적인 사이즈의 데이터만 저장할 수 있습니다. 이에 카카오페이 개발진들은 사용자에게 발급되는 인증서의 해시 값을 떠서 이를 비트코인 블록체인에 기록했습니다.


해시 값을 저장하는 것도 큰 의미가 있습니다. 서비스 제공자의 입장에서는 유효함을 주장하는 어떤 인증서가 있을 때 그 인증서의 해시를 한번 뜬 후 그 해시 값과 동일한 데이터가 블록체인 상에 존재하는 지를 확인하면 그 인증서를 신뢰할 수 있기 때문입니다. 이를 바탕으로 현재 카카오페이는 ‘사용자’와 사용자의 비밀키가 저장되어 있는 ‘카카오톡’, 그리고 ‘카카오페이’ 서버에 블록체인을 더하여 훨씬 더 신뢰성 있는 서비스를 제공하고 있습니다.


하지만 비트코인 블록체인을 사용하는 데에는 다소 어려움이 있습니다. 비트코인 블록체인은 평균적으로 10분마다 하나의 블록을 생성하기 때문에 어떤 데이터를 기록한다고 했을 때 그 데이터가 진정으로 블록체인에 기록된 것이 맞는 지 확인하기 위해서는 최소 10분 동안 기다려야 합니다. 그리고 비트코인 블록체인의 특성상 마이너(minor)들이 블록을 생성하기 위한 경쟁을 하고 있어, 설사 블록이 생성되었다 하더라도 체인이 두 개로 갈라져서 그 중 하나만 네트워크의 선택을 받을 가능성이 존재합니다. 이러한 경우 카카오페이 팀이 올린 트랜잭션은 블록이 만들어졌음에도 불구하고 네트워크의 선택을 받지 못하여 버려질 위기에 처하게 됩니다.


더불어 작년 말부터 올해 초까지 전세계적으로 암호화폐에 대한 관심이 높아지면서 블록체인 네트워크로 제출되는 트랜잭션이 기하급수적으로 증가했습니다. 이 경우 마이너들은 그 중 높은 보상을 제공하는 트랜잭션들을 우선적으로 선택해서 블록을 만들 가능성이 높습니다. 물론 이론적으로 제출된 트랜잭션들은 아주 오랜 시간이 지나면 반드시 블록에 포함이 되긴 하지만, 그 시간이 길어지면 길어질수록 서비스를 제공하는 입장에서는 어려움이 커지기 마련입니다. 카카오페이 개발을 진행하면서 가장 심했던 경우에는 제출한 트랜잭션이 2~3주 동안 블록에 포함되지 못해 계속해서 대기했던 적도 있었습니다. 이러한 어려움을 극복하기 위해 카카오페이는 비트코인이 아닌 다른 네트워크로 전환을 했고, 그렇게 선택된 프로젝트가 바로 ‘하이퍼레저 패브릭(Hyperledger Fabric)’이라는 프로젝트입니다.



카카오페이와 하이퍼레저 패브릭


하이퍼레저(hyperledger)는 리눅스 재단(Linux Foundation)에서 주도하는 블록체인 컨소시엄 입니다. 하이퍼레저라는 이름 하에 약 10개 정도의 프로젝트가 돌아가고 있으며 패브릭(fabric)은 이 중 가장 먼저 시작된 프로젝트 입니다. 하이퍼레저 패브릭의 가장 큰 특징은 처음 등장할 때부터 엔터프라이즈(enterprise)를 지향하고 나왔다는 점 입니다. 비트코인이나 이더리움 등 공개된 네트워크의 경우, 블록을 만들기 위해서 컴퓨팅 자원을 쓰는 노드들에게 어떠한 형태로든 보상을 주어야 했습니다. 물론 이러한 점이 비트코인의 가장 혁신적인 특징 중 하나였지만, 만약 이해관계가 있는 기업간의 연동을 위해 블록체인을 사용하는 경우라면 이러한 특징은 크게 필요가 없습니다. 기업들은 이미 자사의 서비스를 보다 활성화시키기 위해 네트워크에 참여할 의지가 있으며, 그렇기에 일반적으로 기업간 연동을 위해 사용되는 블록체인에는 코인이 필요하지 않을 수 있다는 것입니다. 엔터프라이즈 레벨에서의 네트워크는 아무나 참여할 수 없으며 오직 승인된 노드들만 참여할 수 있도록 프라이빗(private)하며, 허가된 네트워크를 구성한다는 점이 특징입니다.

 

[ 그림 6 ] 하이퍼레저 패브릭이 블록체인을 생성하는 방법: immediate finality


또 한가지 중요한 특징으로는 블록체인을 생성하는 방법(immediate finality)을 꼽을 수 있습니다. 위의 그림은 하이퍼레저 패브릭 네트워크가 어떻게 블록을 생성하는지를 도식화 한 것입니다. 일반적으로 공개된 네트워크들은 노드들이 블록을 생성하기 위해 경쟁을 하는 경우가 많습니다. 하이퍼레저 패브릭의 경우, 오더링 서비스(ordering service)라는 중앙화 된 노드들이 그 블록을 생성하는 역할을 담당하고 있습니다. 물론 여기에는 복수 개의 노드들이 참여할 수 있어 완전히 중앙화 된 것은 아닙니다만, 트랜잭션이 오더링 서비스에 제출되면 오더링 서비스는 순서를 매겨 블록을 생성합니다.


허나 오더링 서비스에 트랜잭션이 제출되기 전 클라이언트는 각 피어(peer)라고 불리는 노드들에게 먼저 그 트랜잭션에 대한 프로포절(proposal)을 보내 검증을 받는 과정을 거칩니다. 이 트랜잭션이 유효한 것이라고 여러 개의 피어들이 검증결과를 보내오면 그 검증결과를 한 곳에 모아서 오더링 서비스에 보내게 되고, 오더링 서비스는 순서만 매겨서 바로 블록을 생성하게 됩니다. 이와 같은 하이퍼레저의 특성을 이용한다면 앞서 언급한 비트코인이 가지고 있던 한계점들을 극복할 수 있습니다. 오더링 서비스가 블록을 만들어내는 즉시 카카오페이는 우리가 제출한 트랜잭션이 블록에 포함되었다고 확신할 수 있기 때문입니다. 현재 카카오페이가 올리는 하이퍼레저 패브릭 네트워크는 2초에 한 번씩 블록을 생성하고 있습니다.



카카오는 기존의 공인인증서를 사용하던 사람들이 불편을 느끼고 많은 고민을 하고 있음을 깨닫고 이러한 상황을 개선해보자 하는 취지에서 2015년 카카오페이 인증 버전 0.1을 시작하게 되었습니다. 그리고 약 2년 정도의 개발기간을 거쳐 작년에 서비스를 오픈하였으며, 현재 카카오페이 인증은 약 40개 정도의 제휴사와 긴밀한 관계를 맺고 있습니다. 


본문에 삽입된 슬라이드 자료는 'if kakao 2018' 개발자 콘퍼런스 발표자료에서 인용하였습니다.
(출처: https://if.kakao.com)



콘퍼런스 발표 | 이한욱(nate.act) / 카카오페이



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari