存储加密的PEM块是否安全?

时间:2017-10-19 11:45:28

标签: security go cryptography rsa pem

我有一些使用Go的经验,但现在我并不真正理解我正在做的事情的安全性的复杂性,所以我需要问。

我正在创建一个RSA私钥,转换为PEM,然后用密码加密它。

那么,将它存放在公共场所有多安全?

我没有找到像&#34这样的答案;没关系,只需要随着时间的推移更改密码",我真的想知道Golang使用哪种密码机制来执行此操作,如果可以安全地将加密的PEM留在公共区块链中,为什么我可以这样做或为什么我不能。

我现在正在使用我正在使用的代码:

func New(passphrase string)(*pem.Block, error){
    pk, err := createPrivateKey(2048)
    if err != nil {
        return false, err
    }
    pem := getPemFromPK(pk)
    block, err := EncryptPEMBlock(pem,passphrase)
    if err != nil {
        return false, err
    }

    return block,nil
}

func createPrivateKey(bits int) (*rsa.PrivateKey, error){
    pk, err := rsa.GenerateKey(rand.Reader, bits)
    if err != nil {
        return nil, err
    }
    return pk,nil
}

func getPemFromPK(pk *rsa.PrivateKey) (*pem.Block){
    block := &pem.Block{
        Type:  "RSA PRIVATE KEY",
        Bytes: x509.MarshalPKCS1PrivateKey(pk),
    }
    return block
}

func EncryptPEMBlock(block *pem.Block, passphrase string) (*pem.Block, error){
    block, err := x509.EncryptPEMBlock(rand.Reader, block.Type, block.Bytes, []byte(passphrase), x509.PEMCipherAES256)
    if err != nil {
        return nil, err
    }
    return block,nil
}

非常感谢。

编辑:

作为此处和其他论坛的答案,不建议公开发布任何类型的私钥,即使加密也是如此。

本主题已得到解答。

1 个答案:

答案 0 :(得分:0)

在思考私钥是什么以及密码是什么时,你犯了一个错误。密码用于加密和解密您的私钥 - 如果您要存储需要使用密码的密钥文件,则该文件包含加密的密钥。

如果您存储"私钥"正如你所说,听起来你希望公开存储未加密的密钥。但是,即使您在公共在线存储库上发布加密的私钥,也有很多方法可以破解密码。如果密码短语或其他方式不安全,攻击者现在拥有您的私钥。如果他们以您为目标并获得对您的应用程序(即bash)中使用此密钥的计算机的访问权限,那么他们只需访问bash历史记录日志即可找到密码短语。

实际上,实际上,在目标攻击中对某人进行键盘操作是微不足道的。

如果您在线存储未加密的私钥,可能会出现很多问题。