2016년 3월 21일 올라온 트윗은 헤밍웨이가 썼다고 알려진 여섯 단어 소설처럼 신박하다.

그는 공인인증서 없는 한국인처럼 울었다. (@Aresynt)

For sale: baby shoes, never worn

공감하는 사람들이 한참 많이 리트윗하기도 했다. 이 트윗의 주인공, 인터넷 뱅킹을 하는 한국인, 무엇보다 해외에 거주하는 한국인이라면 누구나 이를 바득바득 갈게 만드는 공인 인증서. E. 헤밍웨이가 썼다고 알려진(그러나 진실은 저 너머에, The truth is out there…) 6단어 소설처럼 진한 인상을 주었다.

난 좀 다른 이야기를 하고 싶은데, 소프트웨어 설계의 중요성이 그것이다. 정확히 말하자면 요구사항 분석이겠다.

공인인증서와 SSL의 공통점/차이점

우리가 그토록 “증오하는” 공인인증서는 PKI의 한 종류다. PKI에 기초한 또 다른 기술로 SSL/TLS가 있다(앞으론 SSL이라 하겠다). 이게 오픈웹이 “공인인증서의 대안”으로 주장하는 SSL을 이용한 통신 암호화다. 사람들은 공인인증서를 흔히 ActiveX와 혼동하고 있고, SSL은 웹 브라우저에서 자물쇠 그림과 함께 보이는 HTTPS 주소 연결 정도로 알고 있다.

기술 설명은 글을 쓰는 목적이 아니므로 생략할 것이다. “공인인증서”가 욕을 먹는 까닭과 “SSL 암호화”가 대안이 될 수 없는 이유만 소개하려한다.

인터넷 뱅킹이든, 온라인 쇼핑이든 모두 “거래”라는 관점에서 볼 때 공인인증서와 SSL 인증서의 공통점은 거래 주체의 “신원 증명”에 있다. 거래의 부인을 막기 위한 장치다. 공인인증서는 거래 참여자 가운데 구매자, 대금을 지급하는 쪽에게, SSL은 판매자, 대금을 받는 쪽에게 신원 증명을 요구하는 것이다. 여기에 더해 SSL은 거래 과정에서 다른 사람이 통신을 가로채도 알아볼 수 없도록 암호화하는 중요한 역할을 한다.

잘못된 거래 모델

그런데… 신원 증명을 거래 당사자 모두가 할 필요가 있을까? 인터넷 뱅킹이든, 온라인 거래든, 이도 저도 아닌 오프라인에서도, 거래의 가장 큰 문제는 돈을 떼어 먹는 사고에 있다. 물건을 받는 것도 보통 대금지급 이후에 있으니 여기서 사고가 나면 더 물어볼 것도 없다. 이런 사고를 치는 거래 참여자는 대금을 받는 쪽이다.

주택 거래에도 신원 증명이 요구된다. 이 때에는 거래 목적으로는 구매자에게 신원 증명을 요구하지 않는다. 법인인감증명이 필요한 쪽은 집을 파는 쪽, 그러니까 돈을 받는 쪽이다. 구매자가 거래 과정에서 사기칠 일은 드물테고, 물건을 팔고 돈을 받는 쪽이 거래 부정을 일으킬 가능성이 높으므로 자기 신원을 증명해야 한다.

그럼에도, 온라인 거래에서 구매자, 지급자에게 공인된 인증을 요구하는 까닭은, 그냥 옛날에 은행 창구에서 입출금을 할 때 신분증을 확인하는 과정을 그대로 본떠서 공인인증서를 만들어서 그렇다. 입금하는 사람의 신분증명을 요구하던 관행을 그대로 온라인으로 옮겨 온 셈이다!

대체 이게 왜 필요한 건지 모르겠다. 인터넷 뱅킹은, 은행 창구의 거래를 그대로 본뜨지 말았어야 했다. 오히려 부동산 거래 모델을 따랐더라면, 더 나았을 것이다.

공인인증서의 항변

공인인증서도 클라이언트 인증이라는 측면에서는 HTTPS 연결에서 충분히 쓸 수 있는 기술이다. 웹 브라우저에 내장된 기술로도 얼마든 쓸 수 있다. macOS 같은 경우엔 Keychain이라는 사용자 인증 정보(인증서 포함)를 관리하는 수단까지 제공한다. Windows도 비슷한 장치가 있을 것이다.

그럼에도 불구하고 지금과 같은 ActiveX의 형태를 갖게 된 기술적 배경은 이렇다.

시간을 거슬러 올라가 클린턴 행정부 시절, 미국은 다른 국가가 인터넷에서 암호화 통신을 하면 자신들이 곤란하다고 여겼다. 그래서 해외로 수출하는 암호화 기술은 상대적으로 취약한 암호 알고리즘(인증서의 키 길이는 512 비트, 암호화 키 길이는 56 비트)만 허용하도록 규제를 걸었다.

그때 우리나라는 자국의 안전을 지키고자 HAS160, SEED같이 키 길이(128 비트 이상)가 길고 강한 암호 알고리즘을 만들어 보급하고자 했는데… 어차피 Microsoft같은 업체가 지원을 해줄 이유가 없어서 ActiveX를 이용해 공인인증서 체계를 만들었다(이 내용은 사실 관계를 아는 분이 확인해주면 좋겠다).

