有没有人获得实践经验或参考实施符合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设计模式,用于存储和检索敏感的每个用户数据,但这一切都归结为密钥管理,因此这个更精确的问题.
我有一个PEM格式的RSA公钥+ PKCS#1(我猜):
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAJNrHWRFgWLqgzSmLBq2G89exgi/Jk1NWhbFB9gHc9MLORmP3BOCJS9k
onzT/+Dk1hdZf00JGgZeuJGoXK9PX3CIKQKRQRHpi5e1vmOCrmHN5VMOxGO4d+zn
JDEbNHODZR4HzsSdpQ9SGMSx7raJJedEIbr0IP6DgnWgiA7R1mUdAgMBAAE=
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
我想在Python中获取其ASN1编码版本的SHA1摘要.第一步应该是读取此键,但我没有在PyCrypto中执行此操作:
>> from Crypto.PublicKey import RSA
>> RSA.importKey(my_key)
ValueError: RSA key format is not supported
Run Code Online (Sandbox Code Playgroud)
PyCrypto的文档说支持PEM + PKCS#1,所以我很困惑.我也试过M2Crypto,但事实证明M2Crypto不支持PKCS#1但只支持X.509.
在应用程序配置上使用 Azure Key Vault 有什么意义吗?
是的,是的,我知道 -它们是免费的,秘密的密钥库,应用程序配置......好吧,应用程序配置。
但是,考虑到它们都是加密的,基本上,为了让某人看到秘密或配置值,他们必须有权访问您的天蓝色门户(这是一个低级坏人场景)。
我看到的唯一区别是,您可以在保管库和配置之间以不同的方式控制权限,但除此之外,如果未经授权的人可以访问您的门户,您就会遇到更大的问题。
所以为什么?并且请只提出好的和真实的论点,而不是“因为你应该”或“因为 X 人这么说”,我可以使用密钥保管库获得哪些我在应用程序配置中没有的好处?
我想在我的Android应用程序中存储一些小而重要的信息,例如AES密钥.建议的方法是什么?我不想将密钥硬编码作为我的应用程序的一部分.
我看看KeyStore,但它并没有真正解决我的问题.它可以存储我的密钥,因为我可以提供密码.然后我需要找到一个安全的地方来存储这个密码,这与我原来的问题相同.
是否有内置的Android类来执行此任务?或者我应该寻找第三方图书馆?使用NDK对我来说也是可以接受的.
更新:
我希望找到一个用于存储的Android API,以确保只有存储某些信息的应用程序才能检索回来.Android OS可以基于签署应用程序的签名来强制执行此操作.这样,我的应用程序可以在第一次运行时生成随机密钥,并将其存储在安全存储中以供以后使用.这有什么API吗?
采取哪条路线,哪些优点和缺点,哪个更安全..
1)生成AES密钥,用它加密数据,然后用RSA加密AES密钥,将加密数据和加密的AES密钥保存到文件,并将RSA密钥保存到KeyContainer.
2)或者使用DPAPI ProtectedData类加密数据并将其保存到文件中,然后将我使用的熵存储ProtectedData.Protect()到某个地方......(也可以用RSA加密它,将RSA密钥对存储到KeyContainer和加密的熵到带有数据的文件?)
编辑:只是为了更多信息:我们需要保护我们的应用程序文件系统使用.因此,应用程序存储到我们希望对其进行加密的文件系统的任何文件.该文件很可能由同一应用程序或同一应用程序堆栈的另一个组件使用.
ssh-add -l 显示我有3个RSA密钥添加到我的SSH代理.
ssh-add -L 显示那些公钥.
如何获取私钥,以便将其保存到文件中?或者这是不可能的?它是如何工作的呢?
是否可以要求ssh-agent使用私钥进行操作?我怎么能让它为我加密/解密一个号码?
我必须为此编写代码(编程语言并不重要),但我更喜欢使用现有工具或库.
我正在研究密钥管理解决方案,以便符合PCI标准.我已经和竞技场上的一些供应商进行了交谈,虽然我喜欢他们的产品,但成本超出了我的预算.是否有人知道密钥管理的任何开源或低成本解决方案?我使用Windows/.NET环境,所以我更喜欢针对该环境的解决方案,但是我会有兴趣听到有关那里的任何内容.
谢谢
如何将类路径中的.p12证书导入到Java密钥库中?首先,我使用了InstallCert https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java并进行了一些更改,因此服务器证书将被导入到java安装目录中的密钥库中.这工作正常,但现在我想从我的类路径加载证书.
编辑:我只是使用.cer证书,请参阅下一个答案
我的任务如下:
output.dat.下面的程序抛出错误:"java.security.InvalidKeyException:没有安装的提供程序支持此密钥:sun.security.provider.DSAPublicKeyImpl".
import java.security.*;
import java.security.KeyStore.*;
import java.io.*;
import java.security.PublicKey;
import java.security.PrivateKey;
import javax.crypto.Cipher;
import java.nio.charset.*;
import sun.security.provider.*;
import javax.crypto.*;
public class Code {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
/* getting data for keystore */
File file = new File(System.getProperty("user.home") + File.separatorChar + ".keystore");
FileInputStream is = new FileInputStream(file);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
/*Information for certificate to be generated */
String …Run Code Online (Sandbox Code Playgroud) 假设一个组想要加密某些信息,然后以一种需要该组的共识来解密该信息的方式在组成员之间共享加密密钥.我对各种情况感兴趣,其中广泛的共识范围从一致到绝对多数.有用的技术可以应用于对称密钥,私钥或两者.
我可以采取一种方法来推动我自己的方法,因为我相信很多SO成员都可以.但是出于这个问题的目的,我只对那些已被广泛发表并经过专家密码分析师审查的方法感兴趣.期刊引文很好,但学术资源的解释也非常有用.