Go での ECDSA 秘密キーの保存
Go で ECDSA キー ペアを操作する場合、秘密キーを安全に保存する必要があります。 elliptic.Marshal メソッドは公開キーのエンコーディングを提供しますが、秘密キーに相当するものはありません。この記事では、Go で秘密キーを保存およびロードする方法について説明します。
エンコードとデコード
秘密キーを保存するには、次のような複数段階のアプローチを採用する必要があります。 ECDSA キー暗号化、標準エンコーディング、およびファイル形式。一般的な組み合わせには、キー生成に ECDSA アルゴリズム、エンコードに X.509、ストレージに PEM (プライバシー強化メール) 形式を使用することが含まれます。
コード例
次のコード スニペットは、Go で ECDSA キーをエンコードおよびデコードする方法を示しています。
import ( "crypto/ecdsa" "crypto/elliptic" "crypto/rand" "crypto/x509" "encoding/pem" "fmt" "reflect" ) func encode(privateKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey) (string, string) { x509Encoded, _ := x509.MarshalECPrivateKey(privateKey) pemEncoded := pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: x509Encoded}) x509EncodedPub, _ := x509.MarshalPKIXPublicKey(publicKey) pemEncodedPub := pem.EncodeToMemory(&pem.Block{Type: "PUBLIC KEY", Bytes: x509EncodedPub}) return string(pemEncoded), string(pemEncodedPub) } func decode(pemEncoded string, pemEncodedPub string) (*ecdsa.PrivateKey, *ecdsa.PublicKey) { block, _ := pem.Decode([]byte(pemEncoded)) x509Encoded := block.Bytes privateKey, _ := x509.ParseECPrivateKey(x509Encoded) blockPub, _ := pem.Decode([]byte(pemEncodedPub)) x509EncodedPub := blockPub.Bytes genericPublicKey, _ := x509.ParsePKIXPublicKey(x509EncodedPub) publicKey := genericPublicKey.(*ecdsa.PublicKey) return privateKey, publicKey } func test() { privateKey, _ := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) publicKey := &privateKey.PublicKey encPriv, encPub := encode(privateKey, publicKey) fmt.Println(encPriv) fmt.Println(encPub) priv2, pub2 := decode(encPriv, encPub) if !reflect.DeepEqual(privateKey, priv2) { fmt.Println("Private keys do not match.") } if !reflect.DeepEqual(publicKey, pub2) { fmt.Println("Public keys do not match.") } }
テスト関数:
上記で概説した手法を利用すると、Go で ECDSA 秘密キーを安全に保存および取得でき、アプリケーション内でデジタル署名の作成と管理が可能になります。
以上がGo で ECDSA 秘密キーを安全に保存および取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。