什么是密钥扩展?如何确保密码安全?

译者 | 陈峻
审校 | 重楼
为了访问自己的数字账户,我们通常需要用到密码或口令 。不过,正如现实生活中开锁的钥匙可能并不总是牢靠一样,并非所有的密码都是安全的 。为了加强在线防御,安全专家开发了一系列技术和方法 , 来提高密码的安全性 。这些方法包括:散列(Hashing)、加盐(Salting)、掺杂(Peppering)和密钥扩展(Key Stretching)等 。下面,让我们来探讨一下密钥扩展的重要性,以及它是如何大幅提高在线安全性的 。

什么是密钥扩展?如何确保密码安全?

文章插图
什么是密钥扩展?作为一种加密技术,密钥扩展可被用于增强密码和口令的安全性,尤其是在原始密码的随机性或长度不足以抵御各种攻击(如:蛮力攻击或字典攻击)的情况下 。总体而言,密钥扩展会通过对密码或密钥进行多次散列处理,来实现更强大的安全性 。
密钥扩展也被称为密钥强化,通常是将一个相对较弱、较短的密码或加密密钥 , 应用某种加密函数或算法,以生成一个更强且更长的密钥 。新生成的密钥输出又作为后续的输入,如此反复进行,直到能够输出所需的密钥 。从根本上说,此举的目的在于:使得攻击者即使获得了原始密钥的散列或加密版本 , 也需要耗费大量的计算成本和时间,才可能恢复原始密钥 。
目前,密钥扩展在在线账户、金融交易、以及数据保护等具有高安全性要求的应用中,发挥着至关重要的作用 。它是确保已存密码和加密密钥安全性的重要组成部分,并最终可以保障用户账号与数据可信 。
密钥扩展是如何工作的?为了理解密钥扩展是如何将弱密码转换成强大安全的密码,让我们来看一个简单的例子:想象一下 , 您有一个类似"iloveyou"这样再普通不过的密码 。那么对于攻击者来说,该密码可能都称不上什么秘密 。他们很容易通过暴力破解单词表和字典的方式 , 打开这扇“大门” 。而事实上,攻击者的确只需 30 秒,就能破解并访问该账户 。
而密钥扩展会对这个易受攻击的密码进行散列处理,以创建更长、更复杂的密码 。例如:"iloveyou"会变成"e4ad93ca07acb8d908a3aa41e920ea4f4ef4f26e7f86cf8291c5db289780a5ae" 。不过,整个扩展过程并未就此结束 。
接着 , 这个新密码通过再次散列,就变成了:"bc82943e9f3e2b6a195bebdd7f78e5f3ff9182ca3f35b5d415cf796ab0ce6e56" 。
而将其继续做一次散列,就会得到:"46e95d6374c00c84e4970cfe1e0a2982b2b11b1de9343a30f42675a2154a28f5" 。以此类推,您可以根据需求执行多次此类操作 。
那么,我们是否需要自己从头开始写代码 , 以实现整个过程呢?显然不需要 。目前,业界已有一些用于密钥扩展的代码库,可以为您完成此类繁重的工作 。其中 , 较为典型和流行的密钥扩展算法有:PBKDF2、scrypt、Argon2和bcrypt 。其中当属bcrypt和PBKDF2最广为人知 。
具体而言,bcrypt采用blowfish密码进行多轮散列,使之成为保护密码安全的可靠选择 。而PBKDF2(Password-Based Key Derivation Function,基于密码的密钥推导函数2)是另一种增强密钥或密码安全性的可靠选择 。这些工具都可以确保即使是最微弱的密码,也能够得到极大限度的屏蔽,以防止未经授权的访问 。
密钥扩展与加盐密钥扩展和加盐都是密码安全领域的重要技术,它们在增强密码强度等方面 , 各自发挥着独特的作用 。
如上所述,密钥扩展主要是对密码进行多轮散列处理,从而有效地将弱密码转化为更安全的版本 。因此,执行的次数越多 , 密码就越安全 。而密码加盐则提供了额外的一层防御 。它需要在应用散列过程之前,在密码中添加一串不同的字符 , 即,通过增加复杂性 , 来提高密码的强度 。
在实际中,这两种技术可以被协同使用,以增强密码的整体强度 。不过 , 需要注意的是,加盐并非事后补救之法,而应当从一开始便融入其中 , 从而在弱密码进行散列处理之前,就对其进行增强 。从本质上讲,密钥扩展和加盐就像一个协作团队,共同为您的敏感信息提供额外的保护 。
密钥扩展的重要性密钥扩展通常被用于基于密码的加密和身份验证系统 。它有助于降低弱口令或易猜密码的风险性,使得攻击者即使获得了原始口令的散列或加密版本,也很难恢复其经历了高昂计算代价的原始信息 。在诸如:保护已存密码和加密密钥等各种实际应用场景中,我们时常可以用到它 。下面,我为您总结了密钥扩展的4项典型安全功能:


推荐阅读