密码散列中的漏洞

vulnerabilities in password hashing

附加的Python代码接收输入字符串(例如,用户的密码)的散列函数,并使用MD5.What漏洞生成156位散列,使密码散列不合适可能存在在这段代码中。

#
from Crypto.Hash import MD5
import binascii

def hash(msg):

# pad message to 16 bytes
if len(msg) < 16:
    msg = msg + (16 - len(msg)) * 'A'
    
# pick first 16 bytes
msg = msg[:16]

# converts message to upper case
msg = msg.upper()

# create MD5 objects
h1 = MD5.new()
h2 = MD5.new()

# hash two parts of message separately
h1.update(msg[:8])
h2.update(msg[8:16])

# concatenate the two hashes
h = h1.digest() + h2.digest()
return h

# print message
print(binascii.hexlify(hash("Hello, this is a great passphrase, and I am 
wondering if anyone can crack it")))

Windows 中有一个名为 LM (LAN Manager) 的密码处理协议,它与我们在这里看到的有类似的缺陷。我有点想解决一个你应该自己做的测验问题......但既然我喜欢它,谁在乎呢。

从顶部开始:

  1. 填充可以。
  2. 选择前16个字节是不行的。你永远不应该减少熵。
  3. 一刀两断不行。暴力破解 8 个字符比暴力破解 16 个字符容易得多。
  4. 大写不行。再次减少熵。
  5. MD5 不再适用于加密目的。

我想就是这样了。