본문 바로가기
  • AI (Artificial Intelligence)
Security/Cryptology

OTP(One Time Password) 1회용 암호란? [이해편]

by 로샤스 2014. 4. 9.

People seem to want to treat computer security like it's rocket science or black magic.

사람들은 컴퓨터 보안을 마치 로켓 공학이나 흑마술과 같이 다룬다.

 

In fact, computer security is nothing but attention to detail and good design.

사실, 컴퓨터 보안은 세부적이고 더 나은 설계에 관련된 것이지 그 이상도 이하도

아니다.

 

It's certainly possible to turn a computer security problem into a rocket-science or brain surgery class problem, but if you've done that it's almost a certain indication that you've already started down the wrong path.

당신이 아직까지도 컴퓨터 보안을 로켓 과학이나 뇌 수술 수준의 문제로 보고 있다면,

이미 잘못된 길로 가고 있음을 나타내는 것이다.

 

 

- Marcus Ranum

 

 

 

국내 은행에서 인터넷 거래를 위해 기본적으로 발급해주는 보안카드는 카드처럼 생긴 암호표다.

1번 부터 30번 까지 4자리의 숫자가 연속적으로 적혀 있는 카드인데, 초창기에는 이 보안 카드의

특정 번호의 4자리 숫자만을 물어 보고 맞으면 인증을 통과시키는 단순한 과정에서 2006년 경에

제안된 좀 더 안전한 인증 방법이 2011년 현재 까지도 사용되고 있다.

 

인터넷 거래를 해봤거나 전화 거래를 해봤다면, 보안카드의 x번 앞 두자리와 y번 뒷 두자리를 묻는

인증 과정을 잘 알고 있을 것이다. 맞다. 이런 과정은 2006년도 이전의 인증 과정보다는 확실히

보안카드의 일부가 유출된 상태여도 약간은 안전해질 수 있다.

 

 

 

 

 

[공인 전자서명 인증체계]

 

 

보안카드 마다 별도로 기록되어 있는 일련번호가 존재하는데 이 번호를 이용하여 공인인증서를

발급 받을 수 있다.

공인인증서라는 개념은 대한민국에만 있다. 해외에는 없다.

공인인증서 때문에 해킹이 된다는 말들은 사실 터무니 없는 얘기다.

이 것 때문에 보안이 강화될 수 있었다. 물론 ActiveX를 사용하여 인증하는 방식 때문에

사용자들에게 ActiveX는 무조건 설치해야 된다는 편견을 가져다 주긴 하였지만..

 

해외에는 공인인증서라는 것이 없어도 인터넷 거래 등을 할 수 있다.

이런 점이 보안을 더 악화시키거나 하지는 않겠지만, 한국의 인터넷 거래에서 처럼 여러 가지 보안

프로그램(키보드 해킹 방지, 백신, 방화벽 등)들을 ActiveX로 설치해주어야 하는 정책 보다는

안전하지 않을 수도 있다.

 

해외의 금융 거래는 사용자에게 전적으로 사용자의 PC 보안을 자율적으로 맡기고 있다.

따라서, 사용자들은 금융 거래시 최소한의 보안 인식을 가지고 거래를 하게 될 수 밖에 없다.

사용자의 PC가 사용자의 관리 덕분에 비교적 안전한 편이라면, 금융 거래시 별다른 프로그램 설치나

기다림 없이도 해외에서는 신속하고 간편하게 금융 거래가 가능해진다.

 

국내 정책상 여러 가지 보안 소프트웨어를 설치하고, 이용하게 되는데 논란이 많다.

특히 보안 소프트웨어의 유지보수가 힘들다는 점이다.

더 나은 암호화 알고리즘의 도입이나 일부 보완 등의 기능 수정은 많은 시간과 비용이 발생한다.

비교적 최근에는 SSL(Secure Socket Layer)에 대한 미 정부의 수출 제한이 해제되면서 최신의

인터넷 브라우저들(파이어폭스, 오페라, 익스플로러 등)이 더 높은 수준의 암호화를 지원하였다.

