前面几篇讲的是设备和账号的外壳:系统、浏览器、邮箱、手机号。这篇讲锁本身。

先说个现实:大部分人的账号不是被什么高明的手段攻破的,而是因为在某个小网站上用了跟邮箱一样的密码,那个网站被拖库了,别人拿着这对用户名和密码去各处挨个试,一试一个准。这叫撞库,是国内账号被盗最常见的原因。国内的数据泄露有多频繁,就不用我多说了。

所以这篇只讲两件事:每个网站用不一样的密码,以及重要账号加第二道锁。不过在这之前,我想先补一点密码学的常识,因为从第二篇讲 iMessage 开始,“端到端加密”这个词已经出现很多次了,下一篇比较各家聊天软件还要用到。搞懂了这几个概念,很多事情你自己就能判断。

一、先补一点密码学常识

这一节没有公式,都是比喻,放心看。

哈希:不可逆的指纹

把任意长度的内容丢进去,出来一段固定长度的字符串。同样的输入永远得到同样的输出,改动一个字,输出就面目全非,而且算不回去——你没办法从这段字符串反推出原文。

这东西有两个常见用处。一是网站存密码:规矩的做法是不存密码本身,只存它的哈希,再加一段随机的“盐”,这样即使数据库被拖走,攻击者拿到的也不是明文密码。问题是很多网站并不规矩,国内历次大规模泄露里,明文密码一抓一大把。这就是“每个网站用不一样的密码”最现实的理由。

二是校验文件:下载软件时页面上给的那串 SHA256,就是文件的指纹,对一下就知道你下的东西有没有被人动过手脚。

对称加密:一把钥匙

加密和解密用同一把钥匙,速度快,适合加密大量数据。第四篇的 BitLocker、第二篇的 FileVault、还有密码管理器存在你硬盘上的那个数据库,用的都是这一类。

它的难题是:钥匙怎么交给对方,而不被中间的人截走?

非对称加密:一对钥匙

每个人有一对钥匙。公钥可以随便发给全世界,贴在个人主页上都行;私钥自己收好,绝不外传。

  • 别人用你的公钥加密的东西,只有你的私钥能解开。
  • 反过来,你用私钥给一段内容“签名”,别人用你的公钥就能验证:这确实是你发的,中途没被改过。

上面那个难题就这么解决了。HTTPS、第五篇的 PGP、iMessage,底下都是这套东西。

密钥交换:当着所有人的面商量出一个秘密

两个人在一个所有人都能听见的房间里对话,却能商量出一个只有他们俩知道的密码,旁边的人把全程听完也算不出来。听起来像魔术,但数学上确实能做到。

实际的做法通常是:先用非对称加密完成密钥交换,商量出一把临时的对称钥匙,再用它来加密正文。这样既安全又快。

端到端加密

把上面几样拼起来,就是第二篇说的端到端加密:钥匙只在两端的设备上生成和保存,服务器从头到尾只是个搬运工,搬的是它自己也看不懂的密文。

对照一下普通的“传输加密”:只保证你到服务器这一段路上是加密的,到了服务器上就是明文,平台自己看得到。微信是后者,iMessage 和 Signal 是前者。

前向保密

好的协议会不停地更换会话密钥,用完就丢。这样就算有人把你过去几年的密文全都存了下来,将来某天拿到了你现在的钥匙,也解不开以前的内容。

这一条很重要,因为“先把密文存起来,以后再想办法解”是很现实的做法。Signal 协议和 iMessage 都有这个性质,下一篇会看到有的软件没有。

抗量子

现在用的非对称加密,理论上会被足够强大的量子计算机破解。量子计算机还没造出来,但“现在存下来、将来再解”的威胁是当下就存在的。

所以苹果从 iOS 17.4 起给 iMessage 上了抗量子的 PQ3,Signal 也做了类似的升级。日常你用不到这个知识,但知道厂商在防什么。

最后:加密解决不了的事

  • 钥匙在设备上。设备被解锁、被人拿走,加密再强也白搭,所以第二篇的锁屏密码和紧急锁定才是基础。
  • 元数据不在加密范围里。谁在什么时候联系了谁、联系了多频繁,这些信息加密管不着。
  • 你得确认公钥是对方的。如果有人在中间把公钥掉了包,你以为在跟朋友加密通话,其实是在跟冒充者。所以 Signal 的“安全码”、PGP 的公钥指纹,最好通过另一个渠道核对一次。

二、密码管理器

人脑记不住几十个不同的随机密码,这不是意志力问题。能记住的密码,要么太简单,要么在到处重复用。密码管理器就是替你记的那个本子,你只需要记住一个主密码。

