# 密钥

**密钥**页面（iPad 上在侧边栏，iPhone 上是密钥标签）管理你的 SSH 密钥。私钥字节
只存在于 iOS 钥匙串中 —— Tessera 自己的数据库里只保存公开的元数据（名称、
指纹、使用情况）。

## 生成密钥

轻点 **+ 生成** 并选择一种算法：

- **Ed25519** —— “快速、现代的默认选项”。保存在钥匙串中的软件密钥；它可以
  导出为恢复文件，并在设备之间迁移。
- **P-256 Enclave** —— “绑定设备”。在 Secure Enclave 内部生成，并且**永不离开
  它**：该密钥无法导出，也无法迁移到另一台设备。设备丢了，密钥也就没了 ——
  请在别处再保留一个已获授权的密钥。

不支持生成 RSA 密钥；参见[疑难解答](https://bambouville.com/docs/zh-hans/troubleshooting/#不支持-rsa-密钥)。

## 导入密钥

轻点 **导入** 并选择一个 OpenSSH 私钥文件（不超过 1 MB）。如果文件受密码短语
保护，该密码短语只用于解密一次，不会被保留。

- 只接受 **Ed25519** 导入。由于当前 SSH 栈只能提供已弃用的 RSA/SHA-1 签名，
  RSA 导入已停用 —— 请改用 Ed25519。
- 每当屏幕被捕获或应用进入后台时，导入面板都会自我隐藏（“已隐藏私钥导入”）。

## 生物识别保护

每个密钥都有一个**要求生物识别或密码**开关：开启后，Tessera 每次访问该密钥时
都需要 Face ID / Touch ID 或设备密码。对于软件 Ed25519 密钥，这由 iOS 在钥匙串
边界处强制执行；对于 P-256 Enclave 密钥，密钥材料永不离开 Secure Enclave，
每次使用前由 Tessera 自己强制执行这项认证 —— 这也正是该设置始终可以更改的原因。
只有在此项可配置之前创建的密钥才带有锁定的**已强制**标记。

### 连续连接授权

在**设置 → 安全 → 为密钥的连续连接授权**下，一次生物识别授权可以在 30 秒内
覆盖使用同一密钥连接同一端点的多次连接 —— 这样 tmux 标签和文件传输就不会各自
弹出提示。把应用切到后台总会使这些授权失效，即使[应用锁](https://bambouville.com/docs/zh-hans/security/)已关闭。

该开关在生成或导入密钥时提供，之后也可以在密钥详情中更改。例外是在此项可配置
之前创建的 P-256 Enclave 密钥：它们带有一个锁定的**已强制**标记，要更改就意味
着生成新密钥并轮换。

## 密钥详情面板

轻点某个密钥可查看它的类型、**指纹 (sha256)**（兼容 OpenSSH）和公钥。在这里
你可以：

- **拷贝公钥** —— 即 `authorized_keys` 行。
- **拷贝到主机…** —— 把它安装到服务器上（见下）。
- **导出私钥…** —— 仅限 Ed25519；写出一个用密码短语加密的 `openssh-key-v1`
  恢复文件。
- **删除本地私钥…** —— 参见[删除](#删除密钥)。

**使用者**一节会列出引用该密钥的主机。

## 在主机上安装密钥

**拷贝到主机…** 会让你选择一台主机，显示确切的 `authorized_keys` 行，并通过
SSH 把它追加到 `~/.ssh/authorized_keys`，同时带有校验标记。

- 你必须先[信任该主机密钥](https://bambouville.com/docs/zh-hans/host-keys/)：先连接一次以核对，然后重试。
- 如果某台主机已经在用某个密钥进行认证，Tessera 会拒绝再把该密钥安装到这台
  主机上。
- 已完成的安装会被记录，删除流程会报告它们（“已知的远程安装数：N”）。

## 导出与恢复

密钥的**恢复**一节会记录它的备份状态 —— 是否存在经过验证的恢复文件导出（含
日期和指纹），以及对于 Enclave 密钥的一条长期提醒：Secure Enclave 中的私密
材料无法离开本设备。

- **保护恢复密钥…** —— 用密码短语导出。
- **验证恢复文件…** —— 检查某个恢复文件是否仍与该密钥匹配。
- **从恢复文件恢复…** —— 对缺失或不匹配的钥匙串材料进行指纹校验后的修复
  （例如从备份恢复之后）。

在广泛安装软件密钥之前先备份它们 —— 一个无法恢复的密钥，意味着当密码被停用后
你会把自己锁在门外。

## 删除密钥

**删除本地私钥…** 会在确认后把密钥从钥匙串中移除。在本地删除**不会吊销**你
服务器上的任何 `authorized_keys` 条目 —— 如果某台已记录的主机有可用的备用
凭据，删除流程会提供“在 N 台已记录的主机上吊销并删除”来替你移除它们；否则，
如果你希望该密钥停止工作，请自行在每台服务器上移除对应的行。

从旧版本遗留下来的旧版 RSA 密钥会显示为已停用。

## 孤立的钥匙串项目

iOS 会在应用被删除并重新安装之后保留钥匙串项目，因此密钥元数据和密钥材料可能
会不同步。列表中私密材料已丢失的密钥会显示**缺少私有材料**标记（用[从恢复文件
恢复](#导出与恢复)修复）；没有对应密钥的遗留私密材料则会显示为“N 个孤立的
钥匙串项目”，并附带**查看清理…**流程 —— 如有疑虑，请先导出一个恢复文件，
然后再删除。

## 设备访问

当你的另一台设备通过[授权本设备](https://bambouville.com/docs/zh-hans/continuity/#授权本设备)在某台主机上完成
注册时，该授权会记录在这里：对端设备、方向、主机和密钥指纹。**吊销**会用你
自己的访问权限把那台设备的公钥从主机上移除 —— 与它当初被安装的方式相同。如果
无法连上该主机，条目会保持标记为不确定，以便你重试或手动清理。

## 字节存放在哪里

- 软件 Ed25519 密钥：iOS 钥匙串（不同步）。
- P-256 密钥：Secure Enclave，设计上不可导出。
- Tessera 自己的数据库：公钥、指纹、标签、使用情况 —— 绝不包含私密材料。

完整的加固说明参见公开的
[私钥安全审计](https://github.com/bambouville/tessera/blob/main/docs/private-key-security-audit.md)。