하지만, 국내의 일부 거래 서비스들은 이러한 움직임에 즉각적으로 대응하였지만, 시간이 지체된다.

이용자들은 당시의 브라우저가 지원하는 수준보다 낮은 수준의 암호화를 사용할 수 밖에 없었고,

거래를 전적으로 보안 소프트웨어에 의존하도록 하는 부분에서 문제가 발생하였다.

2011년 현재에는 이런 부분이 해결되었지만, 유지보수가 힘들다는 점은 변함이 없다.

 

 

 

[공인인증서 사용현황]

 

 

 

공인인증서의 용도는 다양한데 보통 전자서명에 사용되고,

전자서명은 전자 인감증명서로 해석될 수 있으며

인터넷 상에서 금융 거래를 할 때, 거래 내역의 위조나 변조를 방지하는 등의 용도이다.

 

공인인증서에는 여러 가지 정보가 포함되어 있는데,

공인인증서 마다 다른 고유한 일련번호와 유효기간, 공개키, 발행기관의 서명, 인증서 정책,

소유자 식별, 발행기관 식별, 사용목적 등이다.

공인인증서는 RSA 공개키 기반이고, 현재는 키의 길이가 1024bit와 2048bit가 공존하고 있다.

키 길이가 길면 그 만큼 안전하다고 할 수 있지만, 아직은 전환 단계에 있기 때문에 혼란이 있다.

RSA 공개키 기반의 메커니즘의 좀 더 쉽게 접근 가능한 제 2, 제 3의 통로가 발견되기 전까지는

키 길이를 늘림으로써 간단하게 보안성을 향상시킬 수 있다.

 

 

[공인 인증기관]

 

 

2006년도에 도입이 된 OTP(One Time Password)는 보안 1등급 매체로 약간의 수수료를 내면

은행에서 발급 받을 수 있다. 작은 배터리가 들어있는 기계다. (손목 시계 같은)

이 배터리가 모두 소모되면 동작을 못하게 된다. 다행히 거래가 적은 편이라면 4~5년은 거뜬하다.

 

 

 


[OTP 기계의 종류는 다양하다]

 

일반적으로 사용되는 '공인인증서' 와 '보안카드' 의 결합은 "3등급 보안" 으로 규정되어 있다.

하지만, 최근 악성코드나 해킹에 의한 공인인증서의 유출이 발생하면서,

HSM(Hardware Security Module) 등의 보다 강화된 공인인증서 보관 방법이 제시되었다.

HSM은 하드웨어적인 보안 칩이 들어있는 USB 메모리에 공인인증서를 별도로 보관하여

공인인증서의 복제나 유출을 방지하는 방법이다.

 

 

 


[홍채인식, 지문인식, 손바닥 정맥패턴 인식 등 다양한 생체인식 기술이 있다]

해외에서는 보다 활발한 인증 방식이 도입되고 있는 중인데,

특히 미국은 2006년도에 위치기반 인증과 생체기반 인증을 이미 도입한 상태다.

 

 

 

 


[대한민국 정부 OTP 인증체계]

 

 

 

OTP는 일회용 비밀번호다. 한국의 은행들은 일반적으로 시간(Time)에 의해 OTP가 동기화되어 있는데

쉬운 예를 들면, 내가 A라는 은행에서 OTP를 발급 받아서 로그인 인증 과정에 사용하려고 한다.

OTP 기계에 적힌 6자리 숫자를 로그인 창에 입력한다.

A라는 은행에도 나와 동일한 시간에 동일한 OTP로 6자리 숫자를 생성한 다음,

로그인시 내가 입력한 OTP 값과 일치하는지 비교한다.

이렇게 비교한 OTP 값이 같으면 인증에 통과시킨다.

물론, 소프트웨어 적으로 모든 것이 이루어 지기 때문에 사용자 입장에서는 OTP 기계만 있으면 된다.

나머지는 은행 서버가 알아서 처리한다.

 

