요즘IT
위시켓
새로 나온
인기요즘 작가들컬렉션
물어봐
새로 나온
인기
요즘 작가들
컬렉션
물어봐
개발
AI
IT서비스
기획
디자인
비즈니스
프로덕트
커리어
트렌드
스타트업
서비스 전체보기
위시켓요즘IT
고객 문의
02-6925-4867
10:00-18:00주말·공휴일 제외
[email protected]
요즘IT
요즘IT 소개작가 지원
기타 문의
콘텐츠 제안하기광고 상품 보기
요즘IT 슬랙봇크롬 확장 프로그램
이용약관
개인정보 처리방침
청소년보호정책
㈜위시켓
대표이사 : 박우범
서울특별시 강남구 테헤란로 211 3층 ㈜위시켓
사업자등록번호 : 209-81-57303
통신판매업신고 : 제2018-서울강남-02337 호
직업정보제공사업 신고번호 : J1200020180019
제호 : 요즘IT
발행인 : 박우범
편집인 : 노희선
청소년보호책임자 : 박우범
인터넷신문등록번호 : 서울,아54129
등록일 : 2022년 01월 23일
발행일 : 2021년 01월 10일
© 2013 Wishket Corp.
로그인
요즘IT 소개
콘텐츠 제안하기
광고 상품 보기
기획

구글의 OTP는 어떻게 비행기 모드에서도 작동할까?

맨오브피스
4분
2021.03.15.
3.9K

우리나라에서 2단계 인증이라고 하면 문자메시지나 카카오 인증서, 통신사 PASS앱을 떠올리는 것이 일반적이다.

 

해외에서는 구글 인증(Google Authenticator) 앱을 많이 사용한다. 구글의 앱이라고 해서 구글 서비스에만 쓸 수 있는 것은 아니고 아마존이나 페이스북, 에어비앤비 같은 서비스에 로그인할 때도 2단계 인증수단으로써 사용할 수 있다.

 

재밌는 건 구글 인증 앱은 인터넷 연결이 따로 필요 없다는 점이다. 예를 들어 노트북에서 아마존 웹사이트에 로그인하려고 하면 2단계 인증용 비밀번호를 묻는다. 이때 휴대폰에 설치된 구글 인증 앱에서 생성된 아마존용 비밀번호를 입력하면 로그인할 수 있다. 비밀번호는 비행기 모드에서도 여전히 생성된다(30초마다 바뀐다).

 

인터넷에 연결되지 않은 휴대폰에서 생성된 1회용 비밀번호가 유효한지 아닌지 어떻게 판단할 수 있을까? 복잡한 보안 알고리즘이 작동하지만 쉬운 이해를 위해 매우 단순화해서 살펴보자.

 

  1. 일단 구글 인증 앱을 휴대폰에 최초로 설치하고 서버와 연동할 때에는 인터넷에 연결되어 있어야 한다.
  2. 연동하는 과정에서 구글의 서버와 사용자의 휴대폰은 각자 시크릿 키를 나눠 갖는다. 예를 들어 시크릿 키가 4321이라면, 서버에도 4321이 저장되고 내 휴대폰에도 4321이 저장된다.
  3. 아마존 웹사이트에 로그인하는 상황. 이메일과 비밀번호를 입력한 후에는 2단계 인증용 비밀번호가 필요하다. 이때 휴대폰의 구글 인증 앱을 열면 아래와 같은 계산이 일어난다.

 

(현재 날짜는 2021년 1월 30일 오전 9시 30분 30초라고 하자)

a. 현재 날짜를 Unix Time 형식으로 변환한다. (변환 결과: 1611966630)
b. 휴대폰에 저장되어 있는 시크릿 키를 확인한다. (4321)
c. a와 b를 곱한 후, 결과 값의 뒷 6자리를 1회용 비밀번호로 사용한다.
(1611966630 * 4321 = 6965307808230)

휴대폰 화면에는 아마존용 2단계 비밀번호가 808230으로 출력되고, 내가 808230이라고 입력하면 (구글 서버도 같은 결과 값을 갖고 있기 때문에) 유효한 비밀번호라는 것을 인증받을 수 있다.

 

 

(30초가 지나, 현재 날짜가 2021년 1월 30일 오전 9시 31분 00초라고 하자)

a. 현재 날짜를 Unix Time 형식으로 변환한다. (변환 결과: 1611966660)
b. 휴대폰에 저장되어 있는 시크릿 키를 확인한다. (4321)
c. a와 b를 곱한 후, 결과 값의 뒷 6자리를 1회용 비밀번호로 사용한다.
(1611966660 * 4321 = 6965307937860)
 

이제 1회용 비밀번호는 937860이다.

 

인터넷 연결이 필요 없는 이유는 저장된 시크릿 키와 시계만 있으면 계산할 수 있기 때문이다. 시크릿 키는 처음 세팅할 때 기기 안에 저장되어 있고, 시계는 인터넷 연결이 없어도 돌아간다(단, 구글 서버와 같은 시분초를 가리키고 있어야 한다는 조건이 붙는다). 또한 비밀번호를 눈으로 확인하고 손으로 입력할 시간이 필요하기 때문에, 1초마다 비밀번호를 새로 계산하지 않고 30초마다 하는 것으로 되어있다. 참고로 은행에서 발급해주는 OTP도 비슷한 방식.

 

가장 이상적인 세팅은 이용하는 모든 서비스마다 2단계 인증을 거치는 것이다. 하지만 아직도 2단계 인증을 지원하지 않는 웹사이트나 앱들이 수두룩하며, 사용자들에게도 일반적이지 않다. 그럼 비밀번호라도 어려워야 하는데, 자신의 강아지 이름이나 연속된 숫자로 지정하는 경우가 너무나도 흔하다. 서비스 제공자의 보안을 100% 신뢰할 수는 없는 노릇이기 때문에, 패스워드 매니저와 2단계 인증은 꼭 사용하기를 권장한다.

 

©️요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.

에디터가 직접 고른 실무 인사이트 매주 목요일에 만나요.
newsletter_profile0명 뉴스레터 구독 중