공개키 인증은 승인 서비스나 회계감사 서비스와 같은 여러 가지 보안 서비스의 핵심이다. 인증은 정보 시스템을 통해 요청된 신원을 자동으로 확인하는 방법으로 ‘로젠버그’의 ‘젤로(Jell-O:미국 제너럴포드사 디저트 식품의 일종)’ 상자만큼 복잡 미묘하다.
줄리어스와 에텔 로젠버그는 미국의 원자탄 개발계획을 소련으로 넘긴 스파이로 지난 53년 사형당했는데 이들이 당시 일종의 ‘패스워드’로 젤로 상자를 사용했던 것이다. 이들은 이 종이 상자를 두 쪽으로 찢어서 서로 모르는 두 사람에게 따로 따로 전달하고 추후 톱니 모양으로 찢어진 부분과 색깔을 서로 맞추면 암호가 풀리도록 했던 것이다.
현재 가장 널리 사용되는 보안 방식은 패스워드인데 이는 매우 취약하다. 정보 시스템 침입자는 사용자의 이름과 패스워드만 알면 정보에 접근할 수 있는데 사용자 이름은 비밀이 아니므로 확인하는 데 별 문제가 없고 패스워드는 추측, 사회공학, 메모리나 네트워크의 탐색 등 여러 가지 방법으로 알아낼 수 있다. 이런 취약점을 보안하는 방법은 여러 가지가 있지만 각기 다른 인증 방식을 사용하지 않으면 위험을 방지하기 어렵다.
그 중 확실한 인증 방법은 스마트 카드나 유니버설시리얼버스(USB)키 같은 하드웨어로서 이들은 공개키기반구조(PKI:Public Key Infrastructure) 안에서 이루어지는 공개키 암호를 사용하고 있다. 하지만 공개키 인증은 스마트 카드나 PKI 없어도 가능하다. 공개키 암호화로 알려진 비대칭 암호화 기술은 알고리듬에 공개키와 개인키로 이루어진 한 쌍의 키를 적용하고 여기에 각기 다른 단계의 암호화와 복호화 처리를 하는 과정이다. 이들 한 쌍의 키는 복잡한 수학적 관계를 갖고 있다. 이는 침입자가 공개키를 요행히 해독한다 하더라도 개인키는 해독하지 못하도록 하기 위한 것인데 그렇다고 개인키의 해독이 전혀 불가능한 것은 아니다. 이를 막기 위한 수단으로 키의 길이를 늘리는 방법이 사용되고 있다.
공개키 암호는 전통적인 대칭 암호나 비밀키 암호에 비해 키를 관리하기가 유리하다. 우선 한 쌍의 키 중 하나는 그 소유주 이외에는 알릴 필요가 없으므로 비밀을 유지하기가 쉽다. 또 다른 하나는 알고리듬을 사용하는 모든 사람이나 기관이 공유하기 때문에 다른 사용자에게 비밀을 지킬 필요가 없으므로 관리하기가 쉽다.
공개키 암호기술은 암호화와 디지털 서명에 사용할 수 있으며 이들 두 가지 처리 과정은 공개키 인증 방법으로 사용되고 있다. 로젠버그의 찢어진 젤로 상자와 마찬가지로 사용자의 개인 및 공개키는 정보 시스템에서 사용자를 인증하는 데 사용된다. 이런 방법의 기본 원리는 사용자만이 개인 키를 가지고 특정 암호 절차를 밟은 다음 인증 서버가 사용자에게 해당되는 공용키를 확인하는 절차를 거쳐 신원을 확인하는 것이다.
유닉스시큐어셸(SSH:Unix Secure Shell) 프로토콜은 공개키 암호에 기반한 인증을 제공한다. SSH는 유닉스 운용체계(OS)에서의 인증에 공개키 암호를 사용한다. 또 SSH의 클라이언트인 ssh는 로그인해 원거리에 있는 서버에 대한 명령을 실행하는 프로그램이다. 사용자는 프로토콜에 따라 다음 몇 가지 방법 중 하나를 이용해 서버에 대한 인증을 받아야 한다.
SSH1은 RSA(Rivest-Shamir-Adelman) 기반 인증을 지원한다. 서버 파일에는 로그인이 허용된 사용자의 공개키 목록이 기록돼 있는데 사용자가 로그인하면 ssh 프로그램이 서버에 그 사용자를 인증하는 데 적합한 키를 제시해 준다. 그러면 서버는 이 키가 허용된 것인지 확인한 다음 사용자의 공개키에 의해 암호화된 신원 확인 표시를 사용자에게 보낸다. 그런 다음 사용자의 클라이언트는 개인키를 사용해 신원확인 표시를 복호화한다.
SSH2는 RSA나 표준 디지털 서명 알고리듬(DSA:Digital Signature Algorithm)을 사용한다. 여기에서는 사용자가 개인키에 서명해 서버로 보내면 서버는 거기에 맞는 공개키가 파일에 들어 있는지 조회한 다음 두 개의 키가 확인되고 서명이 일치하면 접속을 허용한다.
SSH는 사용자 공개키의 관리가 허술한데 PKI를 사용하면 이를 보완할 수 있다. PKI의 주요 목적은 사용자들의 개인 및 공개키가 적절히 관리되고 있는지 확실히 하는 데 있다. 사용자의 신원과 공개키와의 연관성은 일종의 디지털 증명(certificate)인 공개키 증명으로 입증돼야 하며 또 그 공개키 증명은 공인된 인증기관의 확인을 받아야 한다.
증명 기반의 인증은 신원 확인-응답 방식으로 이루어진다. 사용자는 개인키를 사용해 인증 서버에서 온 신원 확인에 디지털로 서명하면 응답이 생성되는데 사용자는 이를 공개키 증명과 함께 서버로 다시 보낸다. 그러면 인증서버는 공개키 증명을 유효화하고 디지털 서명을 확인함으로써 사용자를 인증하게 된다.
현재 OS, 인증 미들웨어, 엑스트라넷 접속관리(EAM:Extranet Access Management) 프로그램과 일부 상용화된 SSH 프로토콜 등 증명 기반 인증을 지원하는 제품이 많이 나와 있다. 이 중 가장 널리 사용되는 프로그램은 마이크로소프트의 윈도2000 서버 OS로서 이것은 자사의 커버로스(kerberos) 인증 환경에서 PKINIT(Public Key Initial Authentication)를 사용해 증명 기반 인증을 통합한다.
윈도2000 서버 OS의 인증 과정은 △커버로스 티켓 그랜팅 티켓(TGT:Ticket Granting Ticket) 요청사항에 사용자의 공개키 증명 사본이 들어오면 사용자의 개인키가 여기에 서명한다. △윈도2000 키 분배 센터(KDC:Key Distribution Center)는 공개키 증명이 공인된 인증기관에서 발급한 것임을 확인하면 그 증명을 유효화한 다음 디지털 서명을 검증하고 또 요청사항에 시간 도장을 찍는다. △KDC는 사용자와 그가 속해 있는 단체를 위한 보안 확인요소로 구성된 윈도2000 전용 인증 데이터를 포함하는 TGT를 작성한다. △KDC는 사용자의 공개키 증명에 있는 공개키에 대한 반응을 암호화하고 자체의 개인키로 서명한다. △사용자의 워크스테이션은 그 결과를 접수해 이를 복호화한 다음 반응을 확인하고 TGT를 사용해 커버로스 프로토콜에 맞춰 다른 서비스에 접속할 것을 요청한다.
여기에서 PKINIT는 사용자를 인증하는 데 있어 KDC의 역할을 변경함으로써 KDC는 전적으로 사용자 공개키 증명에 의존하게 된다. 고용키 증명을 발급하는 인증기관은 ‘등록’할 때 사용자의 신원을 확인한 데 대한 책임을 진다. 하지만 윈도2000을 통해 공개키 인증을 받는 업체들은 윈도2000 서티피케이션 어서리티(Certification Authority) 컴포넌트를 통해 증명을 자체적으로 발급할 수 있기 때문에 번거로운 과정을 피할 수 있다.
공개키 인증 관련 표준 기술에는 국제 표준, 미국 표준, 인터넷엔지니어링태스크포스(IETF) 표준, ISO 표준 및 업계 표준이 있다. 또 주요 관련 업체는 시큐어 셸(secure shell) 부문에 SSH 커뮤니케이션스시큐리티(Communications Security http://www.ssh.com), 반다이크소프트웨어(VanDyke Software Inc. http://www.vandyke.com), 네트워크심플리시티(Network Simplicity http://www.networksimplicity.com) 등이 있고 스마트 카드 부문에는 젬플러스(Gemplus S.A. http://www.gemplus.com), 기섹앤드데브리엔트(Giesecke & Devrient[G&D] http://www.gdm.de), 리트로닉(Litronic Inc. http://www.litronic.com), 슐렘버저세마(SchlumbergerSema http://www1.slb.com/smart cards/products/index.html) 등이 있으며 USB 토큰 업체에는 알라딘(Aladdin http://www.eAladdin.com), 유트론(Eutron http://www.eutron.com), 레인보우테크놀로지스(Rainbow Technologies http://www.rainbow.com), 스파이러스(Spyrus) 등이 있다.
<가트너 자료><정리=이규태기자 ktlee@etnews.co.kr>