【发布时间】: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