Google認証システムから任意のツールにワンタイムパスワードを引っ越す
はじめに
スマホの機種変更のたびにワンタイムパスワードの管理が面倒ですね。
賢明な方は既に1Passwordなどにワンタイムパスワードを登録済みかもしれませんが、
最初にGoogle認証システムなどに登録してしまったら、引っ越すのも作り直すのも面倒になってしまうかもしれないです。
昨年、Google認証システムがエクスポートに対応しました。
これで機種変更が捗るのですが、公式サイトの説明では、
Google認証システム同士でQRコードを読ませるように書いてあります。
しかし自分は KeepassXC*1 や 1Password*2 で使いたいんだ!
自由になりたいので!
というわけでGoogleのロックインから脱出してみましょう。
然らばLet's Hacking!
おことわり:本記事の内容を参考に起こした結果の情報漏洩、操作ミスによるシークレットの削除などの不利益について、筆者は一切の責任を負えませんので悪しからずご了承ください。
1. Google認証システム でQRコードにエクスポートする
アプリの制限によりスクショ撮れないので、ここは文章のみの説明になります。
- Google認証システムアプリの右上のメニューから。 アカウント移行 をタップする
- アカウントのエクスポート をタップする
- 一旦認証を挟んだ後に、 アカウント選択画面 に入る
- アカウントを1~2個選択して、 QRコードを表示する
要はここに書いてある内容です
2. PCでQRコードを読み取る
PC用のQRコード読み込みアプリを使って、QRコードを読み取ります。
アプリとカメラの性能によって、スマホから読み取れるQRコードのアカウント数が変わってきます。
ノートPCのインカメラは性能が良くないので、同時に1~2個しか読みこめないでしょう。
読み込むと、
otpauth-migration://offline?data=******************
のようなURIが得られます。
QRコード読み込みアプリは、外に通信しないもの にしましょう。念のため。
QRコード読み込みアプリ例
[Mac] QR Journal
apps.apple.com[Windows10] QR Scanner Plus
3. otpauth でURIをデコードする
3.1. otpauth の入手
otpauth-migrationのデコーダー otpauth を使ってQRコードのURIを復号します。
オープンソースソフトウェアで、コードはgoで書かれていますが、
ビルドが面倒な人は Releaseからご自分の環境に合う実行ファイルをダウンロードして使いましょう。
Releases · dim13/otpauth · GitHub
3.2. デコード
コンソール*3 から以下のようにコマンドを入れます
otpauth -link "otpauth-migration://offline?data=*********"
.\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の仕様はGoogleのGitHubに記載されています。*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 を選択して
シークレットを入力すると完成
簡単ですね。
これで突然スマホぶっ壊れても全財産にロックがかかることはなさそうですね。
ただし、シークレットの管理は気を付けて、移行したらログからさっさと消してしまいましょう。
では、良いデジタルライフを!