跳轉到

D-20260814-13|帳號 PIN 修改與一次性助記詞

背景與驅動力

帳號分類原列出 PIN 修改、查看助記詞與登出,但正式 UI 沒有入口;provider 還把 changePin 的舊 PIN 寫死為空字串。KeyManager 只保存由助記詞推導的 encrypted seed,無法也不應事後還原助記詞。

考慮過的選項

  • 額外封存助記詞以供事後查看:增加高價值秘密且違反既有一次性備份流程,棄。
  • 保留空舊 PIN 的 pre-alpha 例外:目前開發期沒有需支援的 legacy profile,棄。
  • current profile 以 old/new PIN 重加密,助記詞只在建檔顯示,正式 Account 提供入口(採納)。

決定

  • canon 移除「事後查看助記詞」。建檔仍一次性顯示 24 詞並完成隨機字位抄寫驗證;之後只保存 encrypted seed。遺失助記詞無找回管道,未新增任何封存欄位。
  • IdentityData.changePin(oldPin, newPin) 拒絕空值並轉呼 KeyManager 同名能力;錯誤以既有 errors.keyManager.* 與參數傳回。不得保留空舊 PIN、pre-PIN 分支或 migration。
  • Account UI 收目前 PIN、新 PIN與確認值;不一致不呼叫 provider,成功後清空欄位。正式登出入口 呼叫既有 signOut(),由 AppShell lifecycle 撤銷身分 session、清 TURN session 並收攤 generation。
  • 未解鎖時同一 /settings/account 顯示建立/匯入入口,不建立第二套帳號頁。

後果與影響

玩家可以在正式 UI 驗證舊 PIN 後換 PIN,也能明確登出;系統不會為「可查看助記詞」承諾保存一份 原本不存在的秘密。