次の方法で共有


JavaScript で Azure Key Vault のキーを使用してデータの署名と検証を行う

適切なプログラムの認証資格情報KeyClient を作成し、次に CryptographyClient を作成します。このクライアントを使用して Azure Key Vault のキーを設定、更新、およびローテーションします。

データの署名

データの署名に関するいくつかの推奨事項:

  • 署名する前に大きなデータをハッシュする
  • 署名する前にパスワードなどの一方向データをハッシュする
  • 小さな双方向データは直接署名できます

キーを使用して大きなデータまたは一方向のデータの署名と検証を行う

ダイジェスト メッセージの署名と検証を行うには、次のメソッドを使用します。

ダイジェストメッセージ用:

  • sign でメッセージのダイジェストに署名します。 これは、大きなデータやパスワードなどの一方向のデータに役立ちます。
  • verify でメッセージのダイジェストを検証します。
import { createHash } from "crypto";
import { DefaultAzureCredential } from '@azure/identity';
import {
  CryptographyClient,
  KeyClient,
  KnownSignatureAlgorithms
} from '@azure/keyvault-keys';

// get service client
const credential = new DefaultAzureCredential();
const serviceClient = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
);

// get existing key
const keyVaultKey = await serviceClient.getKey('MyRsaKey');

if (keyVaultKey?.name) {

    // get encryption client with key
    const cryptoClient = new CryptographyClient(keyVaultKey, credential);
    
    // get digest
    const digestableData = "MyLargeOrOneWayData";
    const digest = createHash('sha256')
      .update(digestableData)
      .update(process.env.SYSTEM_SALT || '')
      .digest();
    
    // sign digest
    const { result: signature } = await cryptoClient.sign(KnownSignatureAlgorithms.RS256, digest);
   
    // store signed digest in database

    // verify signature
    const { result: verified } = await cryptoClient.verify(KnownSignatureAlgorithms.RS256, digest, signature);
    console.log(`Verification ${verified ? 'succeeded' : 'failed'}.`);
}

キーを使用して小さなデータの署名と検証を行う

データの署名と検証を行うには、次のメソッドを使用します。

データ用:

  • signData でデータのブロックに署名します。
  • verifyData でデータを検証します。
import { createHash } from "crypto";
import { DefaultAzureCredential } from '@azure/identity';
import {
  CryptographyClient,
  KeyClient,
  KnownSignatureAlgorithms
} from '@azure/keyvault-keys';

// get service client
const credential = new DefaultAzureCredential();
const serviceClient = new KeyClient(
    `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`,
    credential
);

// get existing key
const keyVaultKey = await serviceClient.getKey('MyRsaKey');

if (keyVaultKey?.name) {

    // get encryption client with key
    const cryptoClient = new CryptographyClient(keyVaultKey, credential);
    
    const data = 'Hello you bright big beautiful world!';
    
    // sign
    const { result: signature } = await cryptoClient.signData(
        KnownSignatureAlgorithms.RS256,
        Buffer.from(data, 'utf8')
    );
    
    // verify signature
    const { result: verified } = await cryptoClient.verifyData(
        KnownSignatureAlgorithms.RS256,
        Buffer.from(data, 'utf8'),
        signature
    );
    console.log(`Verification ${verified ? 'succeeded' : 'failed'}.`);
}

次のステップ