10 July 2022

認証アプリ間でのアカウント秘密鍵エクスポート、インポート

2要素認証(2FA : 2 factor authentication)のためのワンタイムパスワード(OTA : one time password)アプリ間で、秘密鍵(テキスト文字列)を使ってアカウント情報を相互にコピーする手法のメモ

主なOTP認証アプリ

Android版

Windows版

Linux版

  • コマンドラインでoathtoolを用いてOTPを計算

Google認証システムから秘密鍵をエクスポートする方法

Google認証システム(Google Authenticator)の「アカウントの移行」メニューを使って表示されるQRコードは、他のOTPアプリでは読み取れない独自仕様。

このQRコードから秘密鍵をエクスポートすれば、他の認証アプリでインポートすることができる。

20220710-googleauth-01.jpg
Google認証アプリのアカウント一覧画面

アカウント一覧画面で右上のメニューをクリックすると、次のようなメニューが表示される

20220710-googleauth-02.jpg
「アカウントを移行」メニューをクリック

Google認証アプリで「アカウントのエクスポート」をクリック
「アカウントのエクスポート」をクリック

20220710-googleauth-04.jpg
アカウントのエクスポート用QRコード

このQRコードは、いまのところGoogle認証アプリのみで読み込み可能で、他のアプリでは認識できない。

QRコードをGoogleレンズなどのQRコード解読アプリで読み取ると、コードの文字列が得られる

20220710-googlelenz-otpurl.jpg
GoogleレンズでデコードしたGoogle認証アプリのエクスポート用QRコード

otpauth-migration://offline?data=Ci4KFNZQeQbrLliQiQ5jrD0moXB0VwHnEhB0ZXN0MUBnb29nbGUuY29tIAEoATACEAEYASAAKITm1LIG

GoogleレンズでデコードしたこのようなURIを、いったんテキストファイルに格納し、PCに転送する。

Google Authenticator migration decoder (GitHub)より otpauth-migrationのデコーダを入手。(画面上のReleasesメニューより、WindowsまたはLinuxの実行ファイルをダウンロードできる)

コマンドラインよりデコーダを実行すると、秘密鍵が得られる

Windowsのコンソールで実行
> .\otpauth.exe -link "otpauth-migration://offline?data=Ci4KFNZQeQbrLliQiQ5jrD0moXB0VwHnEhB0ZXN0MUBnb29nbGUuY29tIAEoATACEAEYASAAKITm1LIG"

otpauth://totp/test1@google.com?algorithm=SHA1&digits=6&period=30&secret=2ZIHSBXLFZMJBCIOMOWD2JVBOB2FOAPH

Google認証システムで秘密鍵をインポートする方法

20220710-googleauth-05.jpg
Google認証システムで秘密鍵をインポートするには、「セットアップコードを入力」をクリック

20220710-googleauth-06.jpg
秘密鍵インポート画面

「アカウント名」は適当な文字列を入力可。

andOTPから秘密鍵をエクスポートする方法

20220710-andotp-01.jpg
andOTPのアカウント右側のメニューをクリックする

20220710-andotp-02.jpg
メニューの編集をクリック

20220710-andotp-03.jpg
表示された秘密鍵

表示された秘密鍵はテキストコピー可能です。

andOTPから秘密鍵をQRコード方式でエクスポートする方法

アカウントの右側にあるメニューボタンより、QRコードを表示をクリックする。

20220710-andotp-06.jpg

QRコードをデコードすると、直接秘密鍵が格納されている素直な設定

otpauth://totp/test1%40google.com?secret=2ZIHSBXLFZMJBCIOMOWD2JVBOB2FOAPH&issuer=test1%40google.com

andOTPで秘密鍵をインポートする方法

Google認証システム以外のOTPアプリで作成した、エクスポート用QRコードなら、直接QRコードを読み取れば秘密鍵がインポートされる。

ここでの説明は、秘密鍵がテキスト形式で得られた場合の方法。(Google認証システムから移行する場合も、いったん秘密鍵をテキスト形式にするため、この方法を使う)

20220710-andotp-04.jpg
andOTPで秘密鍵をインポートする場合は、「詳細を入力」をクリック

20220710-andotp-05.jpg
秘密鍵をインポートする画面

「発行者」「ラベル」は任意の文字列を入力してかまわない

WinAuthから秘密鍵をエクスポートする方法

Windows版OTP認証アプリのWinAuthでは、エクスポートは秘密鍵とQRコード方式、インポートは秘密鍵のみ対応となっている。

20220710-winauth-01.jpg
WinAuthのアカウント一覧画面

アカウントの上で右クリックすると、コンテキストメニューが表示される。秘密鍵・QRコードの表示は「Show Secret Key」をクリックする

20220710-winauth-02.jpg
アカウント コンテキストメニュー

20220710-winauth-03.jpg
秘密鍵・QRコードを表示

なお、ここで表示されるQRコードをデコードすると次のようなものとなっている

otpauth://totp/test01%40google.com?secret=2ZIHSBXLFZMJBCIOMOWD2JVBOB2FOAPH&digits=6

WinAuthで秘密鍵をインポートする方法

アカウント一覧画面の左下に「Add」というボタンがあるので、これをクリックすると、秘密鍵登録画面が表示される

20220710-winauth-04.jpg
秘密鍵登録画面

なお、このソフトウエアではQRコードよりアカウントを登録する機能は持っていない。

LinuxのoathtoolでOTPを計算

oathtool --totp -d 6 --time-step-size=30s --base32 2ZIHSBXLFZMJBCIOMOWD2JVBOB2FOAPH

--totp : Time base, OTP
-d 6 : 6桁
-base32 XXXXX : 秘密鍵を指定

Gnome Authenticatorから秘密鍵をエクスポートする方法

Ubuntu 22.04以降なら、デフォルトのリポジトリに入っているので、apt install gnome-authenticatorでインストール可能。

20220710-gnomauth-01.jpg
Gnome Authenticatorのアカウント一覧画面

秘密鍵のエクスポートは、アカウント一覧画面のメニューより

20220710-gnomauth-02.jpg
Gnome Authenticatorのメニュー

Backup -> jsonファイルに保存(a plain-text JSON file)でテキスト保存したファイルから抜き出せばよい

export.json
[
{"secret": "2ZIHSBXLFZMJBCIOMOWD2JVBOB2FOAPH",
 "label": "test01@google.com",
 "period": 30,
 "digits": 6,
 "type": "OTP",
 "algorithm": "SHA1",
 "thumbnail": "Default",
 "last_used": 0,
 "tags": ["Google Cloud Platform"]}
]

Gnome Authenticatorで秘密鍵をインポートする方法

20220710-gnomauth-03.jpg
秘密鍵をインポート(Add a new account)