Web Crypto API의 현재와 미래

ZDNet Korea에서 액티브X 없이 공인 인증서 쓴다라는 기사로 W3C의 Web Cryptography Working Group(이하, Web Crypto W/G) 활동을 다룬 이후에 저에게 개인적 문의를 하시는 분들이 많아졌습니다. 이 글에서 그간 경과와 향후 해결해야할 문제가 무엇인지 알려드려 관심 있는 분들에게 도움이 되었으면 합니다.

우선 Web Crypto W/G이 만들어진 경과는 아래의 글을 먼저 보시면 도움이 되실 겁니다.

지난해 11월 부터 Web Crypto W/G 메일링리스트 토론이 제대로 시작되어 표준이 다룰 영역(Scope)에 대한 논의를 해 왔고 (메일링리스트를 보시면 아시겠지만) 수 개월간의 논의 끝에 “한국형” 공인 인증 서비스를 대체할 만한 영역을 포함시키게되었습니다.

어떤 표준을 새로 만드나?
W/G의 헌장(Charter)에 보면 앞으로 만들 표준 영역은 크게 두 가지의 기능 영역과 다루지 않을 영역을 나누어 두었습니다.

  • 1차 기능: 키 생성, 암호화, 복호화, 디지털서명 생성 및 유효성 확인, 메시지 인증 및 키 이동, 난수 발생, 싱글 세션 키 생성 및 저장 (대칭/비대팅 암호화 기반. 비밀키 접근 제어. 비동기적 API 구성)
  • 2차 기능: TLS 세선 기반 로그인/로그아웃 및 키 생성 및 데이터 보호 기능, 키 내보내기 및 가져오기, 키 정보 확인 및 키 발급, 선택, 폐기 등 인증 서비스와 이를 기반한 전자 서명 및 암호화
  • 다루지 않는 영역: 비표준 특수한 키 스키마 판단, 동일 기원 정책에 따른 접근 정책, 스마트카드 등 디바이스 기반 키 관리.

1차 기능은 W/G이 만들어질 때 기본적으로 제안되어 있었던 영역이고, 웹 기반 암호화 및 서명을 위한 싱글 세션 기반에 대한 DOMCrypt라는 구현체가 이미 있으며 GeckoWebkit에서 현재 구현 중입니다.

1차 기능을 포함 2차 기능 그리고 다루지 않는 영역에 있는 부분까지는 제가 만든 Web Crypto API에 어느 정도 담고 있으며, 그 중에 1차 기능은 이미 Mozilla에서 DOMCrypt로 제안되어 2차 기능을 수행할 수 있는 기초적 구현물이 되었습니다.

공인 인증 대체 가능한가?
우리가 필요한 한국형 뱅킹 사용케이스(Korean Bank Usecases)의 경우, 인증서 기반 로그인 기능 및 인증서 가져오기/내보내기 기능, 발급 및 폐기, 갱신 같은 서비스와 2차 기능 이외에 HSM 및 토큰 기반의 인증서 단말 기기 지원 등이 가능해야 합니다.

몇 개월 동안 국내에서 KISA 전자인증팀, 이니텍 및 소프트포럼 전문가들도 저에게 의견을 전달했고 메일링리스트에서 이 부분에 대한 토론도 수 개월 지속되었습니다.

하지만, 제시된 요건 중 단말기 중립적인 API를 만드는 것은 매우 어려운 일(실제로 너무 많은 업계의 이견이 생길 가능성이 높음)인데다, 최근 USIM 및 NFC 등 다양한 인증서 탑재 가능 매체가 나올 예정이라 매우 어려운 일이 될 가능성이 크다고 판단해서 범위 밖으로 빠지게 되었습니다.

어쨌든 한국형 공인 인증서비스를 웹 기반으로 대체하기 위해서는 W/G의 범위에 있는 2차 기능 정도로도 가능하다고 판단 하였습니다. 즉, 웹 브라우저 키 저장소를 활용하여 공인 인증서를 저장하고 이를 이용해서 로그인 및 전자 서명이 가능해 지는 것입니다.

앞으로 어떻게 진행되나?
지난 주까지 W/G Charter의 회원사 의견 취합이 완료되었고, 큰 이견이 없는 한 4월에 워킹 그룹이 시작될 것입니다. 위킹 그룹의 1차 목표는 DOMCrypt API를 표준화 하고 이를 두 개 이상의 웹 브라우저에서 구현 및 테스트 하는 것이 될 것입니다.

그 동안 다양한 사용 케이스를 수집해서 이를 기반으로 2차 기능에 대한 표준 작업 제안이 필요합니다. 일단 제가 만든 Web Crypto API 초안은 DOM Crypt, 로그인/로그아웃, 서명 기능, 외부 단말기 제공 기능이 포함되어 있는데 이 중에 일부 기능이 발췌될 것입니다.

두번째 스펙 이름은 제가 메일링리스트에 제안한 대로 Web Certificates (Service) API 정도가 되지 않을까 싶네요.

이에 앞서 스펙을 만들기에 앞서 얼마전 부터 구글의 신정식님을 비롯 몇명이서 한국형 뱅킹 서비스 케이스에 대해 정리를 시작하였고, David Dahl 및 Brian Smith 등 Mozilla에서 구현할 사람들과도 의견 교환을 하고 있는 중입니다.

