@Override
public Sign.SignatureData callHSM(byte() dataToSign, HSMPass pass) {
// Create the SignRequest for AWS KMS
var signRequest =
SignRequest.builder()
.keyId(keyID)
.message(SdkBytes.fromByteArray(dataHash))
.messageType(MessageType.DIGEST)
.signingAlgorithm(SigningAlgorithmSpec.ECDSA_SHA_256)
.build();
// Sign the data using AWS KMS
var signResult = kmsClient.sign(signRequest);
var signatureBuffer = signResult.signature().asByteBuffer();
// Convert the signature to byte array
var signBytes = new byte(signatureBuffer.remaining());
signatureBuffer.get(signBytes);
// Verify signature osn KMS
var verifyRequest =
VerifyRequest.builder()
.keyId(keyID)
.message(SdkBytes.fromByteArray(dataHash))
.messageType(MessageType.DIGEST)
.signingAlgorithm(SigningAlgorithmSpec.ECDSA_SHA_256)
.signature(SdkBytes.fromByteArray(signBytes))
.build();
var verifyRequestResult = kmsClient.verify(verifyRequest);
if (!verifyRequestResult.signatureValid()) {
throw new RuntimeException("KMS signature is not valid!");
}
var signature = CryptoUtils.fromDerFormat(signBytes);
return Sign.createSignatureData(signature, pass.getPublicKey(), dataHash);
}
PASTABA!
Norint tai tinkamai naudoti, AWS KMS sukurtos rakto specifikacijos tipas turi būti ECC_SECG_P256K1. Tai būdinga kriptovaliutų erdvei, ypač EVM. Naudojant bet kurį kitą raktą, sukūrus duomenų parašą bus rodoma neatitikimo klaida.
Pavyzdys
Čia yra trumpas pavyzdys, kaip iškviesti callHSM metodą iš biblioteka:
public static void main(String() args) throws Exception {
KmsClient client = KmsClient.create();
// extract the KMS key
byte() derPublicKey = client
.getPublicKey((var builder) -> {
builder.keyId(kmsKeyId);
})
.publicKey()
.asByteArray();
byte() rawPublicKey = SubjectPublicKeyInfo
.getInstance(derPublicKey)
.getPublicKeyData()
.getBytes();
BigInteger publicKey = new BigInteger(1, Arrays.copyOfRange(rawPublicKey, 1, rawPublicKey.length));
HSMPass pass = new HSMPass(null, publicKey);
HSMRequestProcessor signer = new HSMAwsKMSRequestProcessor(client, kmsKeyId);
signer.callHSM(data, pass);
}
Išvada
AWS KMS su integruota HSM funkcija siūlo galingą sprendimą saugiai valdyti ir pasirašyti kriptografines operacijas. Nepaisant pradinių iššūkių, su kuriais susiduria vartotojai, integruodami AWS KMS su „Hyperledger Web3j“, HSMAwsKMSRequestProcessor klasė palengvino pritaikymą ir įgyvendinimą. Šis paruoštas naudoti sprendimas supaprastina sąveiką su AWS KMS, todėl vartotojai gali saugiai pasirašyti duomenis ir operacijas su minimalia konfigūracija. Naudodamos šį įrankį, organizacijos gali pagerinti savo saugos poziciją ir pasinaudoti AWS debesies savųjų HSM galimybių patogumu.