linux - 如何在登录时比较 MD5 哈希值?

标签 linux cryptography md5

CentOS(即 v6.3)等 Linux 发行版使用特定的启动管理器,例如“GRUB”,其中包含一个 .conf 文件,您可以在其中编辑您的用户信息,例如您的密码等。

密码必须使用 MD5 加密(即:密码 --md5 kw485/fgf$&e),这有点令人困惑。

假设MD5是一种单向加密方式,加密同一个字符串总会得到一个新生成的字符串。

系统如何比较这两个密码,因为它们永远不会匹配?

这是一个例子:

grub> md5crypt
md5crypt
Password: hello
hello
Encrypted: $1$95Uz30$X/u7PX4F5GtEOsMguDDq10
grub> md5crypt
md5crypt
Password: hello
hello
Encrypted: $1$H8Uz30$LwAkSMZBYC07zJbx3lIVa1

如您所见,我们插入了相同的字符串并得到了两个不同的结果,假设这就是登录场景应该发生的方式,例如:

$ login user
password : hello
  • hello 将被翻译成 $1$H8Uz30$LwAkSMZBYC07zJbx3lIVa1 散列 grub.conf 中的密码是 $1$95Uz30$X/u7PX4F5GtEOsMguDDq10 登录尝试失败。

最佳答案

哈希

如您所说,用户在设置密码时输入的密码存储为哈希值。不错hash function是:

  • 不可能恢复
  • 抗冲突(很难找到两个输入,导致相同的输出)
  • 但如果给定相同的输入,则总是产生相同的输出。

假设您的操作系统使用 md5 并以您的密码为例 hello。 hello 的 md5 散列是

echo -n hello | md5sum
5d41402abc4b2a76b9719d911017c592

因此操作系统将存储 5d41402abc4b2a76b9719d911017c592

如果用户再次登录,操作系统将询问他的密码,并使用相同的函数再次对他的输入进行哈希处理,在我们的示例中为 md5。 如果输入的密码正确,则哈希匹配。因此,操作系统知道输入了正确的密码,而实际上并不知道密码

但是 5d414... 并不是 GRUB 显示给您的字符串,因为实际上它要复杂一些。

假设攻击者获取了您密码的哈希值。 为了防止攻击者获得您的真实密码,操作系统通常会在计算哈希值之前为您的密码添加一个随机值。此值称为 salt ,它以未加密的形式与用户密码的哈希一起存储。盐渍防precomputation attacks ,攻击者会预先计算一个常用密码列表,存储哈希值,然后简单地将窃取的哈希值与该列表进行比较。 但是加盐并不能阻止攻击者暴力破解您的密码,方法是尝试将可能的密码列表与加盐值一起作为散列函数的输入,并将结果与​​窃取的散列进行比较。

因此在您的示例中,您第一次输入 hello 时,GRUB 将加盐 95Uz30 添加到您的密码中

openssl passwd -1 -salt 95Uz30 hello
$1$95Uz30$X/u7PX4F5GtEOsMguDDq10

生成的字符串正是 GRUB 向您显示的内容,但它不仅仅是散列,它是

$x$salt$hash

在哪里

此格式并非特定于 GRUB,/etc/passwd/etc/shadow(请参阅 shadow password)中的密码以相同的方式存储。

关于linux - 如何在登录时比较 MD5 哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52793502/

相关文章:

php - MD5 在 SQL 数据库和 PHP 脚本中的作用不同

android - 如何从 Java 的 keytool 获取 MD5 指纹,而不仅仅是 SHA-1?

c++ - 将 Gsoap Src 文件编译到我的项目中

linux - 如何在 chroot jail 中运行命令而不是 root 并且没有 sudo?

c# - 将signingCertificateV2属性添加到SignedCms

java - 更改加密文件的 AES key 而不解密/重新加密它

linux - 如何在 visual studio 跨平台 cmake 项目中的远程 linux 主机上设置环境变量

c - fork() 语句中的进程数量(包括程序)

azure - 重新实现 uniqueString() 哈希 ARM 函数

r - R-Librarys 中 MD5 哈希的差异 - 序列化对象的 MD5