ホームページ  >  記事  >  バックエンド開発  >  パスワード管理における Golang: Vault からの暗号化キーの取得と保存

パスワード管理における Golang: Vault からの暗号化キーの取得と保存

WBOY
WBOYオリジナル
2023-07-18 15:43:49765ブラウズ

パスワード管理における 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。