한울이

[OTP] One Time Password 본문

PROGRAMMING

[OTP] One Time Password

gksdnf050 2022. 8. 20. 16:13

출처
1. https://ldap.or.kr/1373-2/

2. https://zero-gravity.tistory.com/221

OTP는 One Time Password의 약자로 1회용 인증수단을 의미


OTP의 종류는 값을 생성하는 방법에 따라 크게 HOTP(HMAC Based OTP)와 TOTP(Time Based OTP) 등 2가지가 존재


HOTP
HOTP는 HMAC기반(HMAC은 Hash와 MAC이 합쳐진 개념)

Hash는 일방향 암호화라고도 하며 양방향 암호화와 다르게 한번 암호화 된 값 복호화X

* 양방향 암호화의 종류 : 대칭키 암호화, 비대칭키 암호화



MAC은 Message Authentication Code의 약자로, 송수신자 사이 메시지(데이터)가 변경되지 않았음을 확인할 수 있는 기술

송신자와 수신자 사이엔 둘 사이에만 공유되는 SecretKey가 존재하며 이는 키교환 알고리즘에 의해 교환



MAC 기술은 메시지의 위변조를 확인할 수 있지만, MAC 값의 기밀성은 보장X

-> 기밀성 보장을 위한 HMAC을 사용

HMAC은 MAC을 생성하여 메시지와 MAC 값을 Hash 알고리즘에 의해 Hash화

메시지를 확인하는 방법은 사용자가 보낸 HMAC 값과 자신의 MAC 값을 비교하여 확인




HOTP는 메시지 대신 Counter라는 변수를 입력받아 HMAC을 생성한 뒤 Code 생성을 하기 위해 Truncate 과정을 거침

HOTP에 의해 생성된 Code는 6자리 숫자 코드가 됨






1. Counter가 3일 때 사용자 인증이 성공하였다면, 인증 서버에선 OTP 단말 ID 정보에 Counter 3을 저장

2. 사용자가 OTP 단말을 3번 눌러 Counter가 6이 된 상태로 Code를 제출하여 인증을 시도

3. 인증서버는 동일한 OTP Code값을 확인할 때 까지 Counter 값을 1씩 증가시키며 OTP Code 값을 비교

4. 맞는 Code값이 발생하면 해당 Code 값에 대한 Counter 값을 다시 저장

*Counter 값을 무수히 많이 증가시킨 뒤 Code값을 제출할 경우, 인증서버에선 Counter 값을 일정 값 만큼 증가시켜 비교한 뒤 인증 실패 메시지를 반환

OTP 단말에서 이 제한된 횟수 보다 더 크게 Counter를 증가시킨 뒤 인증이 실패하면 HOTP System에선 Counter 동기화 작업을 진행



*Truncate



TOTP
TOTP는 HOTP에서 Counter 값을 시간에 의한 값(Time Stamp)으로 대체

Counter를 대체하는 시간 값은 아래와 같이 계산



따라서, 시간 값 계산 시 사용한 ‘X’의 값이 30이라면 30초 마다 OTP Code 값이 바뀌게 됩니다. Google OTP는 TOTP를 사용하므로, 시간 값에 따른 유효시간 갖음 (그 외 OTP Code를 생성하는 방식은 HOTP와 동일)

'PROGRAMMING' 카테고리의 다른 글

[SPRING] Spring Reactive Programming  (0) 2022.08.20
[APM] Scouter  (0) 2022.08.20
[DOCKER] cache gradle dependencies  (0) 2022.08.20
[SPRING] @Value annotation  (0) 2022.08.20
[JAVA] Generics  (0) 2022.08.20
Comments