有鑑於 Authy 近日停止了它們的 desktop 支援,導致使用上的不便利,所以想遷移到其他 2FA authenticator 中,不過 Authy 本身也未提供匯出功能,因此我們要想辦法解決。
在網上搜尋發現不少人有這個需求,也有人提供相關的 solution,例如這篇:https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93
我自己最後是借了一台 iPhone 15 來操作這個步驟,成功轉換,順便把步驟翻譯為中文版。
credits 皆屬原 gist thread 中的原作者們所有。
- Mac 一台
- iPhone 一台
- 一些命令列與程式的基礎
- 偵聽 iPhone 登錄 Authy 後取回設定的 TOTP 項目資訊
- 解密取回的 TOTPs 資訊
- 生成 QRCode 列表網頁,方便使用其他 2FA authenticator 掃描匯入;或是透過原串中其他大大寫的 import 程式,匯入到相應的 2FA authenticator app 中
- 安裝 mitmproxy
brew install mitmproxy
- 啟動 mitm 偵聽 web UI
mitmweb --allow-hosts "api.authy.com"
- 設定 iPhone 網路代理
- 設定 > WiFi > 點 (i) > 最下方的 設定代理伺服器 > 手動
- 按照電腦本機上的 IP 填入,例如 192.168.1.123,連接埠為 8080
- 儲存
- iPhone Safari 打開
mitm.it
,找到 iOS,下載mitmproxy-ca-cert.pem
(若沒有連線,可能是代理並未設定成功,請重做以上步驟) - 設定 > 一般 > VPN 與裝置管理 > 設定描述檔,找到 mitmproxy 安裝它
- 設定 > 一般 > 最下方的 憑證信任設定 > mitmproxy > 打開
- 如果 iPhone 之前有安裝過 Authy,請移除並重新下載
- 打開新安裝的 Authy,登入,應該可以看到列表自動抓回了之前設定過的 TOTPs,如果沒有請進 Authy 的設定再退出之類的可能就會出現了
- 回到 mitmweb 的 UI,觀察 Flow List 頁籤,試著搜尋
authenticator_tokens
,某個 request 的 response 裡頭應該要有authenticator_tokens
的 key 與陣列的值,其中應該會有 digits, encrypted_seed 等 keys,如果沒有可能找錯 request,或是 Authy 沒有同步回來,試著重做上述步驟。 - 找到正確的 request 後,按 Flow tab 中,上方工具列的 Download 圖示,將加密過的這個 response 下載回本機,重新命名為
authenticator_tokens.json
- 透過 這篇 gist comment 中的 python code,將這個 json 解密重新產生為
decrypted_tokens.json
。 - 接著可以透過 這篇 gist comment 中的 html + js code,將 json 輸出成 QRCode 列表,以便重新掃描匯入其他 2FA authenticator app 中。