パスワード管理における Golang の応用: Vault からの暗号化キーの取得と保存
はじめに:
最新のソフトウェア開発において、セキュリティは重要な側面です。暗号化キーの安全な保管と使用は、パスワード管理にとって重要です。この記事では、Golang と Vault を使用して暗号化キーを取得および保存する方法について説明します。
Vault とは何ですか?
Vault は、シークレット、パスワード、機密データを安全に保存し、アクセスするために HashiCorp によって開発されたオープン ソース ツールです。 Vault は、ロールベースのアクセス制御、暗号化ストレージ、シークレットの自動化、監査ログなどを含むさまざまな機能を提供します。 Vault を使用すると、機密データを安全な場所に一元的に保存し、アプリケーションやサービスへの安全なアクセスを提供できます。
Vault を使用して暗号化キーを取得します:
まず、Vault をインストールして構成する必要があります。操作については、Vault の公式ドキュメントを参照してください。インストールすると、Golang を使用して Vault と対話できるようになります。
Golang で Vault を使用する場合、Vault の API を使用して暗号化キーを取得できます。まず、vault パッケージとその他の必要なライブラリをインポートする必要があります:
import ( "fmt" "github.com/hashicorp/vault/api" )
次に、暗号化キーを取得する関数を作成できます:
func getEncryptionKey() (string, error) { config := &api.Config{ Address: "http://localhost:8200", // 替换为Vault的地址 } client, err := api.NewClient(config) if err != nil { return "", err } // 设置Vault的访问令牌 client.SetToken("YOUR_VAULT_TOKEN") // 从Vault中获取加密密钥 secret, err := client.Logical().Read("secret/data/encryption-key") if err != nil { return "", err } if secret != nil && secret.Data != nil { if key, ok := secret.Data["key"].(string); ok { return key, nil } } return "", fmt.Errorf("encryption key not found") }
上記のコードでは、まず Create を作成します。 Vault クライアントを選択し、Vault アドレスとアクセス トークンを設定します。次に、client.Logical().Read
メソッドを使用して、Vault から暗号化キーを取得します。最後に、Vault の応答データから暗号化キーを抽出して返します。
Vault を使用して暗号化キーを保存する:
Vault から暗号化キーを取得するだけでなく、Vault を使用して暗号化キーを安全に保存することもできます。次に、Golang を使用して暗号化キーを保存する方法を示します。
まず、暗号化キーを Vault に保存する関数を記述する必要があります:
func storeEncryptionKey(key string) error { config := &api.Config{ Address: "http://localhost:8200", // 替换为Vault的地址 } client, err := api.NewClient(config) if err != nil { return err } // 设置Vault的访问令牌 client.SetToken("YOUR_VAULT_TOKEN") // 将加密密钥存储到Vault中 data := map[string]interface{}{ "key": key, } _, err = client.Logical().Write("secret/data/encryption-key", data) if err != nil { return err } return nil }
上記のコードでは、まず Vault クライアントを作成し、Vault アドレスとアクセス トークンを設定します。 。次に、client.Logical().Write
メソッドを使用して、暗号化キーを Vault に保存します。
使用法:
暗号化キーを取得して保存する方法を学習したので、アプリケーションでこれらの関数を使用して、パスワード管理のセキュリティを強化できます。
これは、Vault の暗号化キーを使用して Golang でパスワードを暗号化および復号化する方法を示す例です:
import ( "encoding/base64" "fmt" "github.com/awnumar/memguard" ) func encryptPassword(password string) (string, error) { key, err := getEncryptionKey() if err != nil { return "", err } guardedKey := memguard.NewBufferFromBytes([]byte(key)) defer memguard.PurgeBuffer(guardedKey) ciphertext, err := aesEncrypt([]byte(password), guardedKey.Buffer()) if err != nil { return "", err } encodedCiphertext := base64.StdEncoding.EncodeToString(ciphertext) return encodedCiphertext, nil } func decryptPassword(encodedCiphertext string) (string, error) { key, err := getEncryptionKey() if err != nil { return "", err } guardedKey := memguard.NewBufferFromBytes([]byte(key)) defer memguard.PurgeBuffer(guardedKey) ciphertext, err := base64.StdEncoding.DecodeString(encodedCiphertext) if err != nil { return "", err } plaintext, err := aesDecrypt(ciphertext, guardedKey.Buffer()) if err != nil { return "", err } return string(plaintext), nil } func main() { // 加密密码 encryptedPassword, err := encryptPassword("mySecretPassword") if err != nil { fmt.Println(err) return } fmt.Println("Encrypted Password:", encryptedPassword) // 解密密码 decryptedPassword, err := decryptPassword(encryptedPassword) if err != nil { fmt.Println(err) return } fmt.Println("Decrypted Password:", decryptedPassword) }
上記のコードでは、最初に getEncryptionKey
関数を使用します。 Vault から暗号化キーを取得します。次に、そのキーを使用してパスワードを暗号化し、復号化します。最後に、暗号化および復号化されたパスワードを出力します。
結論:
この記事では、Golang と Vault を使用して暗号化キーを取得および保存する方法について説明しました。 Vault の API を使用して Vault と対話し、Vault の暗号化キーを使用して Golang でパスワードを暗号化および復号化する方法を示します。 Vault を適切に使用することで、パスワード管理のセキュリティを強化し、機密データを保護できます。この記事がパスワード管理における Golang の応用を理解するのに役立つことを願っています。
以上がパスワード管理における Golang: Vault からの暗号化キーの取得と保存の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。