저는 2006년부터 지난 7년간 공인인증서에 대한 문제제기를 해 왔고, 그동안 적지않은 분량의 글을 게시했습니다. 어제(8월23일) 고려대 이경호 교수님께서 주선하신 토론회의 앞부분을 잠시 참관할 수 있었고(나머지는 제 일정상 직접 참여할 수는 없었습니다), 나중에 블로터의 정보라 기자님의 블로깅내용을 보았습니다. http://www.bloter.net/archives/161913

제가 받은 인상은 아직도 많은 분들이 적지않은 오해에 근거해서 이런저런 주장을 펴고계시는 것같다는 것입니다. 제가 이해하는 공인인증서 관련 문제들과 해법을 간단히 정리해보고자 합니다. 아마도, 공인인증서에 대해서는 이 글이 마지막이 될것으로 생각(희망)합니다.

1. 인증서

인증서(digital certificate) 기술 자체는 이미 잘 알려져 있고, 인터넷을 이루는 여러 기술 중 하나로서 어느 나라에 고유한 것이 아닙니다. 예를 들어, 비대면 거래에서 본인(당사자 identity)확인에 사용되는 기술 중 하나라는 점, 전자서명 및 서명 검증을 통하여 문서(text string 등)의 변경 여부를 기술적으로 확인할 수 있다는 점 등은 당연한 ‘개념적’ 설명입니다. 인증서파일 자체, 그리고 개인키파일 자체의 “파일 규격”역시 한국이 독자적으로 개발한 것도 아닙니다. 따라서 이런 점에 대해서 굳이 길게 주장할 것은 없습니다.

2. 서버인증서, 클라이언트인증서

인증서 기술은 크게 두가지 용도에 사용됩니다.

(1) “서버”인증서를 이용한 SSL/TLS 접속은 전세계적으로 널리 사용되는 인증서 기술의 적용사례입니다. 한국에서는 SSL/TLS접속(https 프로토콜 접속)이 마치 교신암호화 만을 위한 것으로 흔히 오해하고 있지만, SSL/TLS 접속은 (i)서버의 신원(identity)을 확인하는 기능과 (ii)교신암호화 기능을 모두 제공합니다.