지금 기준으로 보면 컴퓨팅 환경이 발달해서 단방향 암호화를 통한 메시지 인증과 해시 생성 알고리즘인 128 비트 SHA1, 키 교환에 쓰이는 1024 비트 DH 그룹, 데이터 블록 암호화에 쓰이는 56 비트 DES, AES 중에서도 128 비트같은 것들은 더 이상 안전한 것으로 간주되지 않는다. 당시로서는 만족 할만한 키 길이였으니, 나쁘지 않은 결정이었다.

미국 정부의 입장이 저러하니 대안도 선택지가 없었다. 아마 ActiveX를 먼저 시작해서 당시 Netscape(네스카페 아님)의 웹 브라우저에서 쓸 플러그인 개발 계획도 있었을 테지만, 시장성을 이유로 결국은 만들지 않았으리라 생각한다. 그럼에도, 통신 암호화를 지원하지 않는다는 점에서는 처음에 잡았던 목표를 반만 이룬 셈이 아닐까?

SSL이 대안일 수 없는 이유

하고 싶은 이야기는 이것이다. 공인인증서는 잘못된 거래 모델을 선택했다.게다가 공인인증서는 사용자 PC와 서버 사이의 통신을 암호화해주지 못한다(이것이 SSL 인증서의 강점이다). 하나 더 지적하자면, 공인인증서 파일이 저장되는 경로도 안전하지 않아 악성코드에 감염되면 쉽게 유출된다. 오히려 웹 브라우저의 인증서 저장소가 더 안전하다.

그럼에도 SSL 인증서에 기반한 통신은 대안이 될 수 없다. SSL 통신을 안전하게 하려면 서버를 관리하는 쪽에서 SSL을 잘 이해하고 적용할 줄 알아야 하는데, SSL Labs의 SSL Server Test에서 확인해보면 완벽하게 구현한 곳을 찾기 힘들다. 이미 취약해진 것으로 잘 알려진 SSLv3를 지원하는 곳이 흔하다. 응? SSL을 쓰면 보안이 좋은 것 아니었나?

“…”

인터넷 범죄자들은 이미 오래된 표준인 SSLv3와 같은 기술을 무력화하는 공격 기법을 갈고 닦기 시작했고, SSL 기술도 한층 더 강화되어 TLS v1.0, TLS v1.1을 거쳐 TLSv1.2까지 발전했다. TLSv1.0도 서버가 잘못 구성되어 있으면 안전하지 않다. 현재는 TLS v1.3 표준이 논의중인 것으로 안다. 앞으로도 뚫고 뚤리는 일은 계속될 것이다.

이렇듯, SSL 통신이 보장하는 통신 구간 암호화만으로는 거래를 충분히 보호할 수 없다.온라인 거래의 안전을 확보하려면 사용자 PC의 안전 보장도 필요하지만, 그리 호락호락하지 않다. 요즘엔 아예 화면을 원격으로 전송하고 키보드 입력까지 가로채는 악성코드들이 흔한데, 자기 PC를 잘 관리하는 사용자를 보기 힘들다… 사람이야말로 가장 취약한 보안의 연결고리가 아니던가.기술만으로는 인터넷 거래의 위험을 제거할 수 없다.

우리나라 인터넷 뱅킹의 초석을 놓으신 분은, 지금 이 지경이 될 줄을 몰랐겠지… 공격 기법이 이렇게 발달할 줄 어떻게 알았겠어? 당시엔 각광받았던 ActiveX가 보안 상 구멍이리라고 누가 생각을 했었을까?

정말 필요한 것

공인인증서는 웹 브라우저의 인증서 저장소를 이용할 수 있도록 변경해 불완전한 ActiveX를 대체하는 게 좋겠다. 공인인증서도 SSL 통신에서 클라이언트 인증을 하는 것과 유사한데 이제는 ActiveX를 고집할 근거도 많이 사라졌고 보완하거나 대체할 수 있는 기술도 이미 나왔다. SSL 통신과 사용자 인증에 OTP만 붙여도 보안은 많이 향상되지 않을까?

그 외에, 실제적인 보안 사고 위협에 대한 대책은 기술이 아니라 제도적인 장치가 필요해보인다. 사업자 입장에서아 전세계 신용카드 업계에서 표준으로 통용되는 PCI-DSS 심사에 필요한 IT 운영체계만 잘 갖추어도 문제 없을 것같은데… 굳이 관치라 이름붙일 만큼 정부에서 관여해야 할 일인가 싶다.

사용자 PC는 믿을 만한 환경으로 보면 안 된다. 지금 금융규제 당국이 그러하듯이 IT만으로 안전을 확보하려는 시도는 미련하기 짝이 없다. 그보다는 거래를 중개하거나 직접 거래를 하는 사업자가 거래 프로세스에 이상이 없는지 따져볼 수 있게 하는 게 낫다.

형만한 아우 없다는데, 세계 최초로 PKI를 적용해 인터넷 뱅킹을 가능하게 한 한국의 공인인증서는 천대받고, 동생격인 SSL/TLS 통신은 보안에 필요한 최소 조건은 된다는 게 참… 사람은 멀리봐야되, 그치?