Files
Sec-Interview/Chapter15/15-1.md
T
2025-09-25 03:56:33 +08:00

26 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### LM Hash 加密算法过程
LM Hash 的整个加密过程可以分解为以下几个步骤:
1. **密码转换:**
- 首先,用户的**明文密码**会被转换为大写字母。这是 LM Hash 最大的安全漏洞之一,因为它会直接忽略密码中所有的大小写信息,大大降低了密码的复杂度。例如,“Password123”和“password123”在经过这一步处理后,都变成了“PASSWORD123”
- 处理后的密码字符串,其长度**不能超过 14 个字符**。如果密码长度大于 14,则只取前 14 个字符
2. **密码填充与拆分:**
- 在将密码用于下一步加密之前,需要对它进行填充。如果处理后的密码长度小于 14 个字符,则会在其末尾使用**空字符(`\x00`)**进行填充,使其总长度达到 14 个字节
- 填充后的 14 字节密码会被拆分为两个**7 字节**的字符串
3. **密钥生成:**
- 接下来,这两个 7 字节的字符串会被分别转换为两个 DESData Encryption Standard)密钥
- 转换过程是这样的:每个 7 字节的字符串会被扩展为一个 8 字节的密钥,其中原始 7 个字节的每个字节的低 7 位用于组成密钥的 56 位有效密钥,剩下的 16 位则作为奇偶校验位
4. **DES 加密:**
- 这两个 56 位的 DES 密钥会分别用来加密一个固定的字符串,这个字符串是**“KGS!@#$%”**。
- DES 算法会以**ECBElectronic Codebook)模式**对这个字符串进行加密
5. **结果拼接:**
- 最后,将两个 DES 加密后得到的 8 字节结果**拼接**起来,就得到了一个 16 字节(32 个十六进制字符)的 LM Hash
**LM Hash 的弱点**
通过上述步骤可以看出,LM Hash 的设计存在多个严重的安全缺陷,这也是为什么它早已被淘汰的原因:
- **不区分大小写:** 这使得攻击者可以忽略大小写进行暴力破解,显著降低了密码空间的复杂度
- **固定填充和拆分:** 无论密码长度如何,最终都是两个 7 字节的字符串。这意味着任何长度小于 8 个字符的密码,其第二个 7 字节的字符串都是相同的(全部由空字符填充)。攻击者只需破解前半部分,就可以得到密码
- **使用弱算法 DES** DES 算法本身已经很脆弱,并且这里的加密是针对一个固定的、公开的字符串“KGS!@#$%”,这为攻击者提供了巨大的便利,因为他们可以预先计算出所有可能的哈希值,然后进行**彩虹表攻击(Rainbow Table Attack**