Verifies a digital signature that was generated by the Sign operation.
Verification confirms that an authorized user signed the message with the specified KMS key and signing algorithm, and the message hasn’t changed since it was signed. If the signature is verified, the value of the SignatureValid
field in the response is True
. If the signature verification fails, the Verify
operation fails with an KMSInvalidSignatureException
exception.
A digital signature is generated by using the private key in an asymmetric KMS key. The signature is verified by using the public key in the same asymmetric KMS key. For information about asymmetric KMS keys, see Asymmetric KMS keys in the Key Management Service Developer Guide .
To verify a digital signature, you can use the Verify
operation. Specify the same asymmetric KMS key, message, and signing algorithm that were used to produce the signature.
You can also verify the digital signature by using the public key of the KMS key outside of KMS. Use the GetPublicKey operation to download the public key in the asymmetric KMS key and then use the public key to verify the signature outside of KMS. To verify a signature outside of KMS with an SM2 public key, you must specify the distinguishing ID. By default, KMS uses 1234567812345678
as the distinguishing ID. For more information, see Offline verification with SM2 key pairs in Key Management Service Developer Guide . The advantage of using the Verify
operation is that it is performed within KMS. As a result, it’s easy to call, the operation is performed within the FIPS boundary, it is logged in CloudTrail, and you can use key policy and IAM policy to determine who is authorized to use the KMS key to verify signatures.
The KMS key that you use for this operation must be in a compatible key state. For details, see Key states of KMS keys in the Key Management Service Developer Guide .
Cross-account use : Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify the key ARN or alias ARN in the value of the
KeyId
parameter.Required permissions : kms:Verify (key policy)
Related operations : Sign
See also: AWS API Documentation
See ‘aws help’ for descriptions of global parameters.
verify
--key-id <value>
--message <value>
[--message-type <value>]
--signature <value>
--signing-algorithm <value>
[--grant-tokens <value>]
[--cli-input-json | --cli-input-yaml]
[--generate-cli-skeleton <value>]
--key-id
(string)
Identifies the asymmetric KMS key that will be used to verify the signature. This must be the same KMS key that was used to generate the signature. If you specify a different KMS key, the signature verification fails.
To specify a KMS key, use its key ID, key ARN, alias name, or alias ARN. When using an alias name, prefix it with
"alias/"
. To specify a KMS key in a different Amazon Web Services account, you must use the key ARN or alias ARN.For example:
Key ID:
1234abcd-12ab-34cd-56ef-1234567890ab
Key ARN:
arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
Alias name:
alias/ExampleAlias
Alias ARN:
arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias
To get the key ID and key ARN for a KMS key, use ListKeys or DescribeKey . To get the alias name and alias ARN, use ListAliases .
--message
(blob)
Specifies the message that was signed. You can submit a raw message of up to 4096 bytes, or a hash digest of the message. If you submit a digest, use the
MessageType
parameter with a value ofDIGEST
.If the message specified here is different from the message that was signed, the signature verification fails. A message and its hash digest are considered to be the same message.
--message-type
(string)
Tells KMS whether the value of the
Message
parameter is a message or message digest. The default value, RAW, indicates a message. To indicate a message digest, enterDIGEST
.Warning
Use the
DIGEST
value only when the value of theMessage
parameter is a message digest. If you use theDIGEST
value with a raw message, the security of the verification operation can be compromised.Possible values:
RAW
DIGEST
--signature
(blob)
The signature that the
Sign
operation generated.
--signing-algorithm
(string)
The signing algorithm that was used to sign the message. If you submit a different algorithm, the signature verification fails.
Possible values:
RSASSA_PSS_SHA_256
RSASSA_PSS_SHA_384
RSASSA_PSS_SHA_512
RSASSA_PKCS1_V1_5_SHA_256
RSASSA_PKCS1_V1_5_SHA_384
RSASSA_PKCS1_V1_5_SHA_512
ECDSA_SHA_256
ECDSA_SHA_384
ECDSA_SHA_512
SM2DSA
--grant-tokens
(list)
A list of grant tokens.
Use a grant token when your permission to call this operation comes from a new grant that has not yet achieved eventual consistency . For more information, see Grant token and Using a grant token in the Key Management Service Developer Guide .
(string)
Syntax:
"string" "string" ...
--cli-input-json
| --cli-input-yaml
(string)
Reads arguments from the JSON string provided. The JSON string follows the format provided by --generate-cli-skeleton
. If other arguments are provided on the command line, those values will override the JSON-provided values. It is not possible to pass arbitrary binary values using a JSON-provided value as the string will be taken literally. This may not be specified along with --cli-input-yaml
.
--generate-cli-skeleton
(string)
Prints a JSON skeleton to standard output without sending an API request. If provided with no value or the value input
, prints a sample input JSON that can be used as an argument for --cli-input-json
. Similarly, if provided yaml-input
it will print a sample input YAML that can be used with --cli-input-yaml
. If provided with the value output
, it validates the command inputs and returns a sample output JSON for that command. The generated JSON skeleton is not stable between versions of the AWS CLI and there are no backwards compatibility guarantees in the JSON skeleton generated.
See ‘aws help’ for descriptions of global parameters.
Note
To use the following examples, you must have the AWS CLI installed and configured. See the Getting started guide in the AWS CLI User Guide for more information.
Unless otherwise stated, all examples have unix-like quotation rules. These examples will need to be adapted to your terminal’s quoting rules. See Using quotation marks with strings in the AWS CLI User Guide .
To verify a digital signature
The following verify
example verifies a cryptographic signature for a short message. The key ID, message, message type, and signing algorithm must be same ones that were used to sign the message. The signature that you specify cannot be base64-encoded. For help decoding the signature that the sign
command returns, see the sign
command examples.
The output of the command includes a Boolean SignatureValid
field that indicates that the signature was verified. If the signature validation fails, the verify
command fails, too.
Before running this command, replace the example key ID with a valid key ID from your AWS account.
aws kms verify \
--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
--message fileb://originalString \
--message-type RAW \
--signing-algorithm RSASSA_PKCS1_V1_5_SHA_256 \
--signature fileb://ExampleSignature
Output:
{
"KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
"SignatureValid": true,
"SigningAlgorithm": "RSASSA_PKCS1_V1_5_SHA_256"
}
For more information about using asymmetric KMS keys in AWS KMS, see Using asymmetric keys in the AWS Key Management Service Developer Guide.
KeyId -> (string)
The Amazon Resource Name (key ARN ) of the asymmetric KMS key that was used to verify the signature.
SignatureValid -> (boolean)
A Boolean value that indicates whether the signature was verified. A value of
True
indicates that theSignature
was produced by signing theMessage
with the specifiedKeyID
andSigningAlgorithm.
If the signature is not verified, theVerify
operation fails with aKMSInvalidSignatureException
exception.
SigningAlgorithm -> (string)
The signing algorithm that was used to verify the signature.