安全 · 进阶

加密:什么时候、在哪里、怎么不出错

一句话: 用成熟的库和它们的现代默认值,什么都不要自己发明——几乎所有加密失败都是用法上的失败。

三种状态

传输中。始终加密,包括内部服务之间。内网不是安全区。

静态存储。磁盘、备份和对象存储。在大多数云服务里这是一个配置项,不是一个项目。

字段级。用于特别敏感的数据,这样即便拿到数据库访问权也看不到。代价是:没法方便地按它检索。

密钥管理才是关键

密钥存在密钥管理服务里,而不是放在数据旁边。明确的权限、周期性轮换和访问日志。用一把就放在同一台服务器上的密钥去加密,对已经进到那台服务器的攻击者几乎没有帮助。

常见错误

过时的加密模式、重复使用随机值、用会泄漏时间信息的方式比较密文字符串,以及给密码用快速哈希。这些都能通过使用高层接口而不是底层原语来避免。

深入一层

按数据类型记录:是否加密、在哪一层、谁能解密、保留多久。这份文档在任何审计里反正都要用到,而且它通常还会顺带揭示出两个没人想到过的地方。