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