1070 字
5 分鐘
多家手機品牌未在 Android 14 啟用 Passkey 功能,導致 WebAuthn 無法使用!?
2024-09-04
無標籤

最近買了一隻新的 Android 手機作為開發機,Moto G34 便宜好用,又配置了 Android 14,於是我就拿來測試 Passkey 登入 WebAuthn,沒想到是深淵的開始。


FIDO 與 WebAuthn#

FIDO 是一個國際聯盟,致力於開發能替代傳統密碼的安全認證標準。FIDO2 是其最新的開放標準,提供無密碼和多因素認證解決方案。WebAuthn 是 FIDO2 規範的一部分,由 W3C 制定,定義了如何在網頁和應用程式中進行基於公鑰的身份驗證。FIDO 和 WebAuthn 結合,讓使用者能夠通過生物識別或硬體安全金鑰等方法,更加安全和便捷地進行網路身份驗證。

Android 與 iPhone 本身都支援使用 Passkey 來登入 WebAuthn,可以在 WebAuthn 網站試試。首先要先進行註冊,用手機去掃 WebAuthn 的 QRcode,電腦與手機會透過藍牙確認彼此在附近再進行註冊。註冊完就可以使用手機的 PassKey 進行登入,登入時候也會透過藍牙檢查電腦與手機在附近。


Passkey 無法登入 WebAuthn#

我發現我這台 moto 手機無法對電腦進行 WebAuthn 驗證,會出現下面錯誤資訊,手機內瀏覽器做 WebAuthn 則沒問題。

我的 Android 14 的版本為 U1UGS34.23–82–4–2

發生錯誤:請在其他裝置上重新啟動程序,然後再試一次

Something went wrong: Restart the process on your other device to try again.

這我就百思不得其解,用過好幾隻手機玩 Passkey 都沒這問題,怎麼最新的 Android 反而有問題。


錯誤原因#

我在一篇日文文章找到錯誤發生的原因。那篇文章是在說明在第三方 Passkey 無法使用,狀況與我的問題是一樣的。

問題在於, Android 14 與過去 Android 13 的 Passkey 管理方式不同,Android 14 在調度 Passkey 的時候會使用到系統參數 android.software.credentials,而 13 以前是沒有的。

android.software.credentials 是 Android 14 系統中的一個功能標記(feature flag),用來表示設備是否支援「憑證管理」功能。這個功能讓應用程式能夠管理、儲存及自動填充使用者的憑證資料,例如帳號密碼、WebAuthn 資料等,從而提升使用者在不同應用和網站中進行身份驗證的便利性和安全性。該功能通常與 Android 系統中的自動填充服務(Autofill Service)和其他身份驗證 API 結合使用,幫助開發者簡化使用者的身份驗證流程,並減少對傳統密碼的依賴。

android.software.credentials 官方文件

android.software.credentials 官方文件

問題在就這裡,各個手機開發商可能沒注意到這件事情,在初始的 feature flag 中未設置 android.software.credentials 設為 true,導致 Android 14 手機無法在 WebAuthn 用 Passkey 做驗證。

上面那篇日文文章有整理 android.software.credentials有啟用的品牌:

  • 有效:Google、Samsung、Sharp
  • 無效:Sony、OPPO、Motorola、Nothing、小米

只能說 Passkey 或許是個冷門的功能吧?Android 14 都出了快一年了,卻有多個品牌有這狀況,看來沒什麼人關注 Passkey 無法使用的問題。據 Reddit 網友討論,小米更新系統後就修正了。

透過以下 adb 指令,可以檢查手機有沒有啟用該 flag,有啟用會回傳 true,無責回傳 false。

adb shell pm has-feature android.software.credentials

解決辦法#

android.software.credentials 是沒辦法自己進行修改的,提供一些解決辦法:

  • 降回 Android 13
  • 等待系統更新
  • Root 後,將 android.software.credentials 設為 true
  • 有些手機允許使用者控制功能標記,在「設定」「開發人員選項」「功能標記」看看有沒有 android.software.credentials可以開啟,我手上的 Moto G34 則沒辦法
  • 看看參考資料其他網友的做法(不過我自己試過是無效

我這台手機出廠就是 Android 14,目前還沒找到解決辦法,只能等待 Moto 推出系統更新


參考資料#


後記#

Moto G34 在 2024/12/18 的更新 U1UGS34.23–82–4–5,系統更新後解決了此問題。