인터넷 뱅킹 이용할 때 보안 인증도구로 사용하는 OTP는 One Time Password의 약자이다. 복제할 수 없는 일회용 비밀번호를 발급해서 해당 사용자만 쓰도록 하는 방식이다. 이 OTP가 무슨 원리로 동작하는지 알아보자.
기존의 보안카드는 미리 정해놓은 수십개의 비밀번호를 가지고 입력하는 방식이었다. 하지만 이는 취약점이 존재한다. 보안카드를 가지고 다니기가 귀찮기 때문에 핸드폰에 사진으로 찍어놓는 경우가 많았는데, 이 이미지가 유출되면 그대로 뚫리게 된다.
그래서 나온것이 매번 새로운 일회용 비밀번호를 생성하는 OTP 방식이다. 이렇게 하면 하나의 인증번호를 받아서 쓰다가 일정 시간 후 (30초) 폐기되고 다른 인증번호가 생성된다. 그 짧은 시간안에 번호가 유출되어 다른 사람이 도용하는 가능성이 극히 적어지는 것이다.
또한 하나의 비밀번호를 보아도 그 다음에 나올 것이 무엇인지 수학적 추론이 불가하다는 탄탄한 강점이 있다.
그런데 사용하다 보면 궁금한 점이 있다. OTP에서 입력한 비밀번호가 맞는지 은행 어플에서 어떻게 아는 것일까? OTP 기기에는 데이터나 와이파이 같은 아무런 통신 장치가 없는데 말이다.
OTP 생성기는 기기와 인증이 필요한 사이트 간에 통신을 하는 방식이 아니다. 서로가 미리 약속된 규칙에 따라 각자 특정 시간에 생성되는 비밀번호 숫자를 가지게 되고 그게 맞는지 비교하는 것이다.
즉 OTP를 생성하는 단말기에는 시계 데이터, 그리고 비밀번호 생성로직 이 두가지가 탑재되어 있다. 또한 이 로직에 의해 만들어주는 값이 사용자마다 다 다르게, 모든 시간별로 다 다르게 나와야 한다. 이렇게 되도록 제품을 만들때 미리 프로그램을 세팅해서 입력해 놓는 것이다. 동일한 로직의 프로그램을 인증하는 은행 어플에서도 사용해서 값이 맞는지 대조한다.
물론 이 생성 로직 자체가 유출되거나 해킹에 성공한다면 일회용 비밀번호 또한 복제가 가능해질 것이고 그러면 완벽한 보안이란 없을 것이다.