openssl

Sign and verify data

RSA verification process is similar to RSA encryption/decryption process with one major difference.

Sign and verify data

RSA verification process is similar to RSA encryption/decryption process with one major difference.

We sign the data with a private key and verify with a public key.

This way a public key verifies the authenticity of a message signed by a secret private key.

Create a key:

First let’s generate a random 2048-bit RSA key pair (put xoxo for the password).

-des3 option encrypts the key with DES3 symmetric-key block cipher $ openssl genrsa -des3 -out xo_private.pem 2048

Extract the public key in the PEM format. $ openssl rsa -in xo_private.pem -outform PEM -pubout -out xo_public.pem

Sign:

Here is where it gets a little tricky.

-raw option forces rsautl not to use any padding.

So the input data must be exactly 256 characters long. $ openssl rsautl -sign -raw -inkey xo_private.pem -in xo_data.bin -out xo_signed.bin

Verify:

$ openssl rsautl -verify -raw -hexdump -inkey xo_public.pem -pubin -in xo_signed.bin -out xo_verified.hex

Here is simple way to convert a hex string into ASCii:

$ xxd -r -p xo_data.hex xo_data.txt

And ASCii to hex:

$ xxd -i xo_data.txt

Subscribe to The infinite monkey theorem

Get the latest posts delivered right to your inbox