【发布时间】:2020-08-12 09:27:42
【问题描述】:
我最近使用数字签名,想弄清楚如何让每个注册的用户都有自己的密钥对用于编码和解码过程。我使用 Go 构建这种系统,并使用来自 Go 的 crypto/rsa 包。我已经阅读了一些关于如何制作安全数字签名并找到很多东西的文章。然后,我尝试构建用于保护非对称加密过程的第一件事。
然后,我面临的第一个问题是我问自己一个问题“我应该创建一个验证,以确保没有其他用户拥有 RSA 包生成的密钥对吗?” 这样可以确保每个用户不能偶然或故意伪装成其他用户,因为他们拥有相同的密钥对(即使机会非常小)。
请给我一些关于这种情况的见解。如果我的问题不够清楚,请随时提出或投诉,我真的很难为我的用户和系统考虑任何安全方面。
import (
"crypto/rand"
"crypto/rsa"
"encoding/pem"
...
)
...
func createKeyPairs(userRegistered *User) (err error) {
keyPairs, err := rsa.GenerateKey(rand.Reader, 4096)
if err != nil {
return err
}
// SHOULD I ADD SOME VALIDATION FOR THE KEYPAIRS GENERATED BY CRYPTO RSA AND RAND PACKAGE HERE
caPrivateKeyPEMFile, err := os.Create(userRequestingCA.ID + "PrivateKey.pem")
pem.Encode(caPrivateKeyPEMFile, &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(keyPairs),
})
caPublicKeyPEMFile, err := os.Create(userRequestingCA.ID + "PublicKey.pem")
pem.Encode(caPublicKeyPEMFile, &pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: x509.MarshalPKCS1PublicKey(&keyPairs.PublicKey),
})
}
【问题讨论】:
-
我不会信任代表我记录我的私钥的应用程序。只是说。
-
下面 Marc 的回答解释了为什么这不是一个好主意。我也看不出这如何阻止用户通过共享帐户凭据来伪装成彼此的最明显方式。最后,即使你这样做了,我也可能用一点数论技巧打败你的检查,而且我肯定不是棚子里最敏锐的工具。
标签: validation security go cryptography rsa