본문 바로가기
기억

OTP , One-Time Password, 1회용통행암호, 오티피

by 볕날선생 2019. 1. 5.
728x90
반응형

OTP , One-Time Password, 1회용통행는 주로 높은 수준의 보안을 유지하며 사용자를 인증해야 할 필요가 있을 때 사용되며, 그 일반적인 경우는 아래와 같다. 온라인 뱅킹, 온라인 게임, 포털 사이트, 기업 네트워크

미리 정해진 패스워드가 아닌, 특정한 알고리즘에 따라 수시로 생성되는 비밀번호를 이용하는 보안 시스템.

아이디어 자체는 100년도 넘은, 그리고 그만큼 검증된 기술이다. Multi-Factor authentication체계의 인증 요소중 하나로 즐겨 사용된다. 인증 요소 분류중 소유물 인증 요소에 해당한다.

대한민국의 경우, 금융기관의 오픈뱅킹을 사용해야 할 때 OTP 토큰이나 시각장애인 전용 점자 보안카드가 반드시 필요해서 찾게 되는 물건이기도 하다. 보안카드를 사진 찍어서 보관하는 등 허술하게 보관하는 사람도 많고, 이걸 어떻게든 빼가서 장난치려는 악의적인 사기가 많아졌기 때문.

다이렉트 뱅킹은 OTP가 필수다. 웬만한 은행들의 오픈뱅킹은 OTP를 강제하고 있으며, 보안카드는 오픈뱅킹에서 계좌 조회만 가능하다.

접속시마다 그때그때 필요한 비밀번호를 생성하여 그 번호를 통해 사용자 본인 확인을 하는 방식이다. 대개는 주로 난수 발생기에 현재 시간을 넣어 비밀번호를 생성한다. 서버와 사용자의 생성기는 서로 교류하지 않지만, 시간을 seed로 하여 같은 알고리즘으로 생성 매칭을 하므로 서로 시간이 동기화되는 것이 중요하다. seed 시간은 초단위가 아닌 특정 time window 유닛으로 작동하므로 적정 수준의 톨러런스가 있다 (서로 몇초 차이가 나도 맞춰 동작된다.). 사용자 단말기 쪽 시계가 많이 달라져서 차이가 나게 되어도 서버쪽에서 해당 단말기에 대한 seed 차이 offset 보정 기능을 갖추면 여전히 동작한다. 타임스탬프에서 나머지 연산을 하게되면 원하는 시간단위로 분할하여 처리하게 할 수 있다. 예를들면 DB에서 흔하게 쓰이는 UNIX_TIMESTAMP modify 300 의 경우 5분 단위로 나머지를 구하게된다. 여기서 UNIX_TIMESTAMP 에 다시 빼주면 현재 시간이 속한 시작시각을 나타내준다. 여기서 예의 300으로 몇번 더 더하게 되면 더 나중에 시간이되고 빼게되면 이전의 시간을 구할 수 있게된다.

비밀번호가 1회용이라 노출되어도 재사용이 불가능하며, 비밀번호를 숨겨진 알고리즘을 이용하여 생성해내므로 서버와의 접속 없이도 생성이 가능하여 중간 과정에서 패킷이 유출되거나 하는 위험이 없다. 보안의 주안점을 방어력에서 기동성(?)으로 바꿔버린 체계. 보통 시간 동기나 해시 체인을 사용한다. 참고로 금융기관에서 흔히 사용하는 시간 동기(Time OTP) 방식을 사용하는 OTP 토큰이 아닌, 비밀번호 생성 횟수(서버쪽은 사용 횟수)에 기반하는 Event OTP 방식 토큰을 사용하는 경우 비밀번호 생성 버튼을 신나게 누르다가 어느 순간부터 해당 OTP 토큰을 못쓰게 될 수도 있으니 주의해야 한다.

OTP 하나를 여러 은행에다가 등록해 놓았다면, OTP를 분실했다가 회수하였을 때 일일이 등록한 은행에 가서 정지를 풀어야 한다. 그리고 은행마다 다를 수 있겠지만 타행 OTP를 연결해서 쓰는데 그 OTP 유효기간이 다 되어서 갱신하게 될 일 등이 생기면 갱신 전에 OTP 등록을 해지하고 새 OTP를 다시 등록해야 하는 경우가 생길 수 있다.

접속시마다 새로 생성된 번호를 입력해야 하므로 번거로우며(그래도 보안카드보다는 훨씬 덜 번거롭다), 흔히 사용되는 시간 기반 하드웨어 OTP 토큰의 경우 내장된 시계의 품질이 좋지 않으면 내부 시계에 오차가 생길 수 있어서, 서버와 시간을 자주 동기화해 줘야 한다는 점이 단점이다. 게임에 한정된 이야기일 수 있지만, 막 점검이 끝난 게임 등 사람들이 몰려 서버의 상태가 좋지 않을 때 OTP를 이용해서 접속을 하려고 하면 비이용자의 두 배 이상의 시간이 걸리게 된다.

728x90
반응형