일회용 비밀번호

일회용 비밀번호 OTP를 전달받을 때 대표적으로 사용되는 OTP 토큰
'''일회용 비밀번호'''(; '''OTP''', one-time PIN, ), '''일회용 인증번호'''() 또는 '''동적 암호'''()는 일회성으로 사용하는 비밀번호이다.
OTP는 주로 높은 수준의 보안을 유지하며 사용자를 인증해야 할 필요가 있을 때 사용되며, 그 일반적인 경우는 아래와 같다.
* 온라인 뱅킹
* 온라인 게임
* 포털 사이트
* 기업 네트워크
OTP 이외의 사용자 인증 수단으로는 사용자 계정 및 암호를 이용한 방식, 추가적인 질의응답을 이용한 방식 등 여러 가지가 있는데, 대부분 한 번 인증값이 유출되고 나면 인증값을 바꾸기 전에는 해킹을 당하기 쉽다는 문제점을 가지고 있다. 이를 보완하기 위한 인증 수단으로 보안 카드가 있지만, 이 역시 정해진 수십여 개의 번호를 사용할 뿐이므로 여전히 유출에 의한 위험성을 가지고 있다.
이에 따라, 한 번 생성되면 그 인증값이 임시적으로 한 번에 한해서만 유효한 OTP 방식을 도입하게 되었다.
=== S/KEY 방식 ===
벨 통신 연구소에서 개발한 OTP 생성 방식으로, 유닉스 계열 운영 체제에서 인증에 사용되고 있다. 그 생성 알고리즘은 아래와 같다.
# 클라이언트에서 정한 임의의 비밀키를 서버로 전송한다.
# 클라이언트로부터 받은 비밀키를 첫 값으로 사용하여, 해시 체인 방식으로, 이전 결과 값에 대한 해시 값을 구하는 작업을 n번 반복한다.
# 그렇게 생성된 n개의 OTP를 서버에 저장한다.
또한 이를 통해, 클라이언트에서 i번째로 서버에 인증을 요구할 때의 인증 방식은 아래와 같다.
# 클라이언트에서 정한 OTP에 해시 함수를 n-i번 중첩 적용하여 서버로 전송한다.
# 서버에서는 클라이언트로부터 받은 값에 해시 함수를 한 번 적용하여, 그 결과가 서버에 저장된 n-i+1번째 OTP와 일치하는지 검사한다.
# 일치하면 인증에 성공한 것으로, 카운트를 1 증가시킨다.
해시 체인에 기반하고 있는 이 알고리즘은, 해시 함수의 역연산을 하기 어렵다는 점에 착안하여 만들어졌다.
해킹에 의해 클라이언트에서 서버로 전송되는 값이 노출된다 해도, 그 값은 일회용이므로 다시 사용될 수 없다. 또한 그 다음 인증을 위해서는 그 전에 전송된 값보다 해시 함수가 한 번 적게 적용된 값을 사용해야 하는데, 그 값을 유추하는 것 또한 매우 어렵다.
다만 생성했던 OTP를 모두 소진하면 다시 새로 설정을 해야 하며, 서버에 저장돼 있는 OTP 목록이 유출될 경우 보안에 대단히 취약해진다는 단점이 있다.
=== 시간 동기화 방식 ===
OTP를 생성하기 위해 사용하는 입력 값으로 시각을 사용하는 방식이다. 클라이언트는 현재 시각을 입력값으로 OTP를 생성해 서버로 전송하고, 서버 역시 같은 방식으로 OTP를 생성하여 클라이언트가 전송한 값의 유효성을 검사한다.
임의의 입력값이 필요하지 않다는 점에서 사용하기 간편하고, 클라이언트가 서버와 통신해야 하는 횟수가 비교적 적다. 또 서버에서 클라이언트에 입력값을 보내는 방식이 아니므로, 여타 OTP 생성 방식에 비해 피싱에 안전하다. 한편 클라이언트에서 시각 정보를 이용해 OTP를 생성하므로, 스마트폰 등의 모바일 기기도 클라이언트로 사용되기 적합하다는 점 역시 비용 절감 측면에서 장점이다.
하지만 클라이언트와 서버의 시간 동기화가 정확하지 않으면 인증에 실패하게 된다는 단점이 있으며, 이를 보완하기 위해 일반적으로 1~2 분 정도를 OTP 생성 간격으로 둔다.
미국 RSA사에서 만든 '시큐어 ID'가 이 방식을 사용한다.
=== 챌린지•응답 방식 ===
서버에서 난수 생성 등을 통해 임의의 수를 생성하고 클라이언트에 그 값을 전송하면, 클라이언트가 그 값으로 OTP를 생성해 응답한 값으로 인증하는 방식이다.
입력값이 매번 임의의 값이 된다는 측면에서는 안전성을 갖추고 있으나, 네트워크 모니터링에 의해 전송되는 값들이 노출될 경우 매우 취약해진다는 단점이 있다. 또 서버와 클라이언트 사이의 통신 횟수도 비교적 많이 요구된다.
=== 이벤트 동기화 방식 ===
서버와 클라이언트가 카운트 값을 동일하게 증가시켜 가며, 해당 카운트 값을 입력값으로 OTP를 생성해 인증하는 방식이다.
다만 클라이언트에서 OTP를 생성하기만 하고 인증에 사용하지 않으면, 서버와 클라이언트의 카운트 값이 불일치하게 된다는 문제점이 있다. 이러한 문제를 보완하기 위해 어느 정도 오차 범위 내에서는 인증을 허용하는 방법이나, 카운트가 어긋났다고 판단될 경우 연속된 OTP를 받아 유효성을 판별하는 방법 등이 사용된다.
OTP는 사용자 인증에 사용되므로, 기본적으로 서버와 클라이언트 사이에 통신 및 전달 수단이 필요하다. 이러한 수단으로는, 아래와 같은 것들이 있다.
=== OTP 토큰 ===
OTP 토큰
OTP 토큰이라 불리는 별도의 하드웨어를 클라이언트로 사용하는 방식이다. 기기 자체에서 해킹이 이루어지기는 힘들지만, 토큰을 구입해야 하므로 추가 비용이 필요하며 휴대하기에 불편하다는 단점이 있다.
==== 카드형 OTP 토큰 ====
재팬넷은행의 카드형 OTP 토큰
기존의 토큰의 불편한 휴대성을 개선하기 위해, 얇은 두께로 휴대하기에 편리한 카드형 토큰도 출시된 바 있다. 일반 카드에 비해 별로 두껍지 않아 지갑에도 휴대가 가능하지만, 처리 속도가 느려 OTP 생성에 시간이 더 걸리고 수명이 짧으며 가격도 비싸다는 단점이 있다.
=== 스마트폰 앱 ===
별도의 하드웨어 장비를 필요로 하지 않아서 추가 비용 없이도 OTP 서비스를 이용할 수 있는 방식이다. 해당 스마트폰에 맞게 제공되는 앱을 설치함으로써 이용할 수 있다. 물론 서버 측에서 이 방식을 지원하지 않으면 이용할 수 없으며, 스마트폰 OS에 따라 이용이 제한될 수 있다는 단점이 있다. 또 스마트폰 환경인 만큼 해킹의 위험성이 비교적 높다.
=== SMS ===
SMS로 OTP를 전달하는 방식이다. 스마트폰이 아닌 어떤 종류의 휴대전화만 있어도 이용 가능하다는 장점이 있지만, SMS 자체의 해킹 위험성에 의해 현재는 거의 사용되지 않고 있다.
=== 대표적 해킹 사례 ===
==== 미국 RSA사 OTP 해킹 사건 ====
2011년 3월, 미국 RSA사의 OTP 제품인 ‘시큐어 ID’의 기술 정보가 해킹돼, 비밀번호 생성에 쓰이는 계산식 등의 주요 정보가 유출되었다.
===== 여파 =====
RSA의 고객사인 군수업체 록히드 마틴(Lockheed Martin)과 L-3 커뮤니케이션즈(L-3 Communications)의 전산망이 해킹 공격을 받았다. 록히드 마틴의 전산망에는 군사 기술과 개발 중인 무기에 대한 정보가, L-3 커뮤니케이션즈의 전산망에는 미 국방부에 공급하는 각종 통신 및 정찰 기술 등에 관한 정보가 담겨 있어 국제 안보가 우려되었다. 당시 해킹 공격으로 인한 직접적인 피해는 없었으나, 두 업체는 결국 시큐어 ID 사용을 중단하였다.
===== 조치 =====
2011년 6월, RSA는 시큐어 ID 4천만대를 전면 리콜 조치하였다.
==== 디아블로 III 유저 계정 해킹 사건 ====
디아블로 III에서 OTP를 사용해 사용자 인증을 하던 유저들이 해킹을 당한 사례이다.
단순히 키로깅을 통해서 입수한 OTP를 수 분 내에 그대로 사용해도 로그인에 성공한다는 실험 결과가 있다.
===== 허술한 OTP 시스템 운용 =====
이 사건에서 주로 문제의 원인이 되었던 점은, OTP 시스템을 운용함에 있어서 아래와 같은 허술함이 많았다는 사실이다.
* 한 번 로그인에 성공한 OTP가 즉각 폐기되지 않고, 동일한 OTP를 유효시간 내에 입력하면 아무 문제 없이 로그인에 성공하게 됨.
* 앱에 표시되는 유효시간이 지나 OTP가 교체된 이후 1~3분 동안에도 이전 OTP로 인증이 가능함.
* OTP를 키보드로 입력해야 함.
* OTP 입력 내용이 화면에 노출됨.
이는 블레이드 앤 소울과 같은 게임에서의 OTP 시스템 운용 방식과 비교해 봤을 때 명확히 드러났다.
수많은 OTP 및 관련 암호학에 관한 규격들이 만들어지고 있으며, 이는 여러 RFC 문서들을 통해 확인할 수 있다.
분류:보안
분류:컴퓨터 접근 제어