安全 · 进阶
加密:什么时候、在哪里、怎么不出错
一句话: 用成熟的库和它们的现代默认值,什么都不要自己发明——几乎所有加密失败都是用法上的失败。
三种状态
传输中。始终加密,包括内部服务之间。内网不是安全区。
静态存储。磁盘、备份和对象存储。在大多数云服务里这是一个配置项,不是一个项目。
字段级。用于特别敏感的数据,这样即便拿到数据库访问权也看不到。代价是:没法方便地按它检索。
密钥管理才是关键
密钥存在密钥管理服务里,而不是放在数据旁边。明确的权限、周期性轮换和访问日志。用一把就放在同一台服务器上的密钥去加密,对已经进到那台服务器的攻击者几乎没有帮助。
常见错误
过时的加密模式、重复使用随机值、用会泄漏时间信息的方式比较密文字符串,以及给密码用快速哈希。这些都能通过使用高层接口而不是底层原语来避免。
深入一层
按数据类型记录:是否加密、在哪一层、谁能解密、保留多久。这份文档在任何审计里反正都要用到,而且它通常还会顺带揭示出两个没人想到过的地方。