사용자:Nonametag/연습장
OTP는 일회성으로 사용하는 비밀번호로, One-time password의 약자이다.
용도[편집]
OTP는 주로 높은 수준의 보안을 유지하며 사용자를 인증해야 할 필요가 있을 때 사용되며, 그 일반적인 경우는 아래와 같다.[1][2]
도입 배경[편집]
OTP 이외의 사용자 인증 수단으로는 사용자 아이디 및 암호를 이용한 방식, 추가적인 질의응답을 이용한 방식 등 여러 가지가 있는데, 대부분 한 번 인증값이 유출되고 나면 인증값을 바꾸기 전에는 해킹을 당하기 쉽다는 문제점을 가지고 있다. 이를 보완하기 위한 인증 수단으로 보안 카드가 있지만, 이 역시 정해진 수십여 개의 번호를 사용할 뿐이므로 여전히 유출에 의한 위험성을 가지고 있다.[3]
이에 따라, 한 번 생성되면 그 인증값이 임시적으로 한 번에 한해서만 유효한 OTP 방식을 도입하게 되었다.
생성 및 인증 방식[편집]
S/KEY 방식[편집]
벨 통신 연구소에서 개발한 OTP 생성 방식으로, 유닉스 계열 운영 체제에서 인증에 사용되고 있다. 그 생성 알고리즘은 아래와 같다.
- 클라이언트에서 정한 임의의 비밀키를 서버로 전송한다.
- 클라이언트로부터 받은 비밀키를 첫 값으로 사용하여, 해시 체인 방식으로, 이전 결과 값에 대한 해시 값을 구하는 작업을 n번 반복한다.
- 그렇게 생성된 n개의 비밀키를 서버에 저장한다.
또한 이를 통해, 클라이언트에서 i번째로 서버에 인증을 요구할 때의 인증 방식은 아래와 같다.
- 클라이언트에서 정한 비밀키에 해시 함수를 n-i번 중첩 적용하여 서버로 전송한다.
- 서버에서는 클라이언트로부터 받은 값에 해시 함수를 한 번 적용하여, 그 결과가 서버에 저장된 n-i+1번째 비밀키와 일치하는지 검사한다.
- 일치하면 인증에 성공한 것으로, 카운트를 1 증가시킨다.
해시 체인에 기반하고 있는 이 알고리즘은, 해시 함수의 역연산을 하기 어렵다는 점에 착안하여 만들어졌다.
해킹에 의해 클라이언트에서 서버로 전송되는 값이 노출된다 해도, 그 값은 일회용이므로 다시 사용될 수 없다. 또한 그 다음 인증을 위해서는 그 전에 전송된 값보다 해시 함수가 한 번 적게 적용된 값을 사용해야 하는데, 그 값을 유추하는 것 또한 매우 어렵다.
다만 생성했던 OTP를 모두 소진하면 다시 새로 설정을 해야 하며, 서버에 저장돼 있는 비밀키 목록이 유출될 경우 보안에 대단히 취약해진다는 단점이 있다.[4]
주석[편집]
- ↑ 허미혜. “당신의 비밀번호를 지켜 준다, OTP”. IT동아. 2012년 11월 30일에 확인함.
- ↑ “One Time Password (OTP)”. 2012년 11월 30일에 확인함.
- ↑ “공인인증/OTP안내”. 2012년 12월 3일에 확인함.
- ↑ Chris Walsh. “The S/Key Password System”. 2012년 12월 7일에 확인함.