以下是我们用来存储CC的模型详细说明这看起来有多安全?
我们所有的信息都使用公钥加密进行加密,密钥对依赖于用户(它在服务器上生成,私钥使用用户密码对称加密,用户密码也是数据库中的哈希值)所以基本上首先运行用户通过SSL连接发送密码,密码用于添加salt以生成MD5哈希,密码也用于加密私钥,私钥存储在服务器上。当用户想要付款时,他会发送密码。密码解密私钥,私钥解密CC详细信息并收取CC详细信息。
答案 0 :(得分:4)
如果用户的密码足够安全以保护私钥,为什么不跳过私钥并使用密码(通过a suitable key derivation algorithm)来加密信用卡号码?不必要的并发症肯定会不提高安全性。
此方案不会将公钥用于任何内容,表明非对称算法不合适。
答案 1 :(得分:3)
这将信用卡的安全性与用户密码的强度联系在一起,密码因用户而异,通常较弱。最好创建自己的对称加密密钥,保持安全,然后doing a bunch of complicated stuff that experts invented, involving initialisms like CBC, CTR, and IV。
答案 2 :(得分:1)
我不确定您是否将卡号和私钥文件存储在一起。如果加密的私钥文件可用,似乎只需使用用户密码加密私钥文件即可打开字典样式攻击的大门。
不确定为什么要使用速度非常慢的公钥加密。此外,每个用户的1个密钥对的模型可能无法扩展(可以为公钥操作生成多少文件,可以生成参数)。请注意,您可能有滥用行为 - 人们检查他们的被盗卡片列表是否良好。
通过添加您自己的主密钥并从组合中获取密钥计划,您仍然可以防止在用户不在时使用卡号。一般来说,大多数商家都不能遵守这一严格要求,因为当用户不在场时,有效需要使用卡号。
如果您只想要用户特定的密钥(并且每次必须使用不同的IV),那么您可以使用openssl EVP_BytesToKey路由并且每次使用加密密钥和iv的主密钥传递不同的盐。派生(并且每个用户都会有所不同)。
最后使用支付工具仅受用户密码保护,如上所述。有些用户选择弱密码。因此,您可能希望使用额外的打样来确保卡属于用户 - 其中一些是为了您自己的利益,因为您可以打击友好的欺诈退款并保持您的真实欺诈退款率低。
答案 3 :(得分:0)
我同意erickson的观点,如果不使用公钥,那么做不对称加密是没有意义的。
此处的问题一直是密钥管理问题。不安全源于不知道如何安全地隐藏解密数据的密钥。
我不确定是否可行,但是如果你能负担得起它购买硬件安全模块并让HSM管理密钥,或用HSM主密钥加密所有客户(私人)密钥。
如果你不能,你应该找到一个合适的地方存储你的“主”键,一个可能的例子是windows商店(如果有可能)。但是,我最承认我真的不知道Windows商店的安全性。
答案 4 :(得分:0)
您可能需要查看支付卡行业“付款申请DSS”“https://www.pcisecuritystandards.org/security_standards/pa_dss.shtml
这可能有助于你做出一些决定。