OTP의 동작 원리

이애옹·2023년 10월 16일
0

OTP 동작 원리에 대해서 정리하기🤔

📌 OTP 란?

OTP(One-Time Password)는 한 번만 사용할 수 있는 비밀번호로, 보안 시스템에서 자주 사용되는 인증 방법 중 하나입니다. OTP는 매번 새로운 비밀번호를 생성하므로, 재사용이 불가능하고 보안성이 높습니다.

📌 OTP 동작원리

1. 비밀키 생성 (Secret Key Generation):

사용자와 시스템 간에 공유되는 비밀키(secret key)가 생성됩니다. 이 비밀키는 암호화 알고리즘에 사용되며, 매번 다른 비밀키가 생성됩니다.

2. 시간 정보 사용 (Time-Based OTP - TOTP) 또는 카운터 사용 (HMAC-Based OTP - HOTP):

  • TOTP (Time-Based OTP): 특정 시간(예: 30초)마다 새로운 OTP를 생성합니다. 시간 정보와 비밀키를 조합하여 OTP를 계산합니다.

  • HOTP (HMAC-Based OTP): 사용자의 세션 또는 이벤트가 발생할 때마다 새로운 OTP를 생성합니다. 일정한 카운터와 비밀키를 조합하여 OTP를 계산합니다.

3. OTP 생성 (OTP Generation):

  • TOTP: 현재 시간 또는 시간 간격을 사용하여 비밀키와 조합하여 일회용 비밀번호를 생성합니다.

  • HOTP: 카운터와 비밀키를 조합하여 일회용 비밀번호를 생성합니다.

4. OTP 전달 (OTP Delivery):

사용자에게 생성된 OTP를 안전하게 전달합니다. 일반적으로 모바일 앱(예: Google Authenticator)을 통해 QR 코드를 스캔하거나, 텍스트 형식의 OTP를 입력하도록 유도합니다.

5. OTP 검증 (OTP Verification):

사용자가 입력한 OTP와 시스템에서 생성한 OTP를 비교하여 일치 여부를 확인합니다.

6. 인증 결과 (Authentication Result):

OTP가 일치하면, 인증이 성공하고 사용자에게 접근을 허용합니다.
OTP가 일치하지 않으면, 인증이 실패하고 접근을 거부합니다.

📌 TOTP와 HOTP

여기서, OTP 암호 기법은 TOTPHTOP가 사용 된 다는걸 알 수 있는데 다음과 같은 집합으로 나타 낼 수 있다고 한다.

📝 HOTP 란?

먼저 HOTP은, HMAC을 기반으로 하는데 HMAC은 HashMAC이 합쳐진 개념이다.

Hash는 일방향 암호화라고도 하며 양방향과 다르게 한번 암호화 된 값을 복호화 하는것이 불가능하다.

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

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

MAC은 메시지에 대한 변조를 확인하기 위해 이러한 SecretKey로 메시지 해시화를 하여 메시지 뒤에 붙인다.

이러한 MAC 기술은 메시지 위변조는 확인할 수 있으나 기밀성 보장은 불가능 하다고 한다.

따라서, 기밀성 보장을 위해 HMAC을 사용하는데 이는 MAC을 생성하여 메시지와 MAC값을 Hash 알고리즘에 의하여 Hash화 한다.

메세지를 확인하기 위해서는 사용자가 보낸 HMAC 값과 자신의 MAC 값을 비교하여 확인한다.

HMAC을 기반으로 OTP 값을 생성하는 기술을 HOTP라고 칭하며, 초기 OTP 모델이라고 한다 !!!

HMAC(K, text) = H(K xor Opad + H(K xor Ipad + text))

  • K는 Secret Key 제 3자가 알지 못하는 비밀 텍스트
  • H는 해시함수 MD5 Sha-256 등 다양한 해시 사용가능
  • Opad는 Output padding K의 길이 만큼 0x5C 를 반복
  • Ipad는 Output padding K의 길이 만큼 0x36 를 반복

HOTP는 메시지 대신 Counter라는 변수를 입력받아 -> HMAC을 생성한 뒤 -> Truncate 하는 과정을 거친다. 다음 과정을 거친 뒤 6자리의 숫자 코드를 생성한다.

HOTP(K,text) = Truncate(HMAC-SHA-1(K,text))

  • K는 Secret Key 제 3자가 알지 못하는 비밀 텍스트
  • Truncate는 동적 stirng 자르기

위 사진은 은행에서 사용하는 OTP 단말의 로직인데, Counter는 메시지를 대체하며, OTP code의 무결성을 확인하기 위해 사용자가 사용한 CounterSecretKey 값이 인정서 서버의 CounterSecretKey와 같아야 한다.

사용자가 OTP 단말의 버튼을 누를때마다 Counter는 1씩 증가하는데, 인증 서버는 사용자가 인증 성공 할때의 Counter의 값을 저장해준다.

또한, 앞서 말했던 것 처럼 6자리 코드를 생성하기 위해서는 HMAC값을 Truncate 하는 작업이 필요한데, 다음과 같은 방식으로 진행된다.

📝 TOTP 란?

TOTP는 HOTP에서 Counter값을 시간(Time Stamp)로 대체하는것을 의미한다.

TOTP = HOTP(K, T)

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

따라서, 시간 값 계산시 사용한 X값이 30이라면 30초 마다 OTP code 값이 바뀌게 된다.

그 외에 OTP code를 생성하는 방식은 HOTP와 동일하다고 한다.

📝 HOTP와 TOTP

구분HOTPTOTP
필요 항목Shared Secret Key, CounterShared Secret Key, Time Stamp
HMAC 메시지이벤트 발생 시 값이 증가하는 Counter시간에 의존하여 값이 증가하는 Counter
유효시간예측 불가능30초, 60초 등
RFCsIETF RFC 4226RFC 6238

위 표에서 나오는 것 처럼 두 OTP의 주요 차이점은 유효시간인데, HOTP의 경우 정해진 기한이 없어 무차별 대입공격을 받을 위험이 있다고 한다.

따라서 짧은 수명주기를 가진 TOTP를 더 선호하는 추세라고 한다!!!

👀 참고자료

profile
안녕하세요

0개의 댓글