【发布时间】:2012-01-10 04:51:26
【问题描述】:
Android/Iphone 应用程序将从服务器访问应用程序数据。 [Django-Python]
如何确保与移动应用程序的通信安全?
期望:对密码等敏感信息足够安全,除了暴力破解之外,没有直接的解密方式。
我的要求:
- 身份验证[只有应用被授权]
- 完整性 [不应在两者之间修改消息]
- 隐私 [如果被嗅探,通信不应该是可读的]
我的努力:
- SSL 仅对服务器进行身份验证,而不对客户端进行身份验证。
- 我无法使用对称加密 [仅提供隐私]
- 无法进行数字签名 [缺乏隐私]
- PGP 完全满足所有 3 个要求。
问题:
- PGP 要求将密钥存储在客户端应用程序上。
- 似乎没有确保客户端应用程序密钥安全的可靠方法。
- 如果密钥失效,那么 PGP 或对称加密同样容易受到攻击。
- 逆向工程 PGP 密钥或对称密钥同样困难。
- 在这种情况下,PGP 对移动处理器来说是无意义的负担。
- OAuth 又没用了,因为它还有一个客户端密钥。
那么,我该如何/应该如何继续前进? 行业如何处理这个问题?
我应该实施随意的方法吗:
- 使用简单的 SSL 并交叉手指?,因为如果密钥被盗,则无法进行身份验证? (只能使用服务器身份验证)
更新:
结论是使用 AES,因为如果我可以保证密钥的安全,那么我和 SSL 一样好。 另外,我可以不断更改密钥以提高安全性。 如果您认为有更好的方法,请在发帖前阅读整篇文章。
【问题讨论】:
-
你不具备 AES 的完整性:security.stackexchange.com/questions/9437/…
-
我可以用数据加密一个
SHA1以实现与AES的完整性,在接收端解密时可以很容易地验证。 -
你还是比较脆弱的。如果您使用 AES 并且密钥泄露,攻击者可以将每个通信读取为 MITM。使用 SSL,攻击者只能伪造授权客户端,而无法读取其他客户端的通信。
-
嗯,整个问题都围绕着丢失钥匙的状态。如果私钥被泄露,那么攻击者可以读取和伪造任何东西。在 Web SSL 中是有意义的,因为它在您的机器上,是关键。但在移动设备的情况下,它必须保存在潜在黑客用来访问服务器核心部分以满足恶意需求的可执行文件中。这就是整个问题的重点。
-
所以,如果密钥被泄露,SSL 和 AES 都同样不安全,那么为什么要花费额外的 CPU 来获得相同级别的安全性。 [注意我将暴力破解的情况放在一边]
标签: android iphone python django security