|
|
1
4
您的问题是如何使用密码作为身份验证机制,以及如何使用哈希将这些密码安全地存储在数据库中。正如您可能已经知道的那样,目标是能够在不存储这些密码的情况下验证密码,我会在数据库中清除文本。在此背景下,我试着回答你的每个问题:
散列密码的基本思想是攻击者知道散列算法,并且可以访问散列和salt。通过为每个密码选择不同的加密强散列函数和适当的salt值,猜测密码所需的计算工作量非常大,以至于成本超过了攻击者猜测密码时可能获得的收益。所以为了回答您的问题,隐藏哈希函数并不能提高安全性。
您应该始终使用一个著名的(并且很强的)哈希算法,并且反向工程这个算法是没有意义的,因为您的代码中没有隐藏的东西。如果你不是故意的 逆向工程 但实际上 颠倒 然后,是的,密码受到逆转散列函数(或猜测与散列值匹配的密码)的复杂性的保护。好的散列函数使得这非常困难。
一般来说,这是正确的,但是当涉及到通过将密码存储为哈希来保护密码时,您仍然应该假设攻击者具有对哈希的完全访问权,并通过选择适当的哈希函数和使用salts来相应地设计您的系统。
密码散列保护的基本攻击是当攻击者访问您的数据库时。无法从数据库中读取明文密码,并且密码受保护。 更复杂的攻击者可以生成可能的密码列表,并使用与您相同的算法计算散列值。然后,他可以将计算出的哈希值与存储的哈希值进行比较,如果找到匹配项,他就拥有有效的密码。这是一种暴力攻击,通常假定攻击者对您的数据库具有“脱机”访问权限。通过要求用户使用长而复杂的密码,“强力”密码所需的工作量显著增加。 当攻击者不想攻击一个密码,而是要攻击数据库中的所有密码时,可以预先计算一个大的密码表和哈希值对,并使用所谓的哈希链进一步改进。彩虹表是这个想法的一个应用程序,可以用于在不显著增加工作量的情况下同时强制执行许多密码。但是,如果使用一个唯一的salt来计算每个密码的散列值,则预计算的表将变得无用,因为它对于每个salt都是不同的,不能重用。 综上所述:模糊安全并不是保护敏感信息的好策略,现代密码学允许你不必借助模糊来保护信息。 |
|
|
2
6
密码算法的安全性总是在其秘密输入中。合理的密码分析基于这样一个假设,即任何攻击者都知道您使用的算法。良好的密码散列是不可逆的和抗冲突的。这意味着仍然有很多工作要做,从散列到生成散列的值,不管您是否知道应用的算法。
正如我在评论中指出的,这些措施防范的攻击。首先,知道密码可能会导致授权去做数据库内容所建议的以外的事情。第二,这些密码可能会在其他地方使用,而您会因为闯入而泄露用户的密码,从而使用户面临风险。第三,通过散列,内部人员无法利用对数据库的只读访问(受审核次数较少等影响)来冒充用户。 字典和彩虹表是加速哈希反转的技术。 |
|
|
3
3
当有人从不安全站点获取密码时,将其反转,然后尝试访问您的银行/ PayPal等帐户。这种情况一直在发生,而且许多人仍然在各地使用相同的(通常是弱的)密码。 作为旁注,根据我读到的, key derivation functions (pbkdf2/scrypt/bcrypt)被认为更好/更安全( #1 ,请 #2 )比加密人的纯盐sha-1/sha-2哈希还要多。 |
|
|
4
1
如果你只有一个散列,没有盐,那么一旦他们知道你的数据(和算法),他们就可以通过彩虹表查找获得你的密码。如果你有一个哈希和一个salt,它们可以通过消耗大量的CPU周期和构建一个彩虹表来获取你的密码。 如果您的salt对于所有数据都是相同的,那么它们只需要一次消耗大量的CPU周期来构建表,然后就拥有了所有的密码。如果您的salt不总是相同的,那么它们需要在CPU周期中燃烧,为每个记录生成一个独特的彩虹表。 如果salt足够长,那么它们需要的CPU周期将变得非常昂贵。 当然,如果您知道您的数据安全被破坏了,那么您需要立即重置所有密码,因为据您所知,攻击者愿意花费这段时间。 |
|
|
5
1
这可能是一个真正专注的对手所需要的。这个答案很大程度上取决于数据的价值,这将告诉你对手有多积极。信用卡号码将是非常有价值的,犯罪攻击者似乎有足够的时间和帮凶做他们的肮脏工作。有人知道一些坏人向僵尸网络分发密钥解密任务!
如果他们能够访问您的源代码和所有数据,那么问题将是“您首先是如何将密钥加载到服务器的内存中的?”如果它嵌入到数据或程序代码中,游戏就结束了,你输了。如果它是在机器启动时由操作员手动键入的,它应该和您对操作员的信任一样安全。如果它存储在HSM*中,它应该仍然是安全的。 如果它们具有对正在运行的机器的根级别权限访问权,那么它们可能会触发并恢复一个内存转储,该转储将显示密钥。
这是真的。但是,还有其他方法可以帮助提高安全性。 对于类似银行的保护,即通过安全和行业审计的保护,建议您使用*硬件安全模块(HSM)来执行密钥存储和加密/解密功能。商业实力的高铁,我们正在考虑成本10万美元或以上,每一个,取决于容量。但我见过插入PCI插槽的硬件加密卡,它的成本要低得多。 HSM背后的想法是,加密发生在一个安全、加固的平台上,没有秘密密钥,任何人都无法访问该平台。它们中的大多数都有带有入侵检测开关、跳闸线、环氧树脂芯片和存储器的机柜,如果被篡改,它们会自动销毁。即使是合法所有者或工厂也不能在没有授权加密密钥集的情况下从HSM中恢复数据库密钥(通常使用智能卡)。 对于非常小的安装,HSM可以像智能卡一样简单。不过,智能卡并不是高性能的加密设备,因此您不能每秒通过它们抽取超过一个解密事务。使用智能卡的系统通常只存储根密钥,然后解密智能卡上的工作数据库密钥并将其发送回数据库访问系统。如果攻击者可以访问正在运行的内存,或者如果攻击者可以嗅探进出智能卡的USB流量,这些数据仍将生成工作数据库密钥。 我还没有让TPM芯片工作的经验,但理论上它们可以用于安全地在机器上存储密钥。同样,当密钥加载到内存中时,仍然无法防御攻击者进行内存转储,但他们会阻止包含代码和数据的被盗硬盘泄露其秘密。 |
|
|
6
1
哈希不能反转。从概念上讲,将散列看作是将要散列的值作为随机数生成器的种子,然后将其生成的第500个数作为种子。这是一个 可重复的 过程,但它不是 可逆的 过程。 如果将哈希密码存储在数据库中,当用户登录时,将其密码从输入页提取到登录页,对其应用相同的哈希,然后将该操作的结果与存储在数据库中的结果进行比较。如果匹配,则用户键入了正确的密码。(或者,理论上,他们可能键入了一些哈希值相同的东西,但实际上,您可以完全忽略这一点。) salt的目的是,即使用户拥有相同的密码,您也无法分辨,而且还有许多其他与此想法等效的东西。如果用户的密码是“secret”,salt是“abc”,那么您可以散列“secret abc”而不是散列“secret abc”,并将结果存储在数据库中。您还可以存储盐,但这是完全安全的存储--您无法从中找出任何有关密码的信息。 保护散列密码和salt的唯一原因是,如果攻击者有散列密码和salt的副本,他可以在自己的计算机上脱机测试密码,而不是反复尝试登录到您的服务器,您可能会在三次尝试或类似尝试后将其锁定。即使你不锁定他,在本地测试也比等待网络往返要快得多。 |
|
|
7
0
( 操作 )
( 讨论 ) 这不是一个游戏,除了攻击者。研究这些术语:
那么告诉我们(作为对你的思想挑衅)我们如何保护谁?一方面,这是无辜的VIS-A-VIS入侵者的努力,另一方面,如果系统的一部分出现故障,它是数据恢复。 TCP/IP等协议的初衷被宣传为一种战争武器、攻击下的生存能力,这是一个有趣的实验。好吧,所以密码是散列的-没人能恢复它们… 其中,duh,包括系统的所有者和操作员。 因此,您构建了一个强大的记录锁定工具来实现关键控制,然后政治压力迫使使用Brand-X工具。 您可以阅读《联邦信息安全管理法》(Fisma),当您阅读该法案时,某个政府实体的整个磁盘可能被盗或受到损坏。 如果磁盘上有您的个人身份信息,您将如何保护该磁盘? 我可以从马丁利弗塞奇和杰德特斯的口径告诉你,他们会注意的。 |
|
|
8
-1
以下是我对你的看法:
|
|
|
9
-2
当散列密码时,这是一种方法。因此,即使您有大量的CPU周期需要消耗,也很难获得密码。 |
|
|
J P · Mac GPGSuite的密码过期 1 年前 |
|
|
Jeevan Gopinath · 在哪里保存用户登录的哈希密码? 2 年前 |
|
|
Jan · 密码salt是否应存储在数据库中 2 年前 |
|
|
Batman 21 · 在redis服务器/客户端上添加密码 3 年前 |
|
|
jsc · Powershell创建密码过期报告 8 年前 |