透過 AAGUID 判斷密碼金鑰提供者

依賴方 (RP) 可以檢查相關聯公開金鑰憑證的 AAGUID,判斷密碼金鑰是由哪個密碼金鑰供應商建立。

密碼金鑰管理的挑戰

使用密碼金鑰的好處之一,就是使用者可以為單一帳戶建立多個密碼金鑰。有了這種彈性和密碼金鑰的穩健性,即使使用者因遺失密碼金鑰而無法登入帳戶,仍可使用其他密碼金鑰登入依附方。

在 RP 上管理多個密碼金鑰的使用者,在需要編輯或刪除特定密碼金鑰時,會遇到難以辨識正確密碼金鑰的問題。使用者想要移除未使用的密碼金鑰就是一個很好的例子。建議 RP 在密碼金鑰清單中附加密碼金鑰相關資訊,例如建立日期和上次使用日期。這有助於使用者找到特定密碼金鑰。

開發人員也可以允許使用者在建立密碼金鑰時或之後命名密碼金鑰,但許多使用者並未這麼做。理想情況下,密碼金鑰會自動命名,反映出來自用戶端的信號,或公開金鑰憑證中包含的資訊。

瀏覽器會提供使用者代理程式字串,供信賴方用於命名密碼金鑰,但 Android、iOS 或具備擴充功能的桌面瀏覽器等平台允許第三方密碼管理工具建立密碼金鑰,因此使用者代理程式字串不一定代表實際的密碼金鑰提供者。

有了密碼金鑰註冊作業傳回的公開金鑰憑證中所含的 Authenticator Attestation Globally Unique Identifier (AAGUID),RP 就能判斷密碼金鑰供應商,並讓使用者輕鬆找到正確的密碼金鑰。

使用 AAGUID 判斷密碼金鑰供應商

AAGUID 是一組專屬號碼,用於識別驗證器的型號 (而非驗證器的特定例項)。AAGUID 可在公開金鑰憑證的驗證器資料中找到。

認證物件版面配置,說明所附的驗證器資料 (包含認證憑證資料) 和認證陳述式。
AAGUID 可在 authenticator 資料中找到。

RP 可使用 AAGUID 識別密碼金鑰提供者。舉例來說,如果使用者在 Android 裝置上使用 Google 密碼管理工具建立密碼金鑰,RP 就會收到 "ea9b8d66-4d01-1d21-3ce4-b6b48cb575d4" 的 AAGUID。RP 可以在密碼金鑰清單中加上註解,指出密碼金鑰是在 Google 密碼管理工具中建立。

安全性設定頁面中的密碼金鑰設定會顯示每個密碼金鑰的詳細資訊。
密碼金鑰管理 UI 範例。

如要將 AAGUID 對應至密碼金鑰供應器,RP 可以使用由社群提供的 AAGUID 存放區。在清單中查詢 AAGUID,即可找到密碼金鑰供應商名稱和圖示 svg 資料文字。

大部分 WebAuthn 程式庫都提供擷取 AAGUID 的功能。以下範例顯示使用 SimpleWebAuthn 的伺服器端註冊程式碼:

// Import a list of AAGUIDs from a JSON file
import aaguids from './aaguids.json' with { type: 'json' };

...

 // Use SimpleWebAuthn handy function to verify the registration request.
const { verified, registrationInfo } = await verifyRegistrationResponse({
  response: credential,
  expectedChallenge,
  expectedOrigin,
  expectedRPID,
  requireUserVerification: false,
});

...

const { aaguid } = registrationInfo;
const provider_name = aaguids[aaguid]?.name || 'Unknown';

結論

AAGUID 是用於識別建立密碼金鑰的密碼金鑰供應商的專屬字串。RP 可使用 AAGUID,讓使用者更輕鬆地管理密碼金鑰。AAGUID 社群來源存放區可用於將 AAGUID 對應至密碼金鑰供應商。