它的工作方式正好用上前面的知识:你的主密码在本地派生出一把钥匙,数据在本地加密,上传到服务器的是密文,服务商自己也打不开。这叫“零知识”。

选哪个

  • Bitwarden:开源,免费版就够用,全平台都有,还能自己架服务器。我查的时候,它的网页版在国内是间歇性受干扰的,但 App 和浏览器扩展用到的接口没被封,日常用问题不大。
  • KeePassXC(电脑)配 KeePassDX(安卓)或 Strongbox(iOS):数据库就是本地一个文件,不依赖任何公司。代价是多设备同步要自己解决,比如放进自己的网盘或者用 Syncthing。
  • 苹果自带的“密码”App:有苹果设备的话最省事,钥匙串是端到端加密的(第二篇讲过),还能存通行密钥和验证码。出了苹果生态就不太好用。

普通人用 Bitwarden 或者苹果自带的;不想把密码交给任何公司、愿意折腾的,用 KeePassXC。

主密码

  • 用几个不相干的词连成一长串,比 Aa123456! 这种“看起来复杂”的强得多,也好记。
  • 绝对不能和任何其他地方重复。
  • 给密码管理器本身也开两步验证。
  • 把恢复方式准备好。主密码忘了就是真的打不开了,服务商也帮不了你,这正是“零知识”的另一面。

用起来

  • 让它给每个网站生成随机密码,长度拉满,反正你一个都不用记。
  • 装浏览器扩展,自动填充。这里有个额外的好处:扩展只在域名对得上的网站填充,钓鱼网站做得再像,它也不会填,等于白送一道防钓鱼的保险。
  • 旧密码慢慢换,先换重要的:邮箱、银行、社交账号。

三、两步验证

密码再好也可能被钓鱼、被泄露,所以重要账号要加第二道锁。常见的几种,安全性从低到高:

方式评价
短信验证码最弱。号码可能被运营商收回或判违规注销(第六篇),也可能被人用补卡的方式抢走。能不用就不用。
验证器 App(TOTP)推荐。离线生成六位数字,不依赖号码,没网也能用。
通行密钥 / 硬件密钥最强。绑定域名,钓鱼网站从原理上就骗不到。

验证器 App

  • Ente Auth:开源,全平台,支持加密同步。
  • Aegis:安卓上的,F-Droid 能装(第三篇),本地加密,能导出备份。
  • 苹果自带的“密码”App:验证码和密码放一起,最省事。

有个取舍:验证码和密码放在同一个 App 里方便,但等于两道锁共用一个保险柜。日常账号放一起问题不大,邮箱和密码管理器本身这种最要紧的,建议分开放。

还有一件事年年都有人栽:换手机之前,先把验证器迁移或者备份好。不然新手机上哪个账号都进不去,比忘密码还麻烦。

通行密钥

通行密钥(Passkey)就是前面讲的非对称加密的直接应用:私钥存在你的设备里,永远不离开设备,网站那边只有公钥,登录时用指纹或面容解锁。因为它跟域名绑定,假网站拿不到任何东西。苹果、谷歌、微软的账号都已经支持了。

有条件就开,但别把它设成唯一的登录方式,设备丢了会很麻烦,留一个备用方式。

四、恢复码

开两步验证的时候,服务会给你一串一次性的恢复码。它的重要性和密码一样,但很多人随手就关掉了。

  • 打印出来,或者抄在纸上,跟重要证件放一起。
  • 别截图存在手机相册里,尤其别存在国内的云相册。
  • 也可以存进密码管理器,但别和对应账号的密码存在同一条记录里。

五、几个习惯

  • 邮箱是所有账号的根(第五篇),它的密码和两步验证要最严。
  • 定期看一眼密码管理器的“重复密码”“弱密码”报告,慢慢清理。
  • 别用“微信登录”“QQ 登录”去注册国外服务,那等于把两边的身份直接绑在一起。
  • 安全问题(母亲的姓氏、出生地、小学名字)随便填一串随机字符,存进密码管理器。那些答案在国内基本属于公开信息。
  • 收到“账号异常,请点击链接验证”的短信或邮件,一律不点。要处理就自己打开浏览器输网址。

就先这样

这篇的前半部分是概念,后半部分是操作。概念那部分如果你只记住一件事,那就记住:端到端加密的意思是钥匙只在两头,服务器打不开。下一篇比较各家聊天软件,用的全是这把尺子。

文中有写错或者过时的地方,欢迎从首页的联系方式告诉我。