哈希
加密哈希:一种用于验证完整性、存储密码验证器和为文件生成指纹的单向函数。涵盖常见用途、陷阱与检测。
快速解答
安全哈希产生固定且单向的摘要,用于完整性和密码存储;请使用现代算法(SHA-256+)以及针对密码的密钥派生算法(如 Argon2),并且永远不要尝试逆向哈希。
定义
哈希通过单向函数将输入映射为固定长度的摘要;它用于验证完整性以及存储验证器(例如密码哈希),而无需存储明文秘密。
它是什么
哈希函数接收任意长度的输入并产生固定长度的摘要。它是单向的:无法从摘要还原出输入。它是确定性的:相同的输入总是产生相同的摘要,这使其适用于完整性验证和验证器存储。
为什么重要
哈希支撑着软件完整性(将下载的文件与厂商发布的摘要进行比对)、密码存储(存储验证器而非明文秘密)以及钓鱼/IOC 检查(对二进制文件做哈希以识别已知恶意软件)。有缺陷或弱哈希会危及所有这些场景。
它如何工作
- 抗碰撞性(Collision resistance):两个不同的输入不得产生相同的摘要。首选 SHA-256;较旧的 MD5/SHA-1 是弱算法。
- 密码哈希 ≠ 快速哈希:对于密码,应使用带盐的慢速密钥派生函数(Argon2id、scrypt、bcrypt、PBKDF2)以抵抗离线猜测(参见
guides:password-security)。 - 用途:文件/痕迹指纹识别、完整性清单和密码验证器。不要在没有盐 + 慢速 KDF 的情况下将普通哈希用作密码验证器。
检测
- 策略扫描标记 MD5/SHA-1 的使用。
- 下载文件的计算摘要与厂商发布值不匹配 → 视为已被篡改。
- 在威胁情报中(IOC 查询)将痕迹与已知恶意软件哈希进行比对。
缓解
- 在完整性场景中统一采用 SHA-256+;在 CI 中拒绝弱算法。
- 仅以加盐的慢速 KDF 验证器形式存储密码;失陷后轮换。
- 为发布物发布并核验官方校验和。
调查
使用哈希校验器工具确认痕迹是否匹配已知良好或已知恶意的摘要,然后转向其来源和父进程。参见 guides:tool-hash-guide 和 guides:investigate-malware。