安全技术:密码哈希、JWT 与加密方法全解析
1. 密码安全基础
1.1 胡椒(Pepper)的使用
在处理密码安全时,胡椒是一个重要的概念。胡椒是在初始化结构体时传入的随机字符串切片中的一个随机元素。它无需存储在数据库中,其主要作用是增加潜在攻击者暴力破解的难度。例如,在我们的示例中,胡椒可使攻击者的暴力尝试次数增加五倍。
虽然可以增加胡椒的数量,但从基准测试来看,即使使用 1000 个胡椒,比较哈希值的时间也仅约为 1.5 毫秒。不过,我们需要注意这些基准测试是在单操作环境下进行的,而实际服务器会同时处理多个请求。而且,比较 1000 个胡椒的哈希值所需时间是比较 100 个的 10 倍,是比较 10 个的 100 倍。
生成一个哈希值需要 4634 纳秒,假设允许使用 63 个字符,密码长度为 11 个字符,那么需要生成的排列组合最多可达 6.2e19(即 62 万亿亿)个。对于单个 CPU 来说,暴力破解这么多哈希值大约需要 900 万年。
1.2 字典攻击
并非所有密码都很复杂,许多密码容易受到字典攻击。字典攻击不像暴力破解那样尝试所有可能的排列组合,而是集中攻击那些最有可能成功的密码。这些字典通常来自之前被泄露的密码数据库,因为人类使用密码具有一定的可预测性,常常会重复使用相同的密码。例如,密码 “HelloWorld2” 已经存在于包含 1400 万个其他密码的字典中,使用 “John the Ripper” 工具破解其加盐哈希值仅需 2.4 秒。
1.3 添加胡椒增强安全性
为了防止用户使用简单密码,我们可以制定良好的密码策略,如规定最小长度、大小写混合