加密散列函数如何使用?用法详细解析

2021年11月10日01:22:55 发表评论 950 次浏览

如何理解加密散列函数?现代密码学提供了广泛的工具和技术来保护传输中和静止的数据。加密散列函数属于基于分组密码的加密协议类型。它们在保护现代通信系统方面发挥着重要作用,并通过确保数据真实性作为入侵者的屏障。安全地保存和检索密码以及匿名加密交易是众多散列函数应用程序中的一小部分。

加密散列函数如何使用?本文提供了加密哈希函数的广泛概述和用法。我们解释了哈希属性、它们在各个领域的用法、可能的攻击和弱点,以及最重要的是增强哈希和改进哈希函数的方法。

什么是哈希函数?

加密散列函数原理:它是一个单向函数或唯一标识符,给定可变长度的输入,输出固定长度的哈希摘要。但是,输出的长度取决于散列算法。通常,最广为人知的算法具有 160-512 位的哈希长度。

但是为了将数据输出到固定长度,哈希函数首先接收一个预先设置的数据块,称为数据块。数据块的大小因一种算法而异,但对于一种算法总是相同的。例如,SHA-1 哈希函数接受 512 位的块大小,如果输入大小相同,则它只运行一次,即 80 轮。如果输入大小为 1024,算法将运行两次。

实际上,输入大小很少是 512 位的倍数。在这种情况下,我们采用一种称为填充的技术,将消息/数据划分为相同长度的数据块。使得该功能基于数据块的总数来执行并​​且一次处理每个数据块。它将第一个块的输出作为第二个块的输入,依此类推。因此,最终的哈希值是所有输出值的组合值。

散列与加密

散列和加密是独特且独立的过程,具有自己的一组功能、属性和过程。

如何理解加密散列函数?加密是一种双向/可逆过程,因为它结合了使用共享或数学上相关但不相同的公钥和私钥的密钥。与加密不同的是,散列很容易计算,而且很难还原为原始明文。

散列提供数据的完整性。另一方面,加密使数据保密。

哈希的好处

尽管散列不是加密,但它是一种密码学形式,可提供:

  • 密码保护
  • 数据完整性/文件验证
  • 数字签名,以及
  • 病毒签名。

密码保护

每当用户输入密码进行身份验证时,都会将密码哈希与计算机中包含系统哈希的文件进行比较。系统只有在认证成功后才允许访问。例如,Windows 将密码哈希存储在安全帐户管理器 (SAM) 文件中,而 Linux 将密码哈希存储在 /etc/shadow 文件中。

加密散列函数如何使用?文件验证

同样,一些网站共享一个哈希值来验证下载软件的完整性,以确保它没有损坏或在下载过程中没有人篡改文件。

例如,用于下载 Linux Mint 20.2 “Uma”-Cinnamon(64 位)ISO 映像的网站在 sha256sum.txt 文件中共享其 SHA256 哈希值。为了验证镜像的完整性,cd进入下载的镜像目录并生成如下 SHA256 和:

ubuntu@ubuntu :~$ sha256sum -b *.iso

sha256sum.txt文件中包含根据不同的桌面发布了四个哈希值。将生成的哈希值与文件中的 Cinnamon 桌面 ISO 映像哈希值进行比较,以验证其完整性是否匹配;这意味着 ISO 映像已准备好使用。

在 SHA256 之前,MD5 哈希算法用于验证下载文件的完整性,但它不再是真正的加密哈希算法,因为它不具有抗冲突性(稍后会详细介绍)。

数字签名

数字签名通过在原始消息中附加加密的消息摘要来验证发件人的身份。发件人使用私钥加密以确保不可否认性,而散列可防止数据篡改并提供完整性,即数字签名=发件人的私钥(hash(message))

接收方使用发送方的公钥解密消息摘要,并获取原始消息的散列值与解密后的散列值进行比较。

病毒特征

防病毒解决方案使用各种方法来识别恶意软件;其中之一是哈希匹配。他们使用可执行文件的一部分或块来创建哈希,并将其与存储在其数据库中的恶意软件的哈希进行比较。

哈希的属性

使散列函数在公钥密码学中发挥关键作用的一组属性如下:

  • 一个好的散列算法会返回一个固定大小/长度的散列值,而不管输入大小。
  • 它提供了预映像阻力,这意味着不可能通过反转散列来恢复原始值。
  • 强大的散列算法可确保抗碰撞性。也就是说,没有两个不同的输入可以有相似的输出。
  • 输入的微小变化会引起输出的显着变化。哈希的这一属性有助于确保文件/数据的完整性。
  • 加密散列函数的计算速度是另一个理想的特性。但是,它是主观的,并且会因目的和应用领域而异。

哈希模式

