Go での ECDSA 秘密キーの保存: 総合ガイド
Go で ECDSA (楕円曲線デジタル署名アルゴリズム) を使用する場合、次のようになります。秘密キーを安全に保管するために必要です。 ecdsa.GenerateKey メソッドは秘密鍵と公開鍵のペアを作成する手段を提供しますが、秘密鍵の保管場所は開発者に任されています。このガイドでは、Go に ECDSA 秘密キーを保存するための推奨アプローチについて詳しく説明します。
カスタム マーシャリングと標準エンコーディング
キー マーシャリングを手動で実装するか、それとも手動で実装するかという問題が生じます。標準のエンコード方式を利用します。推奨されるアプローチは、キーの保管に標準の Go ライブラリを利用することです。これにより、他のアプリケーションとの相互運用性が保証され、業界のベスト プラクティスに準拠します。
PEM エンコーディング: 多用途オプション
PEM (Privacy-Enhanced Mail) エンコーディングは、広く採用されているものとして機能します。鍵を保管するための標準。これには、次のいくつかの手順が組み込まれています。
暗号化キーと復号化キー
次のコード サンプルは、PEM を使用して ECDSA キーをエンコードおよびデコードする方法を示しています。エンコード:
import ( "crypto/ecdsa" "crypto/elliptic" "crypto/pem" "crypto/rand" "fmt" "reflect" ) func encode(privateKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey) (string, string) { // Marshal the private key to X.509 format x509Encoded, _ := x509.MarshalECPrivateKey(privateKey) // Encode the X.509-formatted key into PEM format pemEncoded := pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: x509Encoded}) // Marshal the public key to X.509 format x509EncodedPub, _ := x509.MarshalPKIXPublicKey(publicKey) // Encode the X.509-formatted public key into PEM format 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) { // Decode the PEM-encoded private key from a string block, _ := pem.Decode([]byte(pemEncoded)) // Extract the X.509-formatted private key from the PEM block x509Encoded := block.Bytes // Parse the X.509-formatted private key privateKey, _ := x509.ParseECPrivateKey(x509Encoded) // Decode the PEM-encoded public key from a string blockPub, _ := pem.Decode([]byte(pemEncodedPub)) // Extract the X.509-formatted public key from the PEM block x509EncodedPub := blockPub.Bytes // Parse the X.509-formatted public key genericPublicKey, _ := x509.ParsePKIXPublicKey(x509EncodedPub) // Convert the generic public key to an ecdsa.PublicKey publicKey := genericPublicKey.(*ecdsa.PublicKey) return privateKey, publicKey } // Test the encoding and decoding functionality func test() { // Generate an ECDSA key pair privateKey, _ := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) publicKey := &privateKey.PublicKey // Encode the key pair into PEM encPriv, encPub := encode(privateKey, publicKey) // Decode the PEM-encoded key pair priv2, pub2 := decode(encPriv, encPub) // Compare the original and decoded keys 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 秘密キーを安全に保存および管理できます。 PEM エンコーディングは、鍵を保存するための堅牢で広く受け入れられている形式を提供し、さまざまなアプリケーションとの相互運用性を可能にし、データの整合性を確保します。
以上がECDSA 秘密キーを Go に安全に保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。