Google Authenticator 를 비롯한 인증 앱이 만드는 6자리 숫자는 서버와 통신해 받아 오는 값이 아니다. 등록할 때 받은 비밀키(seed) 와 현재 시각을 넣어 계산한 결과다(TOTP, RFC 6238). 그래서 비행기 모드에서도 코드가 나온다.
여기서 결론이 하나 나온다. 같은 비밀키를 가진 기기는 모두 같은 코드를 만든다. 기기를 등록하는 것이 아니라 비밀키를 복제하는 것이므로, 여러 기기에서 쓰는 일이 원리상 가능하다.
가장 간단하다. 서비스에서 2단계 인증을 설정할 때 뜨는 QR 코드를 기기 두 대에서 각각 스캔하면 끝이다. QR 안에 들어 있는 것이 비밀키이므로 두 기기가 같은 값을 갖게 된다.
QR 대신 제공되는 설정 키(otpauth:// URI 나 영문·숫자 문자열)를 수동 입력해도 결과는 같다.
앱마다 다르다.
| 앱 | 방법 |
|---|---|
| Google Authenticator | 앱의 계정 내보내기 기능으로 QR 을 만들어 다른 기기에서 읽는다. 구글 계정 동기화를 켜면 같은 계정의 기기끼리 자동으로 맞춰진다 |
| Microsoft Authenticator | 클라우드 백업으로 옮긴다 |
| 1Password · Bitwarden 등 | 항목에 TOTP 를 함께 저장하므로 금고를 여는 모든 기기에서 코드가 나온다 |
기존 등록을 내보낼 수 없는 앱을 쓰고 있다면, 서비스에서 2단계 인증을 해제하고 다시 설정하면서 QR 을 여러 기기로 읽는 것이 확실하다.
코드는 보통 30초 구간으로 계산되므로 기기 시계가 어긋나면 틀린 코드가 나온다. 자동 시각 동기화를 켜 둔다. Google Authenticator 에는 앱 안에서 시각 보정을 하는 메뉴가 따로 있다.
기기 하나에만 넣어 두면 그 기기를 잃는 순간 계정에 들어갈 방법이 사라진다. 여러 기기에 넣는 것도 대비책이지만, 다음도 함께 해 둔다.
비밀키를 복제하는 만큼 그 키가 있는 곳이 늘어난다. 업무용 계정을 개인 기기에 넣어 두는 것이 조직 정책에 맞는지 먼저 확인한다. 하드웨어 키(FIDO2)는 복제가 되지 않는 대신 분실 대비로 두 개를 등록하는 방식을 쓴다 — 목적이 같아도 접근 방법이 다르다.