오랫동안 국내 (금융)보안업계에서는 서버신원확인(=서버인증)의 중요성을 아예 이해하지 못한채, 서버 ‘비인증’ 접속(http접속) 상태에서 플러그인을 마구 뿌리고 그것으로 금융거래를 수행해 오다가, 2010년경부터 우리은행(https://www.wooribank.com/)을 시작으로해서, 지금은 국민은행(https://www.kbstar.com/) 외환은행(https://open.keb.co.kr) 등이 서버인증 접속을 사용하고 있습니다.

서버인증서는 외국 인증기관이 발급한 것을 사용할 수 밖에 없는 상황입니다. 우리은행, 국민은행, 외환은행은 모두 베리사인이 발급한 서버인증서를 사용하고 있고, 오픈웹(https://openweb.or.kr)은 스타필드라는 인증기관이 발급한 서버인증서를 사용하고 있습니다(일년에 3만원 가량 내고 있습니다). 그 이유는 다음과 같습니다. 국내 공인인증기관들도 서버인증서를 발급하고는 있지만(한국정보인증은 연간 50만원을 요구하고 있네요), 국내 공인인증기관이 발급한 서버인증서를 사용할 경우 파이어폭스(윈도, 맥, 리눅스 등 모든 OS)그리고 리눅스 OS에서의 모든 웹브라우저에서 “당신이 지금 접속하려는 사이트는 믿을 수 없는 사이트이니, 매우 위험하다”는 치명적 경고가 뜹니다. 그리고 오페라 웹브라우저로는 접속자체가 안이루어집니다. 이런 심각한 결함이 있는 “국내 공인” 서버 인증서를 일년에 50만원씩 주고 구입하는 ‘상용’ 서버운영자는 조금은 비정상적이라고 생각합니다. 하지만 없지는 않습니다. 파이어폭스/오페라로 https://www.docuon.co.kr/ 접속해 보시기 바랍니다.

공인인증제도 덕분에 베리사인 등 ‘외국’ 인증기관의 국내 진입은 막았지 않느냐? 근거 없는 이야기이지요. 국내 공인인증기관은 서버인증서 영업을 수행할 역량 자체가 아예 없고, 서버인증서 시장은 지금도 외국 인증기관이 독식하고 있습니다. 그 이유는 국내 최상위 공인인증기관 KISA가 제3자 검증을 받지 않기 때문에 웹브라우저들이 믿어주지 않기 때문입니다. KISA가 지금이라도 제3자 검증을 제대로 받으면, 나머지 국내 공인인증기관들은 (KISA 하위의 인증기관들이므로) 자동으로 모든 웹브라우저가 믿어주겠지만, KISA는 이것을 거부하고 있습니다. 전자서명법 개정안에 “루트인증기관은 반드시 제3자 검증을 받으라”는 규정을 두었는데, 이것을 결사 반대하며 무정부 주의니 어쩌니 하며 저를 비난하고 있는 KISA와 국내공인인증기관들의 사고구조가 저는 좀 납득이 안갑니다.

서버인증서와 관련된 좀더 상세하고 알기쉬운 설명은 https://www.facebook.com/channyblog/posts/572859196112220

(2)“클라이언트(유저)”인증서가 바로 “한국형” “공인인증서”의 대부분입니다. 클라이언트 인증서는 말그대로 ‘클라이언트'(=접속고객)의 신원확인(=인증; authenticate)에 사용되는 기술 중 하나입니다. 단순비밀번호, 일회용비밀번호, 생체정보 등도 비대면 거래에서 접속 당사자(클라이언트)의 신원을 확인(인증)하는 기술(클라이언트 인증 기술)들의 예입니다.

클라이언트 인증서로 사용되는 국내 공인인증서에 관해서 기술적으로 논의할 가치가 있는 부분은 “저장위치”에 관한 것 뿐입니다. 인증서와 개인키 “파일 자체”야 아무리 국제 규격을 준수해서 만들었다 하더라도, 그 파일들이 저장되는 위치와 방법이 전세계 어떤 웹브라우저도 인식 못하는 “한국형”이기 때문에 온갖 문제가 생기는 것입니다.

“액티브X가 문제이지, 공인인증서가 문제가 있는 것은 아니다”라는 주장이 거듭되는데, 이 주장은 기술적으로 틀렸습니다. “NPKI”라는 이름의 폴더를 만들고 그 속에 공인인증서(클라이언트 인증서)를 저장하도록 KISA가 기술규격을 고집하고 있고, 이렇게 해두면 어떤 웹브라우저도 그런 클라이언트 인증서를 인식할 수 없기 때문에 “별도 프로그램”이 반드시 필요하게 됩니다. 액티브X는 바로 이런 별도 프로그램의 일종입니다. 즉, 액티브X가 아니라도 여전히 어떤 추가적인 별도 프로그램을 유저들에게 배포하고, 설치(“예”)하게 만들어야 비로소 한국형 클라이언트 인증서(공인인증서)를 사용할 수 있게 되는 것입니다.

요컨데, 액티브X가 문제인 것이 아니라, 액티브X건 다른 플러그인/프로그램 이건, 별도 프로그램을 추가로 배포/설치해야만 하도록 되어 있는 국내 공인인증서의 “저장 규격 자체가 문제”입니다.

15년 전에 현업에 종사하시던 국내 기술자들이 “당시의 여건 하에서” 별생각 없이 “NPKI 폴더에 개인인증서/개인키 저장하고 플러그인 뿌려서 해결하면 된다”라고 결정했던 과거의 사실을 비난하는 것이 아닙니다. 15년이 지난 지금까지 이 사태를 방치하고 있는 현재의 현업 종사자들의 나태와 안일함을 비난하는 것입니다. 하지만, 죽이되던 밥이되던 공인인증서 사용을 법령으로 무조건 ‘강제’해 주면, 해당 업계는 이렇게 안일하게 될 수 밖에 없습니다. 고민할 필요가 없는 것이지요.

클라이언트 인증서를 “NPKI폴더”에 저장하는 행위는 현재의 보안기술 수준에 비추어보면 납득이 안가는 행위입니다. 보안상 아무런 우월함도 없고, 플러그인을 안 쓸 수 없도록 되기 때문에 온갖 사업적 제약까지 따라오게 되며, 한국 바깥에서는 누구도 기술적으로 납득 못하는 선택이기 때문에 국내 인터넷 환경을 고립시키게 되는 최악의 선택이라고 저는 생각합니다.

클라이언트 인증서와 개인키의 저장에 대해서는 전세계의 보안 전문가들이 그 사이에 여러 고민을 거듭해 왔고, 지금은 key isolation 이라는 기술 요건이 매우 중요하게 요구됩니다. http://msdn.microsoft.com/en-us/library/windows/desktop/bb204778 참조. NPKI 폴더에 개인키와 인증서를 덜렁 저장해두고, “개인키는 암호로 보호해 두었으니 충분하다”라는 식의 발상은 그저 자신의 무식함을 드러낼 뿐입니다. 기술문헌을 조금이라도 찾아 읽으려는 노력을 하시면 좋겠습니다.

심지어, 어떤 분들은 NPKI 폴더에 개인인증서를 저장해두면 ‘일관된’ UI를 제공할 수 있으니 좋지 않느냐(브라우저/OS와 무관하게 호환성이 있지 않느냐)는 주장을 펴기도 하는데요. 그런 위치에 저장해 두었기 때문에 애초에 호환성이 전혀 없어서, 별도의 플러그인을 일일이 컴파일해서 브라우저/OS마다 뿌려야 하는데, 이것이 어떻게 ‘호환성’이 있다는 말인지요? 모든 브라우저에서 똑같은 “공인인증서창”이 뜨도록 일일이 별도 프로그램을 브라우저/OS별로 배포해야만 한다는 것이 무슨 ‘장점’인가요?

심지어 지금은, 은행/쇼핑몰마다 “별도로” 플러그인을 반드시 설치해야 비로소 공인인증서를 사용할 수 있는데, 그것이 어떻게 ‘호환성’이 있다는 것인지요? 호환성이라는 개념은 애초에 각각의 유저가 “별도로 해당 프로그램을 일일이 설치하지 않아도” 당장에 사용할 수 있다는 뜻 아닌가요?

NPKI 폴더에 저장하게 하면, 공격자가 복사해 가기 편리하게 될 뿐입니다. 다행히 아이폰(iOS)에서는 NPKI 폴더를 아예 생성할 수 없기 때문에 iOS가 이미 제공하는 개인인증서 저장 메카니즘(keychain)에 공인인증서를 저장하고 있습니다. 각 OS나 웹브라우저가 이미 이렇게 제공하는 개인인증서 저장 메카니즘(key store, keychain 등)을 활용하는 것이 올바른 방향이고, 이것이 유저들에게 불편을 가하는 것도 아닙니다. 그렇게 하면 플러그인 없이도 클라이언트 인증서를 사용할 수 있게 되는 장점도 있습니다.

3. 해법

간단합니다.

첫째, 공인인증서 사용을 ‘강제’하는 것을 그만두어야 합니다. 공인인증서를 ‘폐지’하자는 말이 아닙니다. 제 정신을 가진 분이라면, 공인인증서 폐지 주장을 하지는 않습니다. ‘기술’을 어떻게 ‘폐지’합니까? 공인인증서 사용을 ‘금지’하자고요? 그런 발상은 공인인증서 사용을 ‘강제’하자는 발상과 마찬가지로 정신나간 태도입니다.

둘째, KISA는 한시바삐, 제3자의 검증을 받고 버젓한 ‘국제적’ 인증기관으로 스스로를 업그레이드 해야 합니다. 한국 정부가 믿으면 되었지, 우리가 왜 제3자의 검증을 받아야 하느냐?는 유아적/자폐적 발상을 그만 두시고, 다른 여러 국제적 인증기관(예를 들어, 베리사인도 매년 제3자의 검증을 받습니다)처럼 제3자의 검증을 받으시기 바랍니다. 그러면, KISA하위의 모든 인증기관들도 자동적으로 ‘국제적’ 인증기관으로 인정받을 수 있습니다.

이렇게 제대로 검증 받고, 국제적으로 ‘인정’받게 되면, 스스로도 자신감이 생길 것입니다. 그때 쯤이면, 굳이 한국정부가 붙여주는 ‘공인’이라는 말에 집착하지 않고, 의지하지 않아도 될 것입니다. 그때 쯤이면, ‘공인’이라는 말은 떼내고, ‘글로벌’인증기관으로 당당하게 영업하시기 바랍니다. 지금은 제3자 검증도 안받고, 신뢰성에 대한 대외적 자신감도 없기 때문에 필사적으로 ‘공인’이라는 말에 집착하는 것 아닙니까? ‘공인’이라는 말을 떼내는 것이 그렇게 두렵다는 것 자체가 자신감이 없다는 것입니다. (제대로 검증을 안받았으니, 자신감이 없겠지만)

셋째, 개인인증서의 저장 위치에 대해서 고민해 보시기 바랍니다. 웹브라우저가 인식하는 위치에 개인인증서를 저장하면, 공인인증서 로그인은 이미 다양한 웹브라우저/OS에서 플러그인 없이 가능합니다. http://openweb.or.kr/?p=3935 (이미 2년 전에 쓴 글: “이용자인증 SSL 접속”) 참조. 거래내역 전자서명도 자바스크립트(자바 애플렛과 혼동하지 마시기 바랍니다)로 구현이 가능합니다. http://cdn9.atwikiimg.com/kurushima/pub/jsrsa/sample-rsasign.html 을 보시고 적절히 응용하면 되지 않겠습니까? 인증서 발급도 이제는 html5를 이용해서 가능하다는 점은 제가 벌써 2년전에 데모사이트까지 만들어 제시해 두고 있습니다. https://openweb.or.kr/html5/

인증서 로그인 기능은 주요 웹브라우저들이 오래 전부터 기본 탑재해 온 기능이고, 거래내역 전자서명도 자바스크립트로 구현할 수 있고, 심지어 인증서 발급까지도 이제는 웹브라우저만으로 가능합니다. 즉, 플러그인을 완전히 걷어낼 수 있습니다.

물론, 개인인증서 사용시 유저가 정한 암호를 반드시 요구하게 해야 하느냐 하는 문제는 여전히 고민이 남는 부분입니다. 하지만, 공인인증서 사용을 법령으로 강제하지 않고, 보안 기술 인력이 자체적으로 적절한 수준의 보안을 제공하는 여러 방안 중 ‘하나의 방안’으로 공인인증서를 적용하거나 적용하지 않거나 유연하게 ‘선택’할 수 있도록 해두면, 이 문제는 조만간 해소될 것입니다. 금융위/금감원은 이런 기술적 문제에 더 이상 개입하지 마시기 바랍니다. 사고거래에 대한 배상이 제대로, 신속히 되는지나 철저히 감독해 주시면 좋겠어요.

결론

길게 적었지만, 핵심은 두가지 입니다.

(1) 공인인증서 사용을 정부가 ‘강제’하지 말라.

(2) KISA는 제3자의 검증을 받으라.

나머지는 기술전문인력이 알아서 해법을 찾을 것입니다.

공인인증 제도를 ‘폐지’할거면 뭣 때문에 “루트인증기관에 대한 제3자 검증”을 거론하겠습니까? 그냥 접고 말지. 제3자 검증을 제대로 받고, ‘글로벌’ 인증기관으로서 국제 무대에서 당당하게 경쟁하는 방향으로 개선되면 좋겠다는 것이 제 희망입니다.

국내에서 ‘공인’이라면서 완장차고, 공권력과 ‘강제’ 규정에 기대어 국내 기업들과 유저들을 괴롭히는 일은 이제 좀 그만해 주시면 좋겠습니다.

***

관련 글: “공인인증서 FAQ” https://opennet.or.kr/1789