54 lines
2.4 KiB
Bash
54 lines
2.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Generate RSA key pairs for Alice, Bob, and Ken
|
||
|
|
echo "Generate keys"
|
||
|
|
openssl genrsa -out keys/alice_private.pem 2048
|
||
|
|
openssl rsa -in keys/alice_private.pem -pubout -out keys/alice_public.pem
|
||
|
|
|
||
|
|
openssl genrsa -out keys/bob_private.pem 2048
|
||
|
|
openssl rsa -in keys/bob_private.pem -pubout -out keys/bob_public.pem
|
||
|
|
|
||
|
|
openssl genrsa -out keys/ken_private.pem 2048
|
||
|
|
openssl rsa -in keys/ken_private.pem -pubout -out keys/ken_public.pem
|
||
|
|
|
||
|
|
# Create a simple message file
|
||
|
|
echo "Hello, Alice! This is a secure message from Bob." > msg/message.txt
|
||
|
|
|
||
|
|
echo "Signing"
|
||
|
|
# Bob signs the message
|
||
|
|
openssl dgst -sha256 -sign keys/bob_private.pem -out msg/message.sig msg/message.txt
|
||
|
|
|
||
|
|
echo "Encrypt"
|
||
|
|
# Generate a symmetric AES key
|
||
|
|
openssl rand -base64 32 > msg/symmetric.key
|
||
|
|
|
||
|
|
# Encrypt the message and the signature with the symmetric key
|
||
|
|
openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -in msg/message.txt -out enc/message_enc.txt -pass file:msg/symmetric.key
|
||
|
|
openssl enc -aes-256-cbc -salt -pbkdf2 -iter 100000 -in msg/message.sig -out enc/signature_enc.txt -pass file:msg/symmetric.key
|
||
|
|
|
||
|
|
# Encrypt the symmetric key with Alice's public RSA key
|
||
|
|
openssl rsautl -encrypt -inkey keys/alice_public.pem -pubin -in msg/symmetric.key -out enc/symmetric_enc.key
|
||
|
|
|
||
|
|
echo "Decrypt"
|
||
|
|
# Alice decrypts the symmetric key with her private RSA key
|
||
|
|
openssl rsautl -decrypt -inkey keys/alice_private.pem -in enc/symmetric_enc.key -out dec/symmetric_dec.key
|
||
|
|
|
||
|
|
# Alice decrypts the message and the signature with the symmetric key
|
||
|
|
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in enc/message_enc.txt -out dec/message_dec.txt -pass file:dec/symmetric_dec.key
|
||
|
|
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in enc/signature_enc.txt -out dec/signature_dec.sig -pass file:dec/symmetric_dec.key
|
||
|
|
|
||
|
|
echo "Verify"
|
||
|
|
# Alice verifies the signature from Bob
|
||
|
|
if openssl dgst -sha256 -verify keys/bob_public.pem -signature dec/signature_dec.sig dec/message_dec.txt; then
|
||
|
|
echo "Signature verification successful: The message is from Bob."
|
||
|
|
else
|
||
|
|
echo "Signature verification failed: The message is not from Bob."
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Attempt to verify the message as if it came from Ken
|
||
|
|
if openssl dgst -sha256 -verify keys/ken_public.pem -signature dec/signature_dec.sig dec/message_dec.txt; then
|
||
|
|
echo "Signature verification false positive: The message is from Ken."
|
||
|
|
else
|
||
|
|
echo "Signature verification correctly failed: The message is not from Ken."
|
||
|
|
fi
|