# 金鑰

**金鑰**頁面（iPad 上位於側邊欄，iPhone 上為金鑰標籤頁）管理你的 SSH 金鑰。
私密金鑰的位元組只存在於 iOS 鑰匙圈中 —— Tessera 自己的資料庫只保存公開的中繼
資料（名稱、指紋、使用情形）。

## 產生金鑰

輕點 **+ 產生** 並選擇一種演算法：

- **Ed25519** ——「快速、現代的預設選項」。儲存在鑰匙圈中的軟體金鑰；可以輸出
  為回復檔案，並在裝置之間移轉。
- **P-256 Enclave** ——「綁定裝置」。在 Secure Enclave 內部產生，而且
  **永遠不會離開**：這把金鑰無法輸出，也無法移轉到其他裝置。裝置一旦遺失，金鑰
  就沒了 —— 請在別處保留第二把已授權的金鑰。

不支援產生 RSA 金鑰；請見[疑難排解](https://bambouville.com/docs/zh-hant/troubleshooting/#不支援-rsa-金鑰)。

## 輸入金鑰

輕點**輸入**並選擇一個 OpenSSH 私密金鑰檔案（最大 1 MB）。如果該檔案有密碼短語
保護，該密碼短語只會用來解密一次，不會被保留。

- 只接受 **Ed25519** 的輸入。由於目前 SSH 堆疊只能提供已棄用的 RSA/SHA-1
  簽章，RSA 輸入已停用 —— 請改用 Ed25519。
- 每當畫面被擷取或 App 進入背景時，輸入面板都會自我隱藏（「已隱藏私密金鑰
  輸入」）。

## 生物辨識保護

每把金鑰都有一個**要求生物辨識或密碼**開關：開啟後，Tessera 每次存取該金鑰時
都會要求 Face ID / Touch ID 或裝置密碼。對軟體 Ed25519 金鑰而言，這是由 iOS 在
鑰匙圈邊界處強制執行的；對 P-256 Enclave 金鑰而言，金鑰材料永遠不會離開 Secure
Enclave，而每次使用前的驗證由 Tessera 自己強制執行 —— 這也正是這項設定始終可以
更改的原因。只有在此項可設定之前建立的金鑰，才會帶有鎖定的**已強制**標記。

### 連續連線授權

在 **設定 → 安全性 → 為金鑰的連續連線授權** 下，一次生物辨識授權可在 30 秒內
涵蓋以同一把金鑰連往同一端點的重複連線 —— 這樣 tmux 分頁和檔案傳輸就不會各自
跳出提示。App 進入背景一律會使這些授權失效，即使 [App 鎖定](https://bambouville.com/docs/zh-hant/security/)是關閉
的也一樣。

產生或輸入金鑰時會提供這個開關，之後也可以從金鑰詳細資料中更改。例外是在此項
可設定之前建立的 P-256 Enclave 金鑰：它們帶有鎖定的**已強制**標記，要更改就得
產生新金鑰並輪換。

## 金鑰詳細資料面板

輕點某把金鑰即可查看它的類型、**指紋 (sha256)**（相容 OpenSSH）和公開金鑰。從
這裡你可以：

- **拷貝公開金鑰** —— 也就是那一行 `authorized_keys`。
- **拷貝到主機…** —— 把它安裝到伺服器上（見下文）。
- **輸出私密金鑰…** —— 僅限 Ed25519；會寫出以密碼短語加密的
  `openssh-key-v1` 回復檔案。
- **刪除本機私密金鑰…** —— 請見[刪除](#刪除金鑰)。

**使用者**區段會列出參照這把金鑰的主機。

## 在主機上安裝金鑰

**拷貝到主機…** 會讓你挑選一台主機，顯示確切的 `authorized_keys` 內容，並透過
SSH 將它附加到 `~/.ssh/authorized_keys`，同時加上檢驗標記。

- 你必須先[信任該主機金鑰](https://bambouville.com/docs/zh-hant/host-keys/)：先連線一次以核對，然後重試。
- 若某台主機已經使用該金鑰進行驗證，Tessera 會拒絕再把它安裝上去。
- 已完成的安裝會被記錄，刪除流程也會回報它們（「已知的遠端安裝數：N」）。

## 輸出與回復

金鑰的**回復**區段會追蹤它的備份狀態 —— 是否存在已驗證的回復檔案輸出（含日期
和指紋），而對 Enclave 金鑰則會持續提醒：Secure Enclave 中的私密材料無法離開
本裝置。

- **保護回復金鑰…** —— 以密碼短語輸出。
- **驗證回復檔案…** —— 檢查某個回復檔案是否仍與該金鑰相符。
- **從回復檔案回復…** —— 以指紋核對的方式，修復鑰匙圈中缺失或不相符的材料
  （例如從備份還原之後）。

在廣泛安裝軟體金鑰之前先備份 —— 一把無法回復的金鑰，會在密碼驗證被停用之後
把你自己鎖在門外。

## 刪除金鑰

**刪除本機私密金鑰…** 會在確認後把金鑰從鑰匙圈中移除。在本機刪除**不會撤銷**
你伺服器上任何 `authorized_keys` 項目 —— 當某台已記錄的主機有可用的備用憑證
時，刪除流程會提供「在 N 台已記錄的主機上撤銷並刪除」替你移除它們；否則，
若這把金鑰應該停止作用，就得自行在每台伺服器上移除對應的那幾行。

舊版遺留下來的 RSA 金鑰會以停用狀態顯示。

## 孤立的鑰匙圈項目

iOS 會在 App 刪除並重新安裝後仍保留鑰匙圈項目，因此金鑰的中繼資料和金鑰材料
可能會脫節。清單中若有金鑰的私密材料已不存在，會顯示**缺少私有材料**標記
（可用[從回復檔案回復](#輸出與回復)修復）；而沒有對應金鑰的殘留私密材料，則會
以「N 個孤立的鑰匙圈項目」呈現，並附帶**查看清理…**流程 —— 若有疑慮，請先輸出
回復檔案再刪除。

## 裝置存取

當你的另一台裝置透過[授權此裝置](https://bambouville.com/docs/zh-hant/continuity/#授權此裝置)在某台主機上完成
註冊時，該授權會記錄在這裡：對端裝置、方向、主機和金鑰指紋。**撤銷**會利用你
自己的存取權限，把那台裝置的公開金鑰從主機上移除 —— 方式和當初安裝時相同。
如果無法連上該主機，該項目會維持標記為不確定，方便你重試或手動清理。

## 這些位元組究竟在哪裡

- 軟體 Ed25519 金鑰：iOS 鑰匙圈（不同步）。
- P-256 金鑰：Secure Enclave，設計上就無法輸出。
- Tessera 自己的資料庫：公開金鑰、指紋、標籤、使用情形 —— 絕不包含私密材料。

完整的強化細節，請見公開的
[私密金鑰安全稽核](https://github.com/bambouville/tessera/blob/main/docs/private-key-security-audit.md)。
