【问题标题】:Is it safe storing an encrypted PEM block?存储加密的 PEM 块是否安全?
【发布时间】:2017-10-19 11:45:28
【问题描述】:

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

我正在创建一个 RSA 私钥,将其转换为 PEM,然后使用密码对其进行加密。

那么,将其存储在公共场所有多安全?

我不是在寻找诸如“没关系,只是随着时间的推移更改密码”之类的答案,我真的想知道 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
}

非常感谢。

编辑:

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

这个话题已经回答了。

【问题讨论】:

  • “公共场所”是什么意思。我会说一般来说,将私钥存储在“公共场所”是一个坏主意。 Go 中 RSA 实现的详细信息是 here
  • 是的,我知道将私钥存储在公共场所是个坏主意,但我怎样才能让用户只知道他的密码?
  • Go 使用你选择的机制,在你的代码中是PEMCipherAES256。这与使用 aes-256-cbc 加密任何内容相同。

标签: security go cryptography rsa pem


【解决方案1】:

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

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

实际上,在有针对性的攻击中对某人进行键盘记录是微不足道的。

如果您在线存储未加密的私钥,很多事情都会出错。

【讨论】:

  • 谢谢,我知道该文件包含私钥。是的,将 pem 存储在公共站点上有点愚蠢,攻击者会暴力破解它。我不能投票给你,我在这里真的很新,但你的回答是最好的。
猜你喜欢
  • 2018-11-04
  • 1970-01-01
  • 2015-06-22
  • 2021-10-31
  • 1970-01-01
  • 2011-01-07
  • 2020-01-25
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多