특히, KISA 전자인증팀에서 PKI 업체들과 의견을 수렴해서 저에게 계속 전달해 주고 계시고 향후에 웹 기반 인증서 전자 서명 서비스를 제공하기 위한 연구 과제를 4월 부터 추진하게 됩니다. 그 과제는 Web Crypto W/G의 구현 요구 사항 및 국내에서 개발 필요한 부분에 대해 Mozilla 코드 공헌을 하는 과제가 됩니다.

정말 문제는 없나?
한국형 공인 인증서를 가지고 순수 웹 기반 서비스를 하려면 넘어야 하는 산이 몇 가지 있습니다.

첫번째로 국내 공인 인증서는 비밀키가 사용자 암호로 다시 한번 암호화 되어 있고, 웹 브라우저 저장소에서는 이 기능이 제공되지 않습니다. 인증서는 고객의 PC에 저장된 신뢰 수단이기 때문에 기본적으로 암호를 제공하지 않는게 맞습니다만 국내에서는 키 저장소가 노출(NPKI 디렉토리)되어 있어 위험합니다. 그리고 한 PC를 계정 분리 없이 여러명이 쓸 경우도 문제가 되기 때문에 해결해야할 문제입니다.

하지만, 보안에 대한 인식 및 문화 차이로 쉽지는 않을 것 같네요. 1차적으로는 웹 브라우저의 기본 암호(Master Password)를 쓰는 방법이거나 아니면 브라우저 내장 기능으로 인증서 PIN을 한번 더 물어보는 방식을 써야 할 듯 합니다.

두번째는 웹 기반만으로 제공하면 다양한 인증 및 서명 인터페이스가 나올 수 있고, 이 때 DOM 변조 같은 데이터 탈취로 인한 3자 공격이 가능합니다. 이를 위해 아마 브라우저 개발사들이 많은 공격 시나리오에 대한 보완 작업을 할 것입니다. 예를 들어, webcrypto가 동작하는 동안에는 다른 이벤트들이 DOM 변조나 접근을 못하도록 하는 방법 등.

세번째는 HSM 같은 보안 토큰 지원 이슈입니다. 과거에 공인 인증서를 담은 보안 토큰만 서비스하겠다는 정책 발표가 있었지만 흐지부지되었지요. 인증서 탈취가 워낙 많은 까닭인데 Web Crypto API를 통한 안전한 웹 브라우저 저장소만 제공한다면 굳이 보안 토큰을 강제할 이유는 없어집니다. 또한, 몇몇 웹 브라우저는 단말기와 키저장소와 연결 기능도 제공합니다.

네번째는 보안 정책의 문제입니다. 공인 인증서만으로 안전하지 않다는 것은 누구나 아는 사실입니다. 따라서, 공인 인증서를 로그인 및 개인 확인 용도로만 이용하고 금융 서비스 등은 OTP와 같은 오프라인 인증 수단과 혼합한 방법을 사용하여야 합니다. 쓰임새에 대한 구분을 확실히하고 정책을 정해야 할 것입니다.

어떻게 하면 정말 도움이 될까?
Web Crypto W/G은 가히 꽤 오랜 기간 계속 이야기한 끝에 결국 성사된 결과물입니다. 안타까웠던 점은 제가 수 년 동안 그런 이슈를 계속 W3C에서 이야기하고 Mozilla에 로비(?) 하는 동안 일부 보안 업계 전문가들의 지원을 제외하고, W3C 한국 사무국이나 회원사, 표준 전문가들의 어떠한 관심도 보지 못했다는 것입니다.

이제 어느 정도 결과물이 나오니 관심을 보여 주시는 건 좋으나 그간 국내 폐쇄적 인터넷 뱅킹 현실에 대해 말만 많았지, 표준 영역에서 실제로 지속적인 관심을 가지고 행동으로 보여주는 사람은 거의 없었다는 점에서 매우 유감이기도 합니다.

사실 저도 W3C 회원사 멤버가 아니며 개인 자격으로 HTML W/G Invited Expert로 참여하고 있고, 앞으로 Web Crypto W/G에서도 마찬가지입니다. 물론 표준이란게 개인의 노력으로만 되는 건 아닌게 확실합니다만 작은 노력이 지속적으로 모여야 큰 물줄기를 만들 수 있지요. (우리 나라 표준 연구자들은 그동안 자기가 지금하는 연구안에서만 움직이지 정작 우리 나라가 필요한 곳에는 힘을 집중하지 못하고 있지 않나 그런 생각도 해봅니다.)

이제는 관련 전문가들이 직접 참여할 필요가 있고, 다행히 W3C 밖에 있는 외부 인사들이 참여할 수 있는 Community 혹은 Business Group을 생성할 수 있게 하였습니다.

저도 지난 8월 부터 Web Crypto W/G그룹을 지원할 W3C WebCrypto API Community Group을 이미 만들어 두었고, 이제 워킹그룹이 시작되면 본격적인 활동에 들어갈 예정입니다. 혹시 관심이 있으시다면 실질적인 결과를 위해 본 커뮤니티 그룹에서 활동하시면 좋겠습니다.

참여 방법은 계정 신청을 하신후 (등록 기관에 “NONE”이나 “Add Organization”을 선택), 그룹 참여 신청만 하시면 됩니다. 직접 그룹을 만들 수도 있고 새로운 표준을 제안하실 수도 있습니다.

물론 정부도 나서고, 업계도 나서고 다 나서면 좋겠지만 여러분 한 사람의 힘이 세상을 바꿀 수도 있습니다.

주요 업데이트 사항