SecOps人民免责声明:我在这方面是个有见识的业余爱好者。可能是我误会了什么。如有的话,请告知:)
在我的应用程序中,我正在使用KeychainItemWrapper做一些工作。我想以一种安全的方式存储用户的密码,而密钥链似乎就是这样做的。
不过,我有点困惑。我认为基本的密码安全性(以unix crypt()为模型)是这样的:
但是,似乎使用KeychainItemWrapper (或者整个密钥链API?)是为了将密码作为纯文本返回给程序。但是,这难道不是不安全吗?这个未加密的密码就在记忆里,等着别人来读,对吧?
问题:考虑到我以上对安全性的担忧,以及我的程序实际上不需要知道加密的值,在密钥链中存储密码的最佳模式是什么?或者我的恐惧是没有根据的,我应该停止担心,学会去爱(未加密的)密码链给我的?
发布于 2012-02-27 23:42:02
您混淆了两个概念(哈希和加密)。
当您需要验证某人是否知道密码时,您可以将其散列(w/ salt)并存储该哈希。然后,当有人试图作为该用户进行身份验证时,您向他们询问密码,使用相同的盐类对其进行散列,并与存储的值进行比较。这是理想的哈希是一个单向/不可逆的功能。因此,如果有人访问您的凭据存储,他们将一无所获,因为他们需要破解哈希(而现代算法,如密码/bcrypt是专门设计的,以使蛮力破解非常困难)。
然而,如果您需要能够实际恢复明文密码,您将加密密码而不是散列它。与密码散列不同,如果您知道密钥,加密是可逆的。
密钥链对存储在其中的任何内容进行加密,假设您需要在某个时候恢复实际数据(例如,如果我将我的Facebook密码放在密钥链中,当我需要使用它访问Facebook时,它将能够解密并提供实际密码)。密钥链被设计用来存储那些加密的秘密值,这样当您需要实际恢复原始值时,您可以。
https://stackoverflow.com/questions/9473900
复制相似问题