OTP 인증은 이중요소인증(Two-factor authentication)의 하나다.

보통, 인터넷 거래에서 OTP 사용자들은 카드 비밀번호도 입력하고, OTP의 값도 입력을 한다.

다시 말해 두 번 비밀번호를 입력하는 셈이다.

마찬가지로, 보안카드 또한 이중요소인증의 일부인데 정적인 비밀번호가 적혀 있기 때문에

유출되면 곤란해진다.

 

첫 번째 비밀번호는 내가 알고 있는 비밀번호고, (카드 비밀번호)

두 번째 비밀번호는 시간에 따라 달라지는 비밀번호다. (OTP 값)

비밀번호가 유출되어도 OTP 값은 알수 없다는 점이

단일요소인증(Single-Factor Authentication)이나, 보안카드에 비해 좀 더 높은 수준의 보안을

유지할 수 있는 비결인 것이다.

 

OTP는 시간에 따라 동적(Dynamic)인 비밀번호를 생성한다.

은행별로 이 시간값에 오차(Tolerance)가 존재하기는 한다.

OTP의 비밀번호가 갱신되는 시간은 약 15초~30초 정도이고, 이는 은행별로 약간씩 편차가 있다.

OTP는 사용자 입장에서보면 단지 보안성의 향상이라는 효과를 얻을 수 있지만,

은행 입장에서는 OTP 생성과 관련된 정보를 관리해야 하는 부담을 떠앉는다.

 

OTP는 비동기화(Asynchronous) 방식과 동기화(Synchronous) 방식으로 구분이 되는데,

현재는 은행에서 시간 동기화 방식의 OTP가 사용되고 있기 때문에 동기화 방식의 OTP를

사용하고 있는 것이 된다.

 

 

 

[OTP 비동기화(질의-응답) 방식]

 

 

비동기화 방식을 질의-응답 방식이라고도 하는데, 은행 서버에서 사용자에게 질문을 하면,

이 질문을 사용자가 OTP 기계에 입력하고 출력되는 결과를 다시 은행 서버에 전송해야 되는

불편함이 있어 잘 사용되지 않는다.

은행 입장에서도 많은 부하가 발생하여 동기화 방식에 비해 이득이 없다.

따라서, 아래의 동기화 방식을 주로 이용하게 된다.

 

 

 


[시간이나 이벤트 등을 통해 OTP를 동기화하는 방식]

 

 

동기화 방식의 경우 현재 사용되고 있는 시간 동기화 방식이 보편적인데, 단점이 있다면

OTP 값이 출력되고 난 이후 15~30초 사이의 시간안에 은행 서버로 입력값을 전송하지 못할 경우

OTP 값이 갱신되어 변경되면 다시 입력을 해주어야 하는 것이 문제다.

컴퓨터와 키보드에 익숙하지 않은 사람들은 불편함을 겪는다.

 

 

 

 

[횟수(Counter) 기반 OTP 예시]

 

 

이외에도 동기화 방식중 이벤트(Event) 동기화 방식이 존재하는데,

이 방식은 여러 가지의 형태가 존재할 수 있다. 그 중 카운터(Counter)를 사용한 이벤트 동기화

방식은 인증 횟수를 세는 카운터를 하나 둔다고 생각하면 된다.

예를 들어, 내가 생성한 비밀번호의 횟수와 은행 서버가 생성한 비밀번호의 횟수가 동일하면

비밀번호도 동일할 것이고, 인증에 통과할 수 있다.

물론 사용자가 실수나 호기심에 비밀번호를 한번 더 생성해버리면 인증 횟수가 다르기 때문에

서로 다른 비밀번호로 인증을 하게 된다. 당연히 인증에 실패한다.

 

OTP 기계중에는 사용자가 단추를 눌러야 다음 비밀번호를 생성하여 보여주는 기계가 있는 반면에

자동으로 15초 정도 지나면 다음 비밀번호를 생성하여 보여주는 기계가 있다.

이벤트 동기화 방식 중 카운터 이벤트 동기화 방식에서는 대개 사용자가 단추를 눌러야만 다음

비밀번호를 생성할 수 있도록 하고 있다.

자동으로 계속 다음 비밀번호를 생성하면 카운터 값이 일치하지 않아 인증에 실패하기 때문이다.

 

카운터 이벤트 동기화 방식을 다시 쉬운 예로 들면,

첫 번째 로그인시, 비밀번호 값과

두 번째 로그인시, 비밀번호 값은 당연히 서로 틀리다.

내가 첫 번째 로그인을 위해 OTP 기계에서 비밀번호 생성 단추를 한 번 눌렀고,

출력된 OTP 값을 전송하여 로그인에 성공하였다.

하지만, 호기심에 OTP 기계에서 비밀번호 생성 단추를 여러번 눌렀고,

출력된 OTP 값을 2번째 로그인에 전송하였더니 인증에 실패하였다.

로그인 서버에서는 2번째 로그인으로 파악하고 2번째 OTP 값을 요구했던 것이다.

 

다행히 이런 사용자의 실수를 어느 정도 오차로 보고 허용하는 경우도 있다.

 

최근에는 OTP를 구매할 때 발생하는 비용 때문에 기존에 사용자가 가지고 있을 법한

가령 휴대폰이나 스마트폰, IC카드 등을 활용하여 OTP를 생성하는 방법도 존재한다.

또, IC카드와 IC카드 리더기를 활용한 OTP 생성 및 인증 방법도 존재하는데,

2008년도 당시 정부에서 적극적으로 권장하려던 부분이다.

아쉽게도 이 방법은 아직 잘 사용되고 있지 않으며, 해킹등의 문제가 발생할 우려가 있어 보인다.

또한 IC 카드 리더기를 구입해야 되기 때문에 비용적인 측면에서도 문제가 발생된다.

조금더 나아가 OTP와 IC 카드를 결합한 형태의 카드도 출시되고 있으며, 소리로 인식하는

OTP 도 존재한다.

 

 

 


[IC카드와 OTP가 결합된 형태]


 

요즘은 OTP 기계의 단가를 최대한 낮추기 위해 은행끼리 동일한 제품을 구입하기도 한다.

일종의 공동구매다. 이렇게 되면, 사용자가 부담하는 수수료도 적게 들고,

은행끼리 동일한 OTP로 인증하는데 사용될 수도 있다.

OTP 마다 개별적인 고유 식별 번호가 적혀 있는데 이 값을 은행별로 공유하면 은행별로 별도의

OTP가 필요하지 않고, 1개의 OTP만으로도 거래가 충분해진다.

이러한 방법은 보안성이 떨어지는 경우를 생각해 볼 수 있기 때문에 대다수의 사용자들은

은행별로 OTP를 구매한다.

 

당시 해외에서는 OTP와 동시에 흥미로운 주제였던

양방향 인증(Mutual Authentication 또는 Two-way Authentication)이 있었는데,

최근까지 유명한 검색 업체에서 사용되었던 인증 방식으로

보통 사용자가 온갖 비밀번호와 공인인증서 등을 은행 서버로 전송하는데

은행 서버 자체가 정당한 은행 서버인지를 증명할 수 있는 방법은 없었다.

그래서 나온 개념이 사용자 마다 별도로 등록하는 비밀 사진이 있는데

이 비밀 사진을 은행 서버가 해당 사용자가 로그인 할 때 보여주는 방법이다.

이렇게 되면, 사용자는 은행 서버가 정당한지 아닌지를 쉽게 파악할 수 있게 된다.

 

유감스럽게도 이러한 양방향 인증 방식은 SSL 등 여러 가지 더 나은 대안으로 대체되었고,

비밀 사진 방식의 양방향 인증은 현재는 거의 찾아볼 수 없는 상태다.

 

 

 

 

 

 

 

 

출처 : http://blog.naver.com/tpinlab/10121774937

 

 

 

 

 

 

 

 

댓글