일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 1260
- 1916
- 14889
- Java
- AWS
- HttpRequestMethodNotSupportedException
- github actions
- 백준
- Session Fixation Protection
- RequiredArgsConstructor
- 12100
- amazon-ecr-login
- openTelemetry
- RestControllerAdvice
- self-hosted runners
- aws-mysql-jdbc
- 15686
- github
- SpringCloudConfig
- Spring Security
- 자바
- Value annotation
- Session Registry
- tailsamplingprocessor
- 14891
- Spring Authorization Server
- ConcurrentSessionControlAuthenticationStrategy
- 프로그래머스
- Spring
- 17144
- Today
- Total
한울이
[OTP] One Time Password 본문
출처
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 |