{{위키데이터 속성 추적}}
{{다른 뜻 넘어옴|일회용 암호|암호화 기술|원 타임 패드}}
[[파일:RSA-SecurID-Tokens.jpg|섬네일|일회용 비밀번호 OTP를 전달받을 때 대표적으로 사용되는 OTP 토큰]]
'''일회용 비밀번호'''({{llang|en|one-time password}}; '''OTP''', one-time PIN, {{문화어|일회용 통행암호}}), '''일회용 인증번호'''({{llang|en|one-time authorizaion code, '''OTAC'''}}) 또는 '''동적 암호'''({{lang|en|'''dynamic password'''}})는 일회성으로 사용하는 [[비밀번호]]이다.

== 용도 ==
OTP는 주로 높은 수준의 보안을 유지하며 사용자를 인증해야 할 필요가 있을 때 사용되며, 그 일반적인 경우는 아래와 같다.<ref>{{뉴스 인용|제목=
[앎?]"나 혼자서도 쉽게 발급받자" OTP 'A to Z'|url=http://issueedico.co.kr/news/article.html?no=503|출판사=이슈에디코|저자=김수경 기자|날짜=2018-10-08|확인날짜=2018-10-08}}</ref><ref>{{뉴스 인용 |제목=당신의 비밀번호를 지켜 준다, OTP |url=http://it.donga.com/plan/10055/ |출판사=IT동아 |저자=허미혜 |날짜=2012년 7월 19일 |확인날짜=2012년 11월 30일 }}{{깨진 링크|url=http://it.donga.com/plan/10055/ }}</ref><ref>{{웹 인용 |url=http://www.gemalto.com/techno/otp/ |제목=One Time Password (OTP) |확인날짜=2012년 11월 30일}}</ref>
* [[온라인 뱅킹]]
* [[온라인 게임]]
* [[포털 사이트]]
* [[기업 네트워크]]

== 도입 배경 ==
OTP 이외의 사용자 인증 수단으로는 [[사용자 (컴퓨팅)|사용자 계정]] 및 [[암호]]를 이용한 방식, 추가적인 질의응답을 이용한 방식 등 여러 가지가 있는데, 대부분 한 번 인증값이 유출되고 나면 인증값을 바꾸기 전에는 해킹을 당하기 쉽다는 문제점을 가지고 있다. 이를 보완하기 위한 인증 수단으로 보안 카드가 있지만, 이 역시 정해진 수십여 개의 번호를 사용할 뿐이므로 여전히 유출에 의한 위험성을 가지고 있다.<ref>{{웹 인용 |url=http://www.truefriend.com/main/customer/guide/_static/TF04ac060100.jsp |제목=공인인증/OTP안내 |확인날짜=2012년 12월 3일}}</ref><ref>[[신한은행]]의 경우 1년에 1회씩 보안 카드를 교체하라고 연락이 오며, 분실하지 않은 이상 일반적인 교환시 교체 수수료는 없다.</ref><br />
이에 따라, 한 번 생성되면 그 인증값이 임시적으로 한 번에 한해서만 유효한 OTP 방식을 도입하게 되었다.

== 생성 및 인증 방식 ==
=== S/KEY 방식 ===
[[벨 통신 연구소]]에서 개발한 OTP 생성 방식으로, [[유닉스 계열]] [[운영 체제]]에서 인증에 사용되고 있다. 그 생성 알고리즘은 아래와 같다.
# 클라이언트에서 정한 임의의 비밀키를 서버로 전송한다.
# 클라이언트로부터 받은 비밀키를 첫 값으로 사용하여, [[해시 체인]] 방식으로, 이전 결과 값에 대한 해시 값을 구하는 작업을 n번 반복한다.
# 그렇게 생성된 n개의 OTP를 서버에 저장한다.
또한 이를 통해, 클라이언트에서 i번째로 서버에 인증을 요구할 때의 인증 방식은 아래와 같다.
# 클라이언트에서 정한 OTP에 [[해시 함수]]를 n-i번 중첩 적용하여 서버로 전송한다.
# 서버에서는 클라이언트로부터 받은 값에 [[해시 함수]]를 한 번 적용하여, 그 결과가 서버에 저장된 n-i+1번째 OTP와 일치하는지 검사한다.
# 일치하면 인증에 성공한 것으로, 카운트를 1 증가시킨다.
[[해시 체인]]에 기반하고 있는 이 알고리즘은, [[해시 함수]]의 역연산을 하기 어렵다는 점에 착안하여 만들어졌다.<br />
해킹에 의해 클라이언트에서 서버로 전송되는 값이 노출된다 해도, 그 값은 일회용이므로 다시 사용될 수 없다. 또한 그 다음 인증을 위해서는 그 전에 전송된 값보다 [[해시 함수]]가 한 번 적게 적용된 값을 사용해야 하는데, 그 값을 유추하는 것 또한 매우 어렵다.<br />
다만 생성했던 OTP를 모두 소진하면 다시 새로 설정을 해야 하며, 서버에 저장돼 있는 OTP 목록이 유출될 경우 보안에 대단히 취약해진다는 단점이 있다.<ref>{{웹 인용 |url=http://www.ece.northwestern.edu/CSEL/skey/skey_eecs.html#What-S-KEY-Is |제목=The S/Key Password System |확인날짜=2012년 12월 7일 |저자=Chris Walsh}}</ref>

=== 시간 동기화 방식 ===
OTP를 생성하기 위해 사용하는 입력 값으로 시각을 사용하는 방식이다. 클라이언트는 현재 시각을 입력값으로 OTP를 생성해 서버로 전송하고, 서버 역시 같은 방식으로 OTP를 생성하여 클라이언트가 전송한 값의 유효성을 검사한다.<br />
임의의 입력값이 필요하지 않다는 점에서 사용하기 간편하고, 클라이언트가 서버와 통신해야 하는 횟수가 비교적 적다. 또 서버에서 클라이언트에 입력값을 보내는 방식이 아니므로, 여타 OTP 생성 방식에 비해 [[피싱]]에 안전하다. 한편 클라이언트에서 시각 정보를 이용해 OTP를 생성하므로, 스마트폰 등의 모바일 기기도 클라이언트로 사용되기 적합하다는 점 역시 비용 절감 측면에서 장점이다.<br />
하지만 클라이언트와 서버의 시간 동기화가 정확하지 않으면 인증에 실패하게 된다는 단점이 있으며, 이를 보완하기 위해 일반적으로 1~2 분 정도를 OTP 생성 간격으로 둔다.<br />
미국 RSA사에서 만든 '시큐어 ID'가 이 방식을 사용한다.<ref>{{웹 인용 |url=http://osiux.com/security-otpw-on-time-password-wikipedia.txt |제목=One-time password |확인날짜=2012년 12월 13일 |보존url=https://web.archive.org/web/20121022235140/http://osiux.com/security-otpw-on-time-password-wikipedia.txt# |보존날짜=2012-10-22 |url-status=dead }}</ref>

=== 챌린지•응답 방식 ===
서버에서 난수 생성 등을 통해 임의의 수를 생성하고 클라이언트에 그 값을 전송하면, 클라이언트가 그 값으로 OTP를 생성해 응답한 값으로 인증하는 방식이다.<br />
입력값이 매번 임의의 값이 된다는 측면에서는 안전성을 갖추고 있으나, 네트워크 모니터링에 의해 전송되는 값들이 노출될 경우 매우 취약해진다는 단점이 있다. 또 서버와 클라이언트 사이의 통신 횟수도 비교적 많이 요구된다.<ref>{{웹 인용 |url=http://support.oullim.co.kr/portal/Techletter/goTechletter.asp?foldname=20100331&filename=news4.htm |제목=공인 인증서 방식 대체수단 OTP |확인날짜=2012년 12월 13일 }}{{깨진 링크|url=http://support.oullim.co.kr/portal/Techletter/goTechletter.asp?foldname=20100331&filename=news4.htm }}</ref>

=== 이벤트 동기화 방식 ===
서버와 클라이언트가 카운트 값을 동일하게 증가시켜 가며, 해당 카운트 값을 입력값으로 OTP를 생성해 인증하는 방식이다.<ref>{{웹 인용 |url=http://support.oullim.co.kr/portal/Techletter/goTechletter.asp?foldname=20100331&filename=news4.htm |제목=인증의 마법사, OTP |저자=이창희 |확인날짜=2012년 12월 13일 |출판사=게임어바웃 }}{{깨진 링크|url=http://support.oullim.co.kr/portal/Techletter/goTechletter.asp?foldname=20100331&filename=news4.htm }}</ref><br />
다만 클라이언트에서 OTP를 생성하기만 하고 인증에 사용하지 않으면, 서버와 클라이언트의 카운트 값이 불일치하게 된다는 문제점이 있다. 이러한 문제를 보완하기 위해 어느 정도 오차 범위 내에서는 인증을 허용하는 방법이나, 카운트가 어긋났다고 판단될 경우 연속된 OTP를 받아 유효성을 판별하는 방법 등이 사용된다.

== 전달 방식 ==
OTP는 사용자 인증에 사용되므로, 기본적으로 서버와 클라이언트 사이에 통신 및 전달 수단이 필요하다. 이러한 수단으로는, 아래와 같은 것들이 있다.
=== OTP 토큰 ===
[[파일:RSA-SecurID-Token.jpg|섬네일|200px|OTP 토큰]]
OTP 토큰이라 불리는 별도의 하드웨어를 클라이언트로 사용하는 방식이다. 기기 자체에서 해킹이 이루어지기는 힘들지만, 토큰을 구입해야 하므로 추가 비용이 필요하며 휴대하기에 불편하다는 단점이 있다.

==== 카드형 OTP 토큰 ====
[[파일:Japan Net Bank token.jpg|섬네일|200px|재팬넷은행의 카드형 OTP 토큰]]
기존의 토큰의 불편한 휴대성을 개선하기 위해, 얇은 두께로 휴대하기에 편리한 카드형 토큰도 출시된 바 있다. 일반 카드에 비해 별로 두껍지 않아 지갑에도 휴대가 가능하지만, 처리 속도가 느려 OTP 생성에 시간이 더 걸리고 수명이 짧으며 가격도 비싸다는 단점이 있다.

=== 스마트폰 앱 ===
별도의 하드웨어 장비를 필요로 하지 않아서 추가 비용 없이도 OTP 서비스를 이용할 수 있는 방식이다. 해당 스마트폰에 맞게 제공되는 앱을 설치함으로써 이용할 수 있다. 물론 서버 측에서 이 방식을 지원하지 않으면 이용할 수 없으며, 스마트폰 OS에 따라 이용이 제한될 수 있다는 단점이 있다. 또 스마트폰 환경인 만큼 해킹의 위험성이 비교적 높다.

=== [[SMS]] ===
[[SMS]]로 OTP를 전달하는 방식이다. 스마트폰이 아닌 어떤 종류의 휴대전화만 있어도 이용 가능하다는 장점이 있지만, [[SMS]] 자체의 해킹 위험성에 의해 현재는 거의 사용되지 않고 있다.<ref>{{웹 인용 |url=https://blogs.rsa.com/sms-or-not-to-sms-%E2%80%93-why-should-i-care/ |제목=SMS or Not to SMS – Why Should I Care? |저자=Mischel Kwon |날짜=2010년 1월 22일 |확인날짜=2012년 12월 13일 |출판사=RSA공식블로그 }}{{깨진 링크|url=https://blogs.rsa.com/sms-or-not-to-sms-%E2%80%93-why-should-i-care/ }}</ref>

== 안전성 논란 ==
=== 대표적 해킹 사례 ===
==== 미국 RSA사 OTP 해킹 사건 ====
{{위키뉴스|미국 RSA사의 OTP 관련 정보 해킹 당해}}
2011년 3월, 미국 RSA사의 OTP 제품인 ‘시큐어 ID’의 기술 정보가 해킹돼, 비밀번호 생성에 쓰이는 계산식 등의 주요 정보가 유출되었다.<ref>{{웹 인용 |url=http://www.zdnet.co.kr/news/news_view.asp?artice_id=20110318173025 | 제목='OTP 뚫렸다'…RSA 시큐어ID 사이버 공격당해 |저자=김희연 |날짜=2011년 3월 18일 |확인날짜=2012년 12월 11일 |출판사=지디넷코리아 }}</ref>

===== 여파 =====
RSA의 고객사인 군수업체 [[록히드 마틴]](Lockheed Martin)과 [[L-3 커뮤니케이션즈]](L-3 Communications)의 전산망이 해킹 공격을 받았다. [[록히드 마틴]]의 전산망에는 군사 기술과 개발 중인 무기에 대한 정보가, [[L-3 커뮤니케이션즈]]의 전산망에는 미 국방부에 공급하는 각종 통신 및 정찰 기술 등에 관한 정보가 담겨 있어 국제 안보가 우려되었다. 당시 해킹 공격으로 인한 직접적인 피해는 없었으나, 두 업체는 결국 시큐어 ID 사용을 중단하였다.<ref>{{웹 인용 |url=http://www.boannews.com/media/view.asp?idx=26396&kind=1 | 제목=잇따른 미 군수업체 해킹...RSA 해킹 여파  |저자=호애진 |날짜=2011년 6월 3일 |확인날짜=2012년 12월 11일 |출판사=보안뉴스 }}</ref>

===== 조치 =====
2011년 6월, RSA는 시큐어 ID 4천만대를 전면 리콜 조치하였다.<ref>{{웹 인용 |url=http://www.zdnet.co.kr/news/news_view.asp?artice_id=20110608105349&type=det | 제목= 美RSA, 해킹파문 OTP 4천만대 전면리콜 |저자=김희연 |날짜=2011년 6월 8일 |확인날짜=2012년 12월 11일 |출판사=지디넷코리아 }}</ref>

==== [[디아블로 III]] 유저 계정 해킹 사건 ====
[[디아블로 III]]에서 OTP를 사용해 사용자 인증을 하던 유저들이 해킹을 당한 사례이다.<br />
단순히 [[키로깅]]을 통해서 입수한 OTP를 수 분 내에 그대로 사용해도 로그인에 성공한다는 실험 결과가 있다.<ref name="diablo3">{{웹 인용 |url=http://www.thisisgame.com/board/view.php?id=1234355&category=16501 |제목=드러난 OTP의 맹점, 이대로 괜찮은가? |날짜=2012년 7월 3일 |확인날짜=2012년 12월 13일 |출판사=디스이즈게임닷컴 }}{{깨진 링크|url=http://www.thisisgame.com/board/view.php?id=1234355&category=16501 }}</ref>

===== 허술한 OTP 시스템 운용 =====
이 사건에서 주로 문제의 원인이 되었던 점은, OTP 시스템을 운용함에 있어서 아래와 같은 허술함이 많았다는 사실이다.
* 한 번 로그인에 성공한 OTP가 즉각 폐기되지 않고, 동일한 OTP를 유효시간 내에 입력하면 아무 문제 없이 로그인에 성공하게 됨.
* 앱에 표시되는 유효시간이 지나 OTP가 교체된 이후 1~3분 동안에도 이전 OTP로 인증이 가능함.
* OTP를 키보드로 입력해야 함.
* OTP 입력 내용이 화면에 노출됨.
이는 [[블레이드 앤 소울]]과 같은 게임에서의 OTP 시스템 운용 방식과 비교해 봤을 때 명확히 드러났다.<ref name="diablo3" />

== 규격화 ==
수많은 OTP 및 관련 암호학에 관한 규격들이 만들어지고 있으며, 이는 여러 [[RFC]] 문서들을 통해 확인할 수 있다.

== 같이 보기 ==
* [[Google OTP]]
* [[FreeOTP]]
* [[원 타임 패드]]
* [[개인 식별 번호]]
* [[공개 키 기반 구조]]
* [[보안 토큰]]
== 각주 ==
<references />

{{전거 통제}}

[[분류:보안]]
[[분류:컴퓨터 접근 제어]]