加密第三方凭据

时间:2009-11-30 10:33:09

标签: security encryption passwords

我有一个应用程序,我需要将第三方凭据存储到Amazon S3,FTP,SFTP等服务。

我知道可以在没有密码的情况下访问其中一些系统,但这有其自身的问题。如果我们的客户通过ACL让我们访问他们的S3存储桶,我们仍然需要验证哪个存储桶属于哪个用户,SFTP和ssh密钥验证也是如此。

我们会尽可能允许非密码替换,但有时(FTP)它是不可能的。因此,我正在寻找有关如何将这些敏感数据存储在我们的数据库(MySql)或其他地方的建议。

过去我读过有关使用TrueCrypt分区自动卸载的人,但这可能需要适当的入侵检测。目前我对简单的方法感兴趣,这些方法可以带来合理的安全性,并且可以在将来进行改进。

关于这个问题的任何建议都会受到很高的评价!

3 个答案:

答案 0 :(得分:3)

有各种各样的可能性,因为在我看来,你提供的关于上下文的信息不够,我会尝试从我的观点给你一个概述。我假设这里最重要的方面是数据的机密性和用户的身份验证。数据的完整性和可用性不那么重要。

如果您需要基本安全性,可以让MySQL通过用户名/密码组合处理它并设置给定帐户的访问权限。但是,由于mysql的访问控制机制不是细粒度的(你可以只为每个表设置访问控制规则,而不是每行),这可能会导致糟糕的数据库设计。

如果你想要一个非密码方法,你可以给用户提供客户证书,让他们通过出示他们的客户证书(使用TLS)证明他们的身份或让他们签署一些东西(注意他们是危险的,因为你创建一个所谓的签名oracle)。

另一种方法是加密数据库中的数据。您可以通过从密码派生对称密钥并使用此数据加密凭据来实现此目的。这里的问题当然是你的密钥派生协议应该是好的,这不容易实现(所以如果你选择这个,我建议你采用现有的密钥派生协议或使用一个流程)。在这里查看一下streamcipher http://en.wikipedia.org/wiki/Stream_cipher的列表。

如果您非常关心安全性,您可以开始考虑使用智能卡进行身份验证等奇特的解决方案,或者使用时间同步的防篡改设备来生成访问代码。但是,请注意,这些花哨的解决方案并不能为您提供免费的安全性,如果实施此类系统既费用又昂贵(由于开发部署),但如果正确完成,则可提供最佳安全性。

答案 1 :(得分:1)

让用户在设置帐户时(在提供密码之前)提供(强)密码。然后使用从用户密码的强散列(SHA256或类似内容)派生的密钥加密数据库中该帐户的所有数据。这样,如果您的服务器遭到入侵,则不会泄露任何数据,因为它是使用用户密码加密的(嗯,是用户密码的哈希),并且密码不会存储在服务器的任何位置。

答案 2 :(得分:0)

您需要调查密钥库的使用。 TruCrypt就是这样一个密钥库的一个例子,但这是一个个人密钥库,不是用于服务级别的凭证。

您将无法避免以某人可以访问的格式存储其密码,目标是尽量减少谁可以访问该信息。与应用程序数据放在同一个MySQL中会引发灾难。