加密散列函数原理:最著名的哈希函数是消息摘要算法 (MDA)、安全哈希算法 (SHA)、NTLM 等。

  • MD5: MD5 是消息摘要算法的第五个版本,输出长度为 128 位。它是最广为人知的散列算法,直到它变得容易发生碰撞攻击(稍后会详细介绍)。例如,在安全哈希算法 (SHA) 之前,MD5 哈希算法是最常用的文件完整性验证方法。
  • SHA:安全散列算法是由 NSA 引入的。它是一套算法,包含四个变体函数 SHA-224、SHA-256、SHA-384 和 SHA-512。每个变体名称代表其输出的大小。这是一种更安全的散列算法,因为到目前为止还没有已知散列算法的妥协。
  • NTLM: NT LAN Manager 散列算法用于散列密码。NTLM 使用循环冗余检查和消息摘要,但它唯一的缺点是它基于 RC4 密码,与新的加密协议相比,AES 和 SHA-256 已成为成功攻击的目标。NTLMv2 通过使用 HMAC-MD5 128 位系统解决了这些问题。

哈希的坏处

如前所述,大块大小的散列可以减缓攻击者的速度,对加密散列进行逆向工程可能很困难,但并非不可能。攻击者所需要的只是他们可以通过使用快速硬件以及创建冲突或旁道攻击轻松管理的时间。本节讨论散列利用的一些方法。

冲突
当两个输入返回相同的输出值时,会发生哈希冲突。可靠的散列函数旨在提供抗碰撞性。但由于鸽巢效应,这是不可避免的。根据鸽巢效应,对于任何大小的输入,都有一定数量的输出值。这意味着,由于输入总是多于输出,因此碰撞是不可避免的事件。

彩虹表
如何理解加密散列函数?如前所述,操作系统不会以明文形式存储密码。因此,彩虹表是预先计算的数据库或查找表,将哈希映射到明文密码。例如,Crackstation网站提供了一个庞大的数据库,用于在不加盐的情况下破解密码的哈希值。然而,彩虹表交易时间来破解具有大量存储空间的哈希。

与具有哈希计算问题的自动试错尝试相比,彩虹表对抗蛮力的优点是简单的搜索和比较操作。此外,它不需要精确的密码匹配,这意味着如果哈希与任何密码/短语匹配,系统允许身份验证。

John the Ripper
John 是一个强大的多功能工具,可以帮助破解哈希。它类似于使用单词列表或字典来计算散列和比较的自动字典攻击。因此,它允许对一系列哈希模式进行暴力破解。wordlist 的一个例子是一个rockyou.txt 文件,其中包含来自rockyou.com 网站上的漏洞的密码。该词表可从Github SecLists下的/Passwords/Leaked-Databases 获得

加密散列函数如何使用?破解散列的最简单方法是使用带有格式选项的john命令来指定散列类型、单词列表的路径以及具有散列值的文件。在 Kali Linux 中,rouckyou.txt 文件的路径是/usr/share/wordlists

ubuntu@ubuntu :~$ john --format= --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Pass The Hash
Pass-the-hash 是一种凭证盗窃,具有横向特权升级的潜力。尽管这种攻击可能发生在 Linux/Unix 系统上,但它在 Windows 中更为普遍。Windows 通过匹配输入密码的哈希值来验证合法用户,这是静态的,只有在密码更改时才会更改。此外,密码在 Windows 的各个位置都可用,例如 SAM 和本地安全授权子系统 (LSASS) 进程内存等。

因此,攻击者操纵 NTLM 安全协议的质询和响应模型,允许他们将自己验证为有效用户。攻击者转储目标系统的哈希值并使用“pass-the-hash”工具来冒充真实用户。因此,攻击者不需要输入或暴力破解密码或对哈希值进行逆向工程。从此处查找有关攻击的更多详细信息。

生日攻击
该攻击属于蛮力攻击类,基于概率论中的生日悖论。它使用生日问题以相同的加密散列协议发送两条不同的消息以引起冲突。攻击通常旨在操纵通信。此处提供了有关生日攻击的更多详细信息。

上电哈希

如何理解加密散列函数?有多种方法可以防止对散列的攻击并限制它们不受加密散列函数的影响。

Salted Hashes
加密散列函数原理:Salting 是将随机生成的数据 (salt) 添加到哈希函数的输入的过程。该过程有助于防止彩虹表攻击。即使密码相似,用户也可以在创建生成不同输出的哈希之前在密码的开头或结尾包含盐值。此外,用户可以将盐公开。

密钥散列
HMAC 是密钥散列的一个示例,它使用加密密钥和散列函数来改进消息验证代码 (MAC)算法的局限性。它有助于同时实现信息的机密性和完整性。

自适应散列函数
自适应散列函数旨在重申其内部工作,顾名思义,用户可以调整迭代次数。Key-stretching 是一种将弱密钥作为输入,对其进行处理,并迭代该过程以输出强大的大尺寸密钥的技术。该过程可以将密钥大小增加到 128 位,这对于暴力攻击是困难的。PBKDF2 和 bcrypt 是自适应哈希函数的示例。

结论

加密散列函数如何使用?本文提供了加密哈希协议的广泛概述。它演示了如何验证文件完整性,并概述了如何通过开膛手约翰工具破解密码哈希。我们还讨论了一系列攻击和措施,以通过加盐、密钥散列和自适应散列函数生成不可破解的散列。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: