有没有人获得实践经验或参考实施符合PCI DSS安全标准的密钥管理方案的方案?
鉴于符合PCI DSS的公司数量,但显然有很多实现,但试图找到它们的细节是很困难的.当它归结为存储私有数据时,讨论通常会停止使用哪种加密算法.在此之后,通常会有关于正确存储私钥的声明,但没有讨论实际的方法,或者定期更改密钥或为应用程序提供密钥等.
具体而言,我对PCI DSS标准第3.5和3.6节的要求感兴趣.
3.5.2以尽可能少的位置和形式安全地存储加密密钥.
3.6.a验证用于加密持卡人数据的密钥是否存在密钥管理程序.注意:密钥管理的众多行业标准可从包括NIST在内的各种资源获得,可在http://csrc.nist.gov上找到.
3.6.4确认密钥管理程序的实施至少每年要求定期更改密钥.
我已经看过NIST Cryptographic出版物,正如PCI DSS要求文件所暗示的那样,但除了最近的加密密钥管理研讨会的注释之外,似乎没有太多真正可实现的方案或标准.
至于我想要做的事情不是:
所有这些都是有效的问题,但在这种情况下不是答案.我的要求的细节是一个不同的SO问题.Net设计模式,用于存储和检索敏感的每个用户数据,但这一切都归结为密钥管理,因此这个更精确的问题.
我正在寻找使用诸如pycrypto之类的加密库来加密/解密我的python webapp数据库中的字段.但加密算法需要密钥.如果我的源代码中有一个未加密的密钥,那么在我的服务器上尝试加密db字段似乎很愚蠢,如果有人可以访问db文件,他们也可以访问我的python源代码.
是否有保护所用密钥的最佳实践方法?或者另一种加密db字段的方法(在应用程序而不是db级别)?
更新:我试图保护的字段是oauth令牌.
更新:我想没有常见的方法来避免这种情况.我想我无论如何都需要加密字段,因为db文件可能会被备份和移动,所以至少我会将问题减少到一个易受攻击的位置 - 查看我的源代码.
更新:当用户离线时,需要将oauth令牌用于api调用,因此在这种情况下使用他们的密码作为密钥是不合适的.
此加密类是否足够安全?或者有人可以反汇编我的二进制文件来找到密钥和IV吗?我正在使用它来解密许可证文件,因此它不容易被破坏是非常重要的.
internal static class Encryptor
{
// Actual values are put here in my source
private static readonly byte[] Key = { 0, 0, 0, 0, 0, 0, 0, 0 };
private static readonly byte[] Iv = { 0, 0, 0, 0, 0, 0, 0, 0 };
internal static String Encrypt(string source)
{
var des = new DESCryptoServiceProvider();
var enc = des.CreateEncryptor(Key, Iv);
var b = Encoding.ASCII.GetBytes(source);
var encId = enc.TransformFinalBlock(b, 0, b.Length);
return Convert.ToBase64String(encId);
}
internal static string Decrypt(string …Run Code Online (Sandbox Code Playgroud) cryptography ×3
.net ×1
c# ×1
database ×1
encryption ×1
obfuscation ×1
pci-dss ×1
pycrypto ×1
python ×1
security ×1