본문 바로가기

Applied Cryptography

전자서명 개념 정리

전자 서명

지금부터 설명한 것은 전자서명이지만 아날로그 버전의 서명은 일반 서명이 아니라 도장과 의미가 더 유사하다. 전자서명과 도장의 공통적인 성질은 "오직 나만 소유한 것"으로 만들 수 있다는 것이다. 하지만 도장은 찍힌 모양을 보고 충분히 위조가 가능하다면, 전자서명은 위조가 불가능하다.

암호학에서 전자서명 프로토콜은 PublicKey Cryptosystem으로 분류된다. 즉, 서명자만이 알고 있는 서명키(비밀키)와 누구나 알고 있는 서명검증키(공개키)를 활용한다는 의미이다. 서명자는 우선 서명키/검증키 쌍을 생성한 뒤에 검증키를 만천하에 공개한다. 그리고 특정 메시지에 서명키로 전자서명 값을 생성하고, 전자서명 값은 메시지와 검증키로 검증 가능하다.

검증이란?

검증자는 전자서명 검증을 통해 "전자서명이 첨부된 메시지는 서명자의 뜻이다."라는 것을 확신할 수 있다. 즉, 해당 메시지는 그 사람이 보낸 것임을 확신한다는 의미이다. 이렇게 확신할 수 있는 이유는 전자서명 값은 서명키를 이용해서만 계산해낼 수 있다는 가정이 깔려 있기 때문이다.

검증 폭탄돌리기

암호학적 프로토콜은 결국 언제 어디서 터질지 모르는 폭탄을 관리 가능한 폭탄으로 변경하는 이론이다. (개인적인 표현임) 원격에서 전송된 메시지를 누가 보냈는지 확신할 수 없는 상황을 전자서명이 해결하지만, 원격에서 전송된 전자서명의 검증키를 전송받을 때는 해당 검증키를 누가 보냈는지(정확히는 누구의 키인지)를 확신할 수 없다. 출처 인증 문제를 전자서명이해결한듯 보이지만 같은 문제가 다른 곳에서 여전히 남아 있음을 알 수 있다.

하지만 만약 알려진 상대방의 검증키를 안전하게, 확신하게 전송받을 수 있는 방법이 있다면 전자서명은 메시지의 출처 확인을 위한 좋은 수단이 된다. 심지어 전자서명 값을 서명키 보유자만 생성할 수 있다는 성질 덕에 "부인 방지" 효과도 기대할 수 있다. 부인 방지란, 메시지를 보낸 후 자신이 보낸 것이 아니라고 부인할 수 없다는 의미이다.

그렇다면 원격에서 검증자가 상대방의 검증키를 안전하게 획득할 수 있는 방법이 과연 있긴 할까? 결론은 "없다."

전자서명 검증키 인증

원격에서 상대방의 검증키를 안전하게 획득할 수 있는 방법이 있다면, 그 방법으로 메시지를 전송하면 된다. 하지만 그러한 방법이 없으니 전자서명에 의존하는 상황이니... 다른 방법을 찾을 수 밖에 없다.

예를 들어, 네이버 서버의 서명 검증키는 네이버 홈페이지 메인에 적어두면 좋을것 같다. 그러면 사용자들은 네이버 서버가 전송한 메시지와 전자서명을 홈페이지에서 획득한 검증키로 검증할 수 있다. 하지만 이 방법도 결국 폭탄 돌리기에 지나지 않는다. 왜냐하면 지금 내가 보는 네이버 홈페이지가 네이버가 관리하는 진짜 사이트라는 것을 확신할 수 없기 때문이다. 지금 내가 보는 홈페이지도 사실은 네이버가 보낸 메시지에 지나지 않는다.

이런 문제는 전자상거래에 장애가 된다. 판매자 입장에서는 주문이 들어와도 진짜 주문인지 아닌지 확인할 방법이 없으며, 소비자 입장에서는 내가 누구에게 거래 대금을 치루고 있는지 알 수 없으니 말이다. 그래서 전자서명을 사용하는 모든 사용자들의 검증키를 관리해주는 국가 서비스의 끝판왕격인 공인인증서가 등장한다. 학술적으로 PublicKey Infrastructure(이하 PKI) 라고 부른다. 개인적으로 공인인증서보다 더 나은 솔루션은 없다고 생각한다.

공인인증서

공인인증서는 어떤 사람의 서명 검증키를 정부에서 확인했다는 확인증으로 볼 수 있다. 물론 공인인증서 안에 그 사람의 서명 검증키도 들어 있다. 공인인증 서비스는 Offline으로 "그 사람"을 인증하고 서명 검증키에 대한 공인인증서를 발행한다. 특히 누군가가 어떤 공인인증서의 진휘 확인 요청을 처리하기 위해 모든 공인인증서를 서버에 저장한다. 이제 공인인증서를 발급받은 사람은 원격에서 물건을 사고 팔 수 있다. 판매자와 구매자는 공인인증 서비스를 통해 서로의 메시지의 출처인증을 수행할 수 있기 때문이다.

인증서 서비스의 핵심은 기술보다는 "신뢰"에 있다. 상대방의 공개키가 오면, 공인인증 서버에 "이 검증키가 OO의 공개키 맞나요?" 라고 물어보면, 서버는 DB에서 해당 검증키를 찾아 확인만 해주면 되는 서비스이므로 기술적으로 간단하다. 다만, 누가 이 서비스를 하고 있을때 우리가 믿고 쓸 수 있느냐의 문제가 더 크다. 따라서 국가 차원의 서비스로 런칭된 공인인증서만큼 신뢰성이 보장된 서비스가 나올 수 없을 것이다.

공인인증서와 대면 인증

공인인증서는 최상위 수준의 인증을 제공한다. 다른 인증서비스들은 서비스 성격에 따라 다른 인증을 받은 개체를 인증한다는 식의 폭탄돌리기를 할 수 있지만, 공인인증서는 그 폭탄을 돌릴 대상이 없다. 다른 인증서비스들이 돌리고 돌린 폭탄을 공인인증서가 처리해야하기 때문이다. 그래서 공인인증서 최초 발급시에는 반드시 공인인증서비스 관련 기관에 신분증을 들고 직접 방문해야 한다. 참고로 은행이나 증권사에서 공인인증서 등록을 대행한다. 이렇게 금융기관이라는 신뢰기관에 "대면 인증"급 인증을 거쳤으므로 공인인증서를 활용하면 회원 확인을 넘어선 "본인 인증"이 가능하다. 서버는 자신에게 등록한 회원임을 확신하는 수준을 넘어서 법적인 본인을 확인할 수 있다는 의미이다. 참고로 본인 인증 수단은 "휴대폰 인증"과 "IPIN"과 함께 딱 3가지 뿐이다. 세가지 모두 "대면 인증"을 기반으로 한다.

공인인증서 폐지?

정확히 말하면 공인인증서를 없애는 것이 아니라, 전자상거래에서 본인 확인은 반드시 공인인증서를 사용하라는 법 조항이 폐지 된것이다. 이제는 공인인증서, 사설 인증서나 기타 인증 체계를 써도 된다는 의미이다. 단, 사고가 나면 인증서비스 제공자가 책임을 져야할 것이다. (책임 관계는 확실한 정보는 아님)

 

혹시 암호학을 공부하고 있는 분들은 공인증서 없이 서명키를 상대방에게 전달하는 다양한 시나리오를 구상해보길 바랍니다. 결론은 본 글에 나와있지만, 각자 구상한 시나리오가 왜 문제가 되는지 스스로 분석할 수 있다면 PKI 이해에 도움이 될것 같습니다.