【发布时间】:2012-10-24 21:02:19
【问题描述】:
我不是安全专家。我正在考虑如何在软件系统中实现信用卡存储,其中信用卡交易通过网络接受,但由内部用户手动执行。我们将使用 HTTPS(我相信)这将消除中间人攻击的风险。现在,我正在尝试弄清楚是否可以让从客户端接收到的数据在到达我们的服务器之前进行加密。
这个想法是他们的浏览器将使用非对称密钥对的公共部分加密数据。内部用户将知道私密部分。然后,当需要手动处理费用时,该用户将转到我们提供的 HTTPS 页面。他们将手动输入私钥(不会传输到我们的服务器),然后从我们的系统中检索加密的信用卡信息并由浏览器解密。
我希望通过这种方式,我可以防止我们的任何服务器看到未加密的信用卡信息。我错过了一些众所周知的安全漏洞吗?我读过this,它似乎解决了另一种安全漏洞。我还阅读了其他一些 SO 问题,但似乎没有一个能清楚地映射到这个特定的设计。
编辑 #1:@Pointy 询问为什么不使用行业标准。主要的在线零售商使用的解决方案比我的问题所保证的要复杂和昂贵得多。主要零售商会自动处理他们的交易,因此通常会努力实现 PCI-DSS 合规性。这不是我要解决的问题。我正在开发自动工具以安全地协助手动交易处理。
编辑#2:@Jason Dean 指出我没有很好地描述管理私钥的计划。这个想法实际上是让我们的员工将其保存在办公桌上的一张纸上。我们主要关心的是远程安全违规。我们的物理站点足够安全,我们不担心有人闯入。我们的想法是让私钥远离任何地方任何机器上的任何持久存储,这样就没有纯粹的电子攻击可能同时获取数据和私钥键。
【问题讨论】:
-
为什么要在客户端加密?
-
@epascarello 在客户端加密意味着服务器永远不会看到未加密的信用卡信息。这意味着它不会被意外泄露(例如在系统日志中)。
-
仅供参考,如果您想存储信用卡信息,实际上需要遵循 PCI 标准...stackoverflow.com/questions/13013686/…
-
我认为您可能正在尝试为不存在的问题找到解决方案。正如@deceze 所说,即使是加密的,您仍然需要符合 PCI 标准才能传输信用卡号。
-
另外,除非你已经广泛地对你的物理站点进行了红队,否则我会犹豫说它“足够安全”。人是任何安全系统中最薄弱的环节,而您将他们引入一个不需要他们的区域,这会引发大量无法防范的网络钓鱼漏洞。
标签: javascript security encryption https