다음을 통해 공유


JavaScript에서 Azure Key Vault의 키를 사용하여 데이터 서명 및 확인

적절한 프로그래매틱 인증 자격 증명을 사용하여 KeyClient를 만든 다음, CryptographyClient를 만듭니다. 클라이언트를 사용하여 Azure Key Vault에서 키를 설정, 업데이트 및 순환합니다.

데이터 서명

데이터 서명에 대한 몇 가지 제안 사항:

  • 서명하기 전에 대용량 데이터 해시
  • 암호와 같은 서명 전 단방향 데이터 해시
  • 작은 2방향 데이터를 직접 서명할 수 있습니다.

키로 대용량 또는 단방향 데이터 서명 및 확인

다이제스트된 메시지에 서명하고 확인하려면 다음 방법을 사용합니다.

다이제스트된 메시지의 경우:

  • 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'}.`);
}

다음 단계