えむにわリソース

ITのスキマ的なあれこれを書きます。

Google認証システムから任意のツールにワンタイムパスワードを引っ越す

はじめに

スマホの機種変更のたびにワンタイムパスワードの管理が面倒ですね。
賢明な方は既に1Passwordなどにワンタイムパスワードを登録済みかもしれませんが、
最初にGoogle認証システムなどに登録してしまったら、引っ越すのも作り直すのも面倒になってしまうかもしれないです。

f:id:m2wasabi:20210223042436p:plain

昨年、Google認証システムがエクスポートに対応しました。

japanese.engadget.com

これで機種変更が捗るのですが、公式サイトの説明では、
Google認証システム同士でQRコードを読ませるように書いてあります。

support.google.com

しかし自分は KeepassXC*1 や 1Password*2 で使いたいんだ!
自由になりたいので!

というわけでGoogleのロックインから脱出してみましょう。

然らばLet's Hacking!

おことわり:本記事の内容を参考に起こした結果の情報漏洩、操作ミスによるシークレットの削除などの不利益について、筆者は一切の責任を負えませんので悪しからずご了承ください。

1. Google認証システム でQRコードにエクスポートする

アプリの制限によりスクショ撮れないので、ここは文章のみの説明になります。

  1. Google認証システムアプリの右上のメニューから。 アカウント移行 をタップする
  2. アカウントのエクスポート をタップする
  3. 一旦認証を挟んだ後に、 アカウント選択画面 に入る
  4. アカウントを1~2個選択して、 QRコードを表示する

要はここに書いてある内容です

support.google.com

2. PCでQRコードを読み取る

PC用のQRコード読み込みアプリを使って、QRコードを読み取ります。
アプリとカメラの性能によって、スマホから読み取れるQRコードのアカウント数が変わってきます。
ノートPCのインカメラは性能が良くないので、同時に1~2個しか読みこめないでしょう。

読み込むと、

otpauth-migration://offline?data=****************** のようなURIが得られます。

QRコード読み込みアプリは、外に通信しないもの にしましょう。念のため。

QRコード読み込みアプリ例

[Mac] QR Journa‪l

QR Journal

QR Journal

  • Josh Jacob
  • ユーティリティ
  • 無料
apps.apple.com

[Windows10] QR Scanner Plus

www.microsoft.com

3. otpauth でURIをデコードする

3.1. otpauth の入手

otpauth-migrationのデコーダotpauth を使ってQRコードURIを復号します。

github.com

オープンソースソフトウェアで、コードはgoで書かれていますが、
ビルドが面倒な人は Releaseからご自分の環境に合う実行ファイルをダウンロードして使いましょう。

Releases · dim13/otpauth · GitHub

3.2. デコード

コンソール*3 から以下のようにコマンドを入れます

Mac/Linux

otpauth -link "otpauth-migration://offline?data=*********"

Windows

.\otpauth.exe -link "otpauth-migration://offline?data=*********"

すると、例えば次のような文字列が得られます

otpauth://totp/Google:hoge@gmail.com?algorithm=SHA1&digits=6&issuer=Google&period=30&secret=***********

otpauth URIの説明

デコードされたURIの仕様はGoogleGitHubに記載されています。*4

URI

URI部分は otpauth://totp/<Google認証システム 内の識別名>:<アカウント名> となっています。

これらはGoogle認証システムアプリ内で鍵を見分けるための情報です。

クエリ部

? 以降のパラメータの説明は以下です

key default 説明
algorithm SHA1 ハッシュアルゴリズムですがGoogle認証システムでは固定値らしい
digits 6 TOTPの桁数 だいたい6桁
issuer - 認証先の名
period 30 TOTPの更新間隔 (秒)
secret - 秘密鍵

ここで、必要な情報は secret= 以降の シークレット のみです。

algorithm=SHA1 かつ digits=6 かつ period=30 だと、他のTOTPセットアップに大抵デフォルトで入ります。

4. 他のパスワード管理アプリにTOTPを設定する

任意のツールでTOTP*5を設定しましょう。

筆者の使っているKeepassXCの場合、アカウントのサブメニューから Setup TOTP を選択して

f:id:m2wasabi:20210223042008p:plain

シークレットを入力すると完成

f:id:m2wasabi:20210223042124p:plain

簡単ですね。

これで突然スマホぶっ壊れても全財産にロックがかかることはなさそうですね。
ただし、シークレットの管理は気を付けて、移行したらログからさっさと消してしまいましょう。

では、良いデジタルライフを!