在我的应用服务器上存储用户电子邮件密码的加密版本

时间:2015-07-12 20:54:35

标签: ios encryption cryptography bcrypt

我正在使用iOS应用,我需要在我的服务器上存储第三方服务的用户凭据。 (例如,存储IMAP登录名/密码,以便当他们登录我的应用程序时,从他们的IMAP服务器获取,因此我的服务器不会存储他们的电子邮件)

我不考虑OAuth,因为并非每个电子邮件服务都提供OAuth。为此,我考虑以下选项:

  1. 用户输入用户名/密码以登录MyApp(MyApp服务器实施标准安全措施,这意味着它存储密码的哈希版本而不是原始密码,因此MyApp服务器不知道用户的密码是什么)
  2. 登录MyApp后,MyApp会将原始密码存储到本地密钥链中。
  3. 用户'连接'通过登录第三方电子邮件帐户登录第三方电子邮件帐户。
  4. 当第三方电子邮件帐户成功登录时,MyApp会使用MyApp密码(存储在步骤2中的钥匙串中)加密电子邮件的密码。
  5. 加密密码以" emailPassword"
  6. 的形式存储在MyApp的服务器上
  7. 从那时起,只要用户登录MyApp,MyApp就会抓取加密的" emailPassword"来自MyApp的服务器并使用本地存储在用户密钥链上的MyApp密码将其解密回原始格式(用于在步骤4中加密)。
  8. 使用从步骤6解密的原始密码,MyApp从第三方电子邮件服务器获取电子邮件。
  9. 我是加密新手,所以不确定这是否是一个安全(甚至可能)的选项。有人可以帮忙吗?谢谢。

    [更新]更新以澄清概念并更改"编码"加密"

1 个答案:

答案 0 :(得分:-1)

你应该说“加密”,而不是“编码”。编码是一种使用一组固定规则(算法)转换数据的机制。 Base64是一种编码,urlencoding也是。编码不提供任何安全性。 然而,加密使用使用加密密钥的算法将明文转换为密文。在不知道密钥的情况下,密文的回归非常困难。 (永远不可能) 好的,关于你的例子: 这是可行的,但即使有一些攻击机会。

在运行时的某个时刻,MyApp知道明文密码。当它被解密。然后,明文密码位于RAM中,并且可能被具有相应权限的恶意软件读出(例如,根恶意软件) 此外,您需要确保在正确的模式下使用合适的算法。 CBC中的AES-256比ECB模式更安全。然后,您还必须考虑如何将密码转换为加密密钥。如果您只是使用密码,那就太安全了。那么你也应该使用一个值得信赖的图书馆,没有来自不知名的人的图书馆

嗯,这些只是一些想法。在加密加密之前,您应该先了解一些背景知识。有很多选择,你应该知道,你做了什么。