Ios Pincode加密,我做错什么了吗?

Ios Pincode加密,我做错什么了吗?,ios,security,hash,keychain,Ios,Security,Hash,Keychain,我使用以下方法加密(实际上是散列)用户将在iOS应用程序中输入的pincode(4-6个数字)。基本上,流程与本教程中描述的完全相同 使用字符串哈希方法[pincode哈希] 通过使用用户的其他信息(如电子邮件、Salt哈希字符串-代码中的纯文本)的组合生成计算的哈希字符串,因此计算的字符串=[@“%@%i%@”、电子邮件、[pincode hash],Salt字符串] 使用SHA256摘要为计算的哈希字符串生成哈希字符串 将sha256摘要结果放入keychain 由于sha256摘要结果将用

我使用以下方法加密(实际上是散列)用户将在iOS应用程序中输入的pincode(4-6个数字)。基本上,流程与本教程中描述的完全相同

  • 使用字符串哈希方法[pincode哈希]
  • 通过使用用户的其他信息(如电子邮件、Salt哈希字符串-代码中的纯文本)的组合生成计算的哈希字符串,因此计算的字符串=[@“%@%i%@”、电子邮件、[pincode hash],Salt字符串]
  • 使用SHA256摘要为计算的哈希字符串生成哈希字符串
  • 将sha256摘要结果放入keychain
  • 由于sha256摘要结果将用于sqlciper lib(加密sqlite数据库)和Rncryptor()的密码短语,因此sha256摘要结果是关键部分

    我认为这种方法是可以的。但有人一直认为,将sha256摘要结果保存到密钥链中是不安全的,因为人们可以将其转储到越狱设备中(正如我所读到的,我同意这一点,并且在今年的WWDC期间咨询了苹果的安全工程师)


    我们还有其他更好的选择吗?我知道有很多应用程序也使用钥匙链服务保存用户的用户名和密码。

    越狱的人正在含蓄地向任何安全保护挥手告别。您可以在存储到密钥链之前进行加密,但您可以做的事情不多。“Salt”是为每个密码生成的随机数据,对于软件来说不是常数。很像这样:;)恒定盐不会给你带来任何安全性,彩虹表很容易生成。你不会在用户设备上存储PIN。PIN是简短的数字(通常由用户设置),用户可以记住这些数字,以便在每次访问时输入PIN。存储用户ID和长密码(或类似令牌),但不存储PIN。@MaciejS-我知道“Salt”是问题之一,但我还能做什么?@MaciejS,Salt通常是随机的,但它不必长到任何两个相同的PIN都可能是唯一的。如果你认为盐是“电子邮件+盐绳”,那么每个引脚是唯一的(正确地)腌制。由于电子邮件内容不同,您无法设置PIN。