OTP의 원리
Subject
금융권이나 이중 로그인 등에 흔히 사용되는 OTP를 보며 이것의 용도는 정확히 무엇이고 동작원리는 어떻게 되는지 궁금하여 관련 내용을 찾아 정리하였습니다.
OTP의 본래 뜻은 One-Time Password로 신기술이 아닌 아이디어 자체는 100년이 넘은 과거에 나왔다고 합니다.
인증 방식의 종류와 OTP 용도
인증 방식에는 싱글 팩터 인증(Single-Factor Authentication)과 다요소 인증(Multi-factor Authentication)이 존재하며 한가지의 팩터(Factor)만 사용하는 싱글팩터 인증보단 2가지 이상의 팩터를 확인하는 다요소 인증(멀티팩터 인증)방식이 보안이 중요한 최근 사회에는 자주 사용되고 있습니다.
팩터(Factor) : 사용자의 신원을 확인하는 방법으로 '인증 팩터' 라고 불림 (Authentication Factor)
싱글 팩터 인증(Single-factor authentication) : 팩터를 하나만 사용하여 인증
다요소 인증(Multi-factor authentication) : 팩터를 두가지 이상 사용하여 인증
Factor 종류 | 설명 | 예시 |
지식기반 (Knowledge) | 보안 질문과 같이 사용자가 기억하는 지식을 기반으로한 인증 | 패스워드, 핀번호, KBAs |
소유기반 (Possenssion) | 물리적인 사물(USB, 열쇠고리 등)을 이용하여 인증하는 방식 | 보안카드, 공인인증서, OTP, 모바일 디바이스 |
속성기반 (Inherence) | 실제 사람의 고유 특성을 이용하여 식별 | 지문, 망막 스캔, 음성 또는 얼굴 인식 |
일반적으로 아이디 비밀번호만을 이용한 인증 방식은 외우기 쉬운 정보 사용이나, 고정된 비밀번호라는 한계탓에 공격자에게 쉽게 추측되며 유출이 되면 누구나 쉽게 악의적인 목적으로 사용할 수 있다는 문제가 있습니다. 이를 방지하는 방법 중 하나는 다요소 인증을 사용하는 것입니다.
현시대의 다요소 인증(멀티 팩터 인증)은 대부분 2가지의 팩터를 이용하므로 투팩터 인증(2FA - 2 Factor Authentication)이라고도 불립니다. 흔히 은행 거래나 가상화폐 거래소, 포털 로그인 등의 과정에서 비밀번호를 입력하고 난 뒤 전화 인증이나 OTP 인증 과정을 거치는 것이 이에 해당합니다.
보안이 중요할 경우 3~4가지의 인증을 가질 수도 있으며 지식, 소유, 속성 외에 위치나 시간 정보 등을 사용하는 강화된 인증 방식을 취할 수도 있습니다.
OTP 원리
기업과 개인간의 보안키가 미리 약속된 비밀키값이 아닌 실시간으로 변하는 숫자를 이용하여 인증한다는 것이 한눈에 납득이 가지 않을것이라 생각합니다. 왜냐하면 OTP 장치는 그 누구와도 연결되있지 않으며 단독적으로 동작하기 때문입니다.
OTP의 방식은 자세히 들여다보면 여러 방식으로 나누어 지지만 결국 키값은 다른 사람은 알 수 없도록 개인과 인증 서버(은행 등)만 공유한다는 공통점이 있습니다.
※ OTP 일회성 비밀번호 메커니즘 구성
OTP 일회성 비밀번호 메커니즘 종류 | 설명 |
MAC(또는 보안이 강화된 HMAC) | Message Authentication Code의 약자로 송신자와 수신자 사이에 Secret Key가 키 교환 알고리즘에 의해 교환됩니다. 그 후 메시지와 Secret Key를 사용하여 MAC값을 생성하고 원래의 메시지와 함께 MAC을 붙혀 전송하여 서버에서 데이터 인증과 무결성을 보증할 수 있게 합니다. 하지만 MAC값이 그대로 노출되는 기밀성 보장이 안된다는 단점이 있습니다. 따라서 서버로 데이터를 전송할 때 메시지와 함께 메시지와 MAC를 결합한 데이터를 Hash화한 값을 붙혀 보내는 HMAC 방식이 있습니다. |
RSA | 하나의 공개키/ 서로 다른 두 개의 비밀키로 구성된 메커니즘. 주로 모든 보안영역(로그인 등)에서 사용되며 암호화 난이도에 따라 다르지만 수억년을 시도해도 해독할 수 없다할 정도로 유명한 알고리즘입니다. 살짝 어려운 수학 공식이 포함되어 있으니 관련 영상을 보시는 것을 추천합니다. |
HOTP | 해시 기반 메시지 인증 코드로 Event Based OTP, 초기의 OTP 모델. HMAC 모델에서 메시지 대신 Counter을 사용하여 HMAC를 생성, 그 후 Truncate과정을 거쳐 6자리의 숫자 코드를 생성합니다. (Counter는 사용자의 단말에서 OTP를 생성할 때 마다 1씩 증가하며, 인증서버의 Counter와 동일해야 합니다.) 만약 Counter의 값이 사용자 단말과 서버가 다르면 인증이 불가하기 때문에 서버는 일정 수준 Counter값을 조정하여 사용자가 보낸 값과 일치하는 값을 찾으면 Counter를 갱신합니다. ※ Truncate은 HMAC의 값을 6자리 수로 만들기 전의 과정으로 HMAC값을 정해진 규칙에 따라 재생산합니다. 자세한 내용은 참조 "One Time Password(OTP)의 개념 및 동작방식"를 참고하시면 됩니다. |
TOTP | HMAC 모델에서 메시지 대신 Time Stamp(시간)를 사용하여 HMAC를 생성하며 그 외의 과정은 HOTP와 동일합니다. |
※ MAC
※ HMAC
※ RSA
※ HOTP
※ TOTP
- 참조
- What's the Difference Between OTP, TOTP and HOTP https://www.onelogin.com/learn/otp-totp-hotp
- One Time Password(OTP)의 개념 및 동작방식. LDAP을 활용한 OTP 인증. https://ldap.or.kr/1373-2/
- 이미지 출처
ⓒ 굿햄 2022. daryeou@gmail.com all rights reserved.
댓글