gpt4 book ai didi

cocoa - 使用钥匙串(keychain)本质上是不安全的(取回元素时?)

转载 作者:行者123 更新时间:2023-12-03 16:58:43 25 4
gpt4 key购买 nike

SecOps 人员免责声明:我是这方面的业余爱好者。我可能误解了什么。如果是这样,请指教:)

我正在我的应用程序中使用 Keychain/KeychainItemWrapper 进行一些工作。我想以安全的方式存储用户的密码,钥匙串(keychain)似乎就是实现这一点的方法。

但是,我有点困惑。我认为基本的密码安全性(以 unix crypt() 为模型)是这样的:

  1. 使用加密算法加密并存储用户指定的密码,该算法每次都会给出相同的结果(使用相同的盐)
  2. 稍后,当用户输入密码时,也对其进行加密
  3. 比较两个加密字符串。他们平等吗?密码必须相同

但是,使用 KeychainItemWrapper(也许是整个 Keychain API?)似乎是为了将密码以纯文本形式返回给程序。然而,这不是没有安全感吗?未加密的密码只是保存在内存中,等待有人读取,对吗?

问题:考虑到我对安全性的上述担忧以及我的程序实际上不需要知道加密值的事实,在钥匙串(keychain)中存储密码的最佳模式是什么?或者我的担心是没有根据的,我应该停止担心并学会喜欢钥匙串(keychain)给我的(未加密的)密码?

最佳答案

您混淆了两个概念(散列与加密)。

当您需要验证某人是否知道密码时,您可以对其进行散列(带盐)并存储该散列。然后,当有人尝试以该用户身份进行身份验证时,您会要求他们提供密码,使用相同的盐对其进行哈希处理,然后与存储的值进行比较。这是理想的,因为散列是一种单向/不可逆的函数。因此,如果有人访问您的凭证存储,他们将一无所获,因为他们需要破解该哈希(并且像 crypt/bcrypt 这样的现代算法是专门为使暴力破解变得非常困难而设计的)。

但是,如果您需要能够实际恢复明文密码,则需要对密码进行加密而不是对其进行哈希处理。与加密散列不同,加密是可逆的,假设您知道 key 。

钥匙串(keychain)会加密您存储在其中的任何内容,并假设您需要在某个时候恢复实际数据(例如,如果我将我的 Facebook 密码放入钥匙串(keychain)中,它将能够解密并提供实际密码,当我需要使用它来访问 Facebook 时)。钥匙串(keychain)旨在加密存储这些 secret 值,以便当您需要实际恢复原始值时可以。

关于cocoa - 使用钥匙串(keychain)本质上是不安全的(取回元素时?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com