恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
OpenClaw安全实践:API密钥从明文裸奔到托管与轮换
首页
资讯中心
/
OpenClaw安全实践:API密钥从明文裸奔到托管与轮换
OpenClaw安全实践:API密钥从明文裸奔到托管与轮换
发布时间:2026/9/26 3:46:45
如果你在一个项目里同时接了大模型服务商、内部工具、CI 机器人好几套 API 密钥肯定会遇到这样一个场景密钥一旦铺开就再也收不回来。尤其是 OpenClaw 这类常驻在终端里的 AI 编程助手它会在对话、日志、配置、插件、消息通道之间流转任何一环处理不当密钥就可能以明文形式出现在你不想让它出现的地方。这篇文章我打算把这几个月在 OpenClaw 里折腾密钥管理的经验完整梳理一遍包括密钥到底存在哪、怎么存才安全、多 provider 多 key 怎么切换、常见报错怎么排查以及你在部署和日常使用中最容易忽略的细节。适合什么人看正在部署 OpenClaw、想把千问、Codex、Teams、飞书这些通道串起来用的开发者以及那些已经把 key 写进配置文件、但总觉得哪里不太对劲的人。哪怕你刚接触 OpenClaw只要照着第三部分的步骤做一遍也能把密钥从“裸奔”状态收拾利索。1. 先搞明白OpenClaw 里的密钥到底存在哪1.1 常见的密钥存储位置很多人一上来就问“密钥应该放哪”但我觉得更关键的问题是“密钥现在已经在哪”。OpenClaw 这类 Agent 工具密钥的落点通常分布在四个地方配置文件比如~/.openclaw/config.yaml或项目根目录下的settings.json。很多新手图省事直接把api_key: sk-xxx写进去。这在本地单机跑没问题但只要这个文件被同步到 Git、被分享到群里密钥就等于公开了。环境变量通过export OPENCLAW_API_KEY_QWENsk-xxx注入。这是目前最推荐的做法因为环境变量不会出现在代码仓库里也不容易被误提交。.env文件本质上是环境变量的集合文件OpenClaw 启动时会自动加载。风险在于.env经常被人顺手提交进仓库尤其是.gitignore没配好的时候。系统钥匙串/密钥管理器比如 macOS 的 Keychain、Linux 的 Secret Service、1Password CLI、Bitwarden CLI。OpenClaw 的部分版本支持openclaw secrets set这类命令把密钥托管到系统钥匙串里配置文件只保存一个引用名称。我把常见存储位置的优劣列个表方便你对照自己的现状存储位置优点风险点推荐指数配置文件明文简单直接一眼能看到极易被提交到 Git 或截图分享不推荐环境变量不进仓库作用域可控Shell 历史记录可能残留推荐.env文件方便管理多环境需要严格配置.gitignore和权限推荐但要管好系统钥匙串/密码管理器不落明文权限隔离配置成本略高最推荐我自己的习惯是本地开发用.env 系统钥匙串混合CI 或容器里只用环境变量任何情况下都不把明文 key 写进 OpenClaw 的配置文件。1.2 密钥泄漏的三个隐蔽出口明文存储只是第一步风险真正让密钥流出去的往往不是存储本身而是下面几个隐蔽出口。第一个是日志。OpenClaw 在调试模式下会把请求参数、响应体、工具调用记录打到终端或日志文件里。如果你在 prompt 里夹带了Authorization: Bearer sk-xxx或者在调试输出里打印了配置对象密钥就可能出现在~/.openclaw/logs/下。更麻烦的是很多日志文件默认权限是 644同机其他用户也能读。第二个是对话历史。OpenClaw 的多 channel 特性让你可以在飞书、Teams、终端之间切换对话而聊天记录往往会被持久化。如果你在某个 channel 里手动粘贴过一个含 key 的配置命令那这段历史就留在了消息记录里。对于飞书这类有搜索功能的消息系统等于把密钥做成了全文索引。第三个是 Git 历史。这是最常见的翻车现场。你第一次把config.yaml提交进仓库后来发现不对删掉了重新提交。表面上文件没了但 Git 历史里那个含 key 的版本永远都在。任何有仓库访问权限的人都能通过git log -p把密钥捞出来。所以你在配置 OpenClaw 的时候我建议先问自己一个问题“如果我这条 key 明天被人拿去调用会产生多大的损失”如果答案是“可能刷掉几万块配额”那你现在就该动手做下面的改造。2. 选择一套适合自己的密钥管理方案2.1 核心原则最小权限、最小暴露、最短时效密钥管理绕不开三个原则最小权限、最小暴露、最短时效。最小权限的意思是你给每个 key 分配的权限只要够当前任务用就行。比如 OpenClaw 接入飞书时机器人 token 只需要“发送消息”权限就不要给它“读取所有聊天记录”的权限接入 Codex 时如果只是跑代码补全就不要申请完整账号级别的 API key尽量用服务号或受限 token。最小暴露的意思是密钥只在它必须存在的瞬间出现。能放环境变量就不放文件能放钥匙串就不放环境变量能引用名称就不落明文。OpenClaw 支持通过env:OPENCLAW_API_KEY_QWEN这种方式引用环境变量我强烈建议所有 model provider 的 credential 都走这个口子。最短时效的意思是key 不能一劳永逸。很多服务商的 API key 没有默认过期时间你需要自己设定轮换周期。我个人的节奏是生产环境的 key 每 30 天轮换一次测试环境的 key 每 90 天轮换一次。轮换时先在服务商后台撤销旧 key再重新生成然后更新 OpenClaw 的配置最后检查日志和对话历史里有没有旧 key 的残留。2.2 轻量方案环境变量与 .env 文件的正确姿势对于大多数个人开发者最轻量的方案就是环境变量 .env文件。但这里有很多细节做不对照样翻车。先看环境变量的写法。以 Linux/macOS 为例你可以把下面的内容写进~/.bashrc或~/.zshrcexport OPENCLAW_API_KEY_QWENsk-xxxxxxxx export OPENCLAW_API_KEY_CODEXsk-yyyyyyyy然后 OpenClaw 的配置文件里这样引用model: provider: qwen api_key: env:OPENCLAW_API_KEY_QWEN注意 shell 历史的问题。用export写在交互式终端里或者用source .env加载密钥会出现在 shell 历史文件~/.bash_history里。这个文件默认权限通常也是 644等于变相公开。所以export 语句最好只写在 profile 文件里不要零散地在终端里执行。再看.env文件。它的正确姿势是文件名就叫.env不要加奇怪后缀。项目根目录下新建.env.example只留变量名不放值提交到 Git 供同事参考。把.env写进.gitignore。文件权限改成 600chmod 600 .env。这样处理之后即使别人拿到了你的项目代码也看不到真实密钥。.env文件只要权限收紧即使机器被人登录没有 root 权限也很难读取。2.3 进阶方案用系统钥匙串和密码管理器托管环境变量的方案解决了“不进仓库”的问题但还没有解决“不落明文”的问题。你在~/.bashrc里写的 key 仍然是明文只是存放位置相对安全罢了。想要更彻底就用系统钥匙串或密码管理器。macOS 上可以直接用 Keychain。OpenClaw 如果支持openclaw secrets set qwen_api_key这个命令背后其实就是把密钥写进 Keychain配置文件里只保存一个引用 ID。用 Keychain 的好处是即使有人翻你的配置文件看到的也只是一串没有价值的引用名。Linux 上对应的是 Secret Service一般通过libsecret提供。如果你用的发行版没装图形钥匙串可以退一步用pass这个命令行密码管理器。pass 基于 GPG 加密每个密钥一个加密文件配合 pass 的 git 同步功能还能做团队共享但生产环境不建议把密钥同步到远程仓库哪怕是加密的。还有一类很好用的工具是通用密码管理器的 CLI比如 1Password CLI 和 Bitwarden CLI。它们的好处是你可以在 OpenClaw 外层包一个启动脚本先从 1Password 拉取密钥再以环境变量的形式注入给 OpenClaw 进程。这样密钥不以明文形式出现在磁盘的任何位置进程结束后环境变量随之消失。启动脚本大概长这样#!/usr/bin/env bash export OPENCLAW_API_KEY_QWEN$(op read op://Private/openclaw/qwen_api_key) export OPENCLAW_API_KEY_CODEX$(op read op://Private/openclaw/codex_api_key) exec openclaw $这个方案看起来多了一层但我实测下来非常稳。OpenClaw 本身不接触密钥物理存储所有敏感信息都在密码管理器的加密保险柜里。2.4 多密钥切换场景cc-switch 这类工具的角色与替代用 OpenClaw 接多个模型服务商时你一定会遇到“同一套配置里今天用千问明天用 Codex后天切回 OpenAI”的情况。这时就需要一个密钥切换机制。社区里常见的做法是借助 cc-switch 这类工具来管理多个 API provider 的密钥配置。cc-switch 做的事情本质上是一个配置切换器它把不同 provider 的 API key 和 base_url 存在一个本地配置里当你需要切换时执行cc-switch use qwen它会把当前激活的 provider 信息写入 OpenClaw 能识别的配置文件或者把环境变量重定向到对应的 key。但这里有个很容易踩的坑cc-switch 本身也是一个会保存密钥的软件。你在使用它之前一定要确认它的配置目录权限是否收紧。我见过不少朋友装完 cc-switch密钥以明文躺在~/.cc-switch/config.json里权限还是默认的 644。如果不想引入额外工具你也可以用一个不到十行的 shell 脚本来实现切换代替方案。核心思路是通过符号链接指向不同的环境变量文件#!/usr/bin/env bash # ~/.openclaw/scripts/switch-provider.sh case $1 in qwen) ln -sf ~/.openclaw/envs/qwen.env ~/.openclaw/active.env ;; codex) ln -sf ~/.openclaw/envs/codex.env ~/.openclaw/active.env ;; esac echo switched to $1然后启动 OpenClaw 时统一source ~/.openclaw/active.env。每个 provider 的密钥独立存放在各自的 env 文件里权限全部设为 600切换只是改变指针不会产生多余配置文件。3. 实操给 OpenClaw 加上一套安全的密钥配置3.1 先理清作用域全局配置与项目配置OpenClaw 的配置通常分两级全局级和项目级。全局配置在~/.openclaw/下项目配置在项目根目录的.openclaw/下。两级配置的优先级一般是项目配置高于全局配置这意味着同一个 key 名在两个地方都有值时项目配置生效。这个机制对密钥管理很重要。我建议的做法是全局配置只放默认 provider 和公共的 channel 配置不放任何真实密钥。项目配置只放该项目需要的密钥引用比如引用环境变量的env:写法。项目里的.env文件不进 Git。这样做的原因是隔离。如果你同时维护好几个项目每个项目对接不同的服务商那么全局只保存一个默认项目各自引用各自的变量互不干扰。换项目时不会误用另一个项目的 key也方便在交接时只给项目级配置文件。具体到文件上项目根目录的.env内容示例OPENCLAW_API_KEY_QWENsk-project-qwen-xxx OPENCLAW_CHANNELfeishu OPENCLAW_BOT_TOKENt-xxxxxxxx然后 OpenClaw 的项目配置config.yaml里project: channels: feishu: bot_token: env:OPENCLAW_BOT_TOKEN model: provider: qwen api_key: env:OPENCLAW_API_KEY_QWEN配置文件里没有明文所有敏感值都通过环境变量间接引用这是我认为最稳妥的结构。3.2 配置示例接入千问、Codex 的密钥传递下面给两个实际可参考的配置示例覆盖国内和海外两类主流模型服务商。先说千问。千问的 API 走 DashScope你需要先在控制台开通模型服务、创建 API key然后把 key 交给 OpenClaw。常见的错误做法是把 key 直接写进配置# 错误的做法不要照抄 model: provider: qwen api_key: sk-xxxxxxxxxxxx正确的做法是在.env里定义OPENCLAW_API_KEY_QWENsk-xxxxxxxxxxxx然后配置引用# ~/.openclaw/config.yaml 或项目配置 model: provider: qwen model: qwen-plus api_key: env:OPENCLAW_API_KEY_QWEN接下来是 Codex。Codex 的 API key 通常不带明显的sk-前缀而是一长串随机字符。它的登录方式也很特别有些版本支持通过codex login交互式登录这种方式会在你的 home 目录下生成一个 token 文件。如果你是在 OpenClaw 里通过 API key 登录 Codex那就把 key 同样放到环境变量里export OPENCLAW_API_KEY_CODEX一串随机字符OpenClaw 配置model: provider: codex api_key: env:OPENCLAW_API_KEY_CODEX这里有个细节值得多说一句codex login生成的 token 文件位置通常在~/.codex/下。如果这个目录被同步到云盘或备份工具token 一样会泄露。建议把~/.codex/和~/.openclaw/一起加入备份排除列表或者干脆把 Codex 的密钥统一收敛到环境变量方案里不依赖它的交互式登录文件。3.3 多 channel 场景飞书、Teams 和终端里密钥的安全边界OpenClaw 的一个重要特性是支持多 channel你可以把 Agent 接到飞书、Microsoft Teams、终端等不同入口。channel 越多密钥暴露面越大因为每个 channel 都涉及独立的凭据。先讲怎么选择 channel。OpenClaw 的agent配置里会有一个 channel 选择项终端 channel 最简单不需要额外凭据直接在命令行里交互飞书 channel 需要一个应用凭据和一个机器人 tokentoken 由飞书开放平台签发Teams 类似需要在 Azure 门户注册应用、获取应用 ID 和客户端密钥。我自己的建议是如果你只是自己用优先终端或飞书自建应用如果你要团队使用Teams 的权限模型更细但配置也更繁琐。在密钥安全边界上有几个细节你要注意第一飞书机器人 token 在配置时要确认权限范围。只需要发送消息就只勾选im:message:send不要顺手勾选读取全部消息。因为 token 一旦泄露攻击者能利用你授予的所有权限。第二Teams 接入时用到的客户端密钥client secret本质上是应用密码它比单个聊天 token 的权限更大。这个值务必通过环境变量注入并且要在 Azure 门户里设置有效期到期自动轮换。第三飞书输出容易被截断这个热词我在这里顺带说一句它虽然和密钥管理没有直接关系但会干扰你的排查。遇到输出截断通常是因为飞书单条消息长度上限所致需要 OpenClaw 侧开启消息分片或改用富文本卡片。别把截断误判成 token 权限不足。channel 配置示例飞书OPENCLAW_FEISHU_APP_IDcli_xxxx OPENCLAW_FEISHU_APP_SECRETapp_secret_xxxx OPENCLAW_FEISHU_BOT_TOKENt-xxxx配置引用channels: feishu: app_id: env:OPENCLAW_FEISHU_APP_ID app_secret: env:OPENCLAW_FEISHU_APP_SECRET bot_token: env:OPENCLAW_FEISHU_BOT_TOKEN3.4 Windows 与 Linux 部署的差异OpenClaw 在 Windows 和 Linux 上的密钥管理思路完全不同这也是很多人装了又重装、密钥散落各处的原因之一。先说 Windows。Windows 上装 OpenClaw很多人用 windowshub 这类分发渠道一键安装。安装方式本身没什么问题但 Windows 的环境变量设置方式跟 Linux 不一样很多人就把 key 写死在config.yaml里。Windows 环境变量可以通过setx或系统设置面板设置但我更推荐用 Windows 自带的“凭据管理器”来存敏感值。OpenClaw 如果支持通过keyring读取 Windows 凭据管理器那在 Windows 上就用钥匙串方案不要绕道.env。再说 Linux。Linux 部署最常见的问题不是不会配而是权限太松。很多教程让你在服务器上建一个目录然后把配置文件放进去但大家往往忘了两个关键动作第一chmod 600 ~/.openclaw/config.yaml第二chmod 600 ~/.openclaw/.env。服务器上多用户共享权限时这两个文件如果保持 644同机任何普通用户都能cat出来。如果你拿了一台免费试用的云服务器来部署 OpenClaw我建议你开机第一件事就把配置文件权限收紧。云服务器上还有一点容易被忽略系统会定期做快照备份备份里包含明文密钥。所以要么避免在服务器上落明文 key要么把密钥放到密钥管理器里快照里最多只有一个引用名。Linux 下用 systemd 托管 OpenClaw 时环境变量可以放在一个专门的EnvironmentFile里[Service] EnvironmentFile/etc/openclaw/env ExecStart/usr/local/bin/openclaw --daemon/etc/openclaw/env权限设为 600owner 设为运行 OpenClaw 的用户。这样 systemd 启动的进程自动加载密钥也不会污染 shell 环境。4. 排查实录那些让人失眠的报错和修复4.1 agent failed before reply: session file locked 到底是谁锁了文件这个报错在 OpenClaw 社区里出现的频率非常高尤其在多 channel 同时连接同一个会话时。完整报错一般长这样agent failed before reply: session file locked (timeout 60000ms)意思很简单OpenClaw 为了维护会话状态会给当前会话文件加锁。如果另一个进程已经持有这把锁新来的请求会等待直到 60 秒超时。这个机制本身是防并发冲突的但问题在于很多非正常退出场景下锁没有被正确释放。解决步骤我实测下来是四步# 第一步找到还在跑但可能卡死的 OpenClaw 进程 ps aux | grep openclaw # 第二步确定是哪个会话目录 ls -la ~/.openclaw/sessions/ # 第三步删除残留的锁文件 rm -f ~/.openclaw/sessions/*.lock # 第四步重启 OpenClaw 并观察日志 openclaw --debug这里有一个排查要点不要一上来就删锁文件。先看是不是真的有其他 channel 的请求还在处理中比如飞书那边正跑着一个长任务终端这边又发了一个新请求那锁是正常行为。只有在确认没有活跃请求时才删锁。这个报错排查清楚后发现是“假报警”的情况也不少尤其是当你把 key 配错、请求重试机制疯狂触发时会变相加重锁竞争。我遇到过一位朋友的服务器报错永远来自同一个 channel最后查出来是 Teams channel 配了一个已经失效的 client secret导致每次请求都在鉴权阶段挂起直到超时锁一直占着不放。把密钥轮换掉之后报错立刻消失。4.2 再遇cc-switch 未安装或协议处理程序未注册这个报错我第一次见的时候也很懵原文是cc-switch 未安装或协议处理程序未注册。请先安装 cc-switch 或手动复制 api 密钥。理解这个报错的关键在于“协议处理程序”这五个字。cc-switch 这类工具在切换 API provider 时不只是改写配置文件还会注册一个自定义协议处理器让 OpenClaw 能通过这个协议动态读取当前激活的密钥。如果你的系统里没装 cc-switch或者装了但协议注册步骤没完成OpenClaw 就找不到 key只能给你这个提示。解决方案有两条路。第一条路安装 cc-switch并执行它的协议注册命令。注册完之后重启 OpenClaw让配置重新加载。需要注意的是安装 cc-switch 后还要确认它管理的密钥配置本身是否有权限问题。第二条路绕开 cc-switch手动复制 API 密钥。这里的正确操作不是让你把 key 粘进配置文件而是按我们前文说的把 key 放进环境变量或.env文件然后在 OpenClaw 的 provider 配置里改成env:引用。export OPENCLAW_API_KEY_QWENsk-手动复制的密钥然后配置里写provider: qwen api_key: env:OPENCLAW_API_KEY_QWEN我个人更推荐第二条路。不是说 cc-switch 不好而是“外部工具注入密钥”这一层会让问题排查变复杂。你自己掌控环境变量报错时能快速判断是 key 的问题还是协议的问题。4.3 日志里看到密钥明文怎么办发现日志里有明文 key 时第一反应不要是“删日志文件就行”而要做下面三件事第一定位泄露的日志文件和泄露途径。打开~/.openclaw/logs/搜索 key 前缀看它是怎么被打印出来的。常见的途径是调试模式下打印了完整配置对象或者某个插件把请求头打了出来。找到途径之后把这个打印点关掉。第二清除历史日志并检查是否已同步到别处。如果日志目录被某个日志采集 agent 接管光删本地文件没用还得去采集端清除。第三也是最关键的无论泄露范围看起来多小都要轮换密钥。因为日志文件在某个时间窗口内是可读的你不知道是否已经有人扫过。轮换的操作是在服务商后台撤销旧 key签发新 key更新环境变量再按 4.2 里的步骤确认 OpenClaw 能正常读取新 key。这里建议你把日志清理和密钥轮换做成一个固定的应急动作不要单独执行其中一项。只清日志不换 key等于告诉攻击者“我知道被发现了但我懒得改密码”风险依旧存在。4.4 key 泄露后的应急处置如果已经确认 API 密钥被明文暴露在 Git 历史、消息系统或第三方平台上不要慌但动作要快。我给你一套可以直接照做的流程。第一步立即撤销密钥。在对应服务商的控制台找到 API key 管理页面直接 revoke。有些服务商支持查看调用记录你可以先截图保存一段时间的调用日志方便后续审计谁在用你的 key。第二步确认影响范围。如果这是 OpenClaw 里唯一的一份 key撤销后马上签发新 key并用新 key 重新配置所有 channel。按 3.2 的示例更新.env文件后重启 OpenClaw。第三步清理所有明文残留。包括 Git 历史不只是删除文件而是用工具改写历史这需要团队协作确认或者直接轮换后不再使用那个旧 key。消息系统里的记录飞书、Teams 的聊天记录都要搜一遍把含 key 的消息删除。第四步审计触发点。想一下key 是怎么暴露的是配置文件提交到了公共仓库还是截图发到了群里还是日志采集系统导致外泄找到根源并修复否则同样的事情会再发生。这里特别提醒一点如果在多个服务商都使用了同一条 key 风格的管理方式比如所有地方都叫OPENCLAW_API_KEY那你在轮换时要逐一改掉不要只改一处就以为完事了。我最常犯的错误就是改了 model provider 的 key忘了换飞书 bot token导致排查了半小时才发现问题。5. 一些经常被忽略的习惯与心得5.1 选型对比OpenClaw 与 WorkBuddy 的密钥安全视角很多人问我 OpenClaw 和 WorkBuddy 这类工具怎么选我的出发点永远是先看它们怎么处理密钥。功能再强大如果密钥存储方案让你心里没底那就不是好选择。OpenClaw 的优势在于它支持多种密钥注入方式从环境变量到系统钥匙串都有覆盖而且配置结构清晰容易审计。WorkBuddy 这类工具往往更偏向开箱即用配置过程简单但简单的代价是密钥强制明文写入本地配置文件不太适合团队或多环境场景。如果你只是个人体验WorkBuddy 的无脑配置反而省心。但只要涉及两个以上环境、两个以上服务商我建议选择像 OpenClaw 这样能让你完全控制密钥存储位置的工具。选型的时候别只看功能列表把密钥管理的自由度也放进对比维度。5.2 让密钥管理变成肌肉记忆最后分享几个我日常坚持的习惯帮助你把密钥管理从“偶尔想起来”变成“下意识动作”。第一个习惯每次新建 OpenClaw 项目先建.gitignore把.env、.openclaw/、日志目录全部排除。这比事后清理性价比高得多。第二个习惯所有配置文件里只写env:引用凡是打算写明文 key 的冲动一律用环境变量替代。时间长了你会发现这个习惯帮你避开了 90% 的泄露风险。第三个习惯定期轮换。我设了一个每月的提醒检查一遍所有 key 的签发时间超过 30 天的就轮换。轮换操作很机械但每次都能发现一两个已经遗忘的旧 key。第四个习惯日志分级。OpenClaw 运行时不轻易开 debug需要排查时才临时开启用完立刻关闭。这样可以大幅减少敏感信息被写入日志的概率。下面是一份简易自查清单你可以直接抄走检查项操作.env权限chmod 600 .env.gitignore包含.env、日志目录配置文件明文全部改为env:引用系统钥匙串已启用或配置密码管理器 CLI日志 Debug日常关闭排查后立即关闭密钥有效期生产 key 30 天轮换旧 key 撤销轮换后立即撤销旧 key5.3 最后几句掏心窝的话说实话在 OpenClaw 里保护 API 密钥这件事听起来像是个“安全最佳实践”之类的老生常谈但实际操作中我踩过的坑一个比一个实在。最早我也是把千问的 key 直接写在config.yaml里直到有一次准备把配置分享给同事忽然意识到里面躺着完整的敏感信息才惊出一身汗。后来我把整套方案改成了“环境变量 钥匙串 定期轮换”运行了快两个月再没出现过“密钥突然出现在某个奇怪的地方”的情况。期间遇到过 cc-switch 协议未注册、session file locked、飞书输出截断这些乱七八糟的问题但只要密钥链路是清晰的排查起来就很快。到最后你会发现所谓密钥管理不是搞一套多复杂的系统而是让密钥的存放位置、引用方式、轮换节奏都变成规则一切有章可循。如果你现在正在用 OpenClaw建议花一个下午把配置梳理一遍重点看三件事配置文件里有没有明文 key、.env权限是不是 600、日志里能不能搜到 key 前缀。做完这三件事你的密钥安全水平就已经超过大多数人。