【问题标题】:Is it safe to write RSA private key in my code在我的代码中编写 RSA 私钥是否安全
【发布时间】:2014-05-11 19:14:00
【问题描述】:

我在应用的文档目录中保存了一个重要文件。我不允许其他人查看其内容,因此我使用自动生成的 AES 密钥加密文件并使用 RSA 公钥加密此 AES 密钥,然后将加密的 AES 密钥保存到 NSUserDefaults。

在使用重要文件时,我会取出加密的AES密钥,用RSA公钥解密AES密钥,然后解密文件。

但是我不知道RSA私钥存储在哪里,像NSString *rsaPrivateKey = @"%^^&*(())";这样写在我的代码中是否安全,如果没有,是否有更安全的解决方案?

我知道如何使用 openssl (This link helps me) 生成 RSA 公钥和私钥

编辑:

重要文件只对用户本人开放,可以认为是包含一些敏感内容的照片,照片由用户自己保存。

【问题讨论】:

  • 这是一个敏感话题。您无法将其存储在本地,这将是完全防黑客的。最好的办法是从服务器获取它并将其存储在 iOS 钥匙串中。从程序中获取字符串文字并不难。
  • @borrrden 谢谢你的回答。我知道最好从服务器获取,但实际上我没有服务器...
  • 如果您没有服务器,那么我建议您改用#define,并将其设为 C 字符串。事实上,将其组合成多个并将它们组合成一个 NSString,或者更好的是,您可以将密钥基于您在运行时生成的 UUID。
  • @borrrden "在运行时生成" 仍然面临保存私钥的问题,但在运行时生成比在我的代码中编写要好。顺便说一句,如何在运行时生成私钥-公钥对:)?
  • @borrrden 对于 RSA 密钥来说这很棘手。但是,您可以从 UUID 和其他一些数据创建一个 AES 密钥,并用它加密 RSA 密钥。一般来说,您不希望一直创建非对称密钥。

标签: ios encryption cryptography rsa


【解决方案1】:

原则上,您正在尝试解决 DRM 问题。只要你不能信任运行时系统,就没有完整的解决方案。您最好的选择是将密钥存储在系统提供的容器中,并希望它们得到很好的保护(即已经提到的 iOS 密钥链)。

如果失败,您可以使用从设备中的某些静态信息生成的 AES 密钥来加密您的 RSA 密钥。这应该被认为是混淆而不是加密,因为密钥并不是真正的秘密。您可能应该尝试使用标准容器格式(例如 PKCS#8)来加密密钥。

可以从一组静态数据中生成 RSA 密钥(使用 PRNG 将这些数据提供给 RSA 密钥对生成器),但是这些方案没有标准化,非常脆弱,并且占用的 CPU 时间不详,所以我强烈建议不要走那条路。

【讨论】:

  • 好的,因为重要文件是对用户自己开放的,所以使用钥匙链应该是一个很好的解决方案。但是我将面临的问题是如何在运行时生成 RSA 公钥和私钥。你有什么建议吗。谢谢。
  • 问题真的变成了是否还需要 RSA 密钥对。您也可以使用链中的密钥加密对称密钥。只要一切都在同一台设备上,就不需要 PKI。
  • 只要你不卑鄙,就像那个评论的人一样:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2011-11-05
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多