我有一些使用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
}
编辑:
作为此处和其他论坛的答案,不建议公开发布任何类型的私钥,即使加密也是如此。
本主题已得到解答。
答案 0 :(得分:0)
在思考私钥是什么以及密码是什么时,你犯了一个错误。密码用于加密和解密您的私钥 - 如果您要存储需要使用密码的密钥文件,则该文件包含加密的密钥。
如果您存储"私钥"正如你所说,听起来你希望公开存储未加密的密钥。但是,即使您在公共在线存储库上发布加密的私钥,也有很多方法可以破解密码。如果密码短语或其他方式不安全,攻击者现在拥有您的私钥。如果他们以您为目标并获得对您的应用程序(即bash)中使用此密钥的计算机的访问权限,那么他们只需访问bash历史记录日志即可找到密码短语。
实际上,实际上,在目标攻击中对某人进行键盘操作是微不足道的。
如果您在线存储未加密的私钥,可能会出现很多问题。