{{tag>Brouillon Securité OpenSSL Crypto Sign Bash CA}}
= Signer des fichiers
Voir
* [[sign_signify-openbsd|signify-openbsd]]
* [[https://jedisct1.github.io/minisign/|minisign]]
== Avec ssh_keygen
== Avec OpenSSL
=== Création de la paire de clefs
Génération de la clef privé
openssl genrsa -out priv.pem 4096
Génération de la clef public
openssl rsa -in priv.pem -pubout -out public.pem
=== Signer
openssl dgst -sha256 -sign priv.pem -out plop.txt.sha256 plop.txt
openssl base64 -in plop.txt.sha256 -out /tmp/plop.txt.sign
=== Vérifier la signature
openssl base64 -d -in plop.txt.sign -out /tmp/plop.txt.sha256
openssl dgst -sha256 -verify public.pem -signature plop.txt.sha256 plop.txt
== Exemple de script pour signer
Ce script crée un fichier contenant une date
Ce fichier date est signé
La signature est vérifiée
Un délais est défini au delà duquel il est considéré comme expiré.
''poc_crypto_sign.sh''
#! /bin/bash
set -o nounset
DELAY=60
KEY_PRIV=priv.pem
KEY_PUB=public.pem
SIGN_FILE=plop.txt.sign
TMP_SIGN_FILE=/tmp/plop.txt.sha256
DATA_FILE=plop.txt
enc_create_key_priv() {
openssl genrsa -out "$KEY_PRIV" 4096
}
enc_create_key_pub() {
openssl rsa -in "$KEY_PRIV" -pubout -out "$KEY_PUB"
}
enc_sign() {
openssl dgst -sha256 -sign "$KEY_PRIV" -out "$TMP_SIGN_FILE" "$DATA_FILE"
openssl base64 -in "$TMP_SIGN_FILE" -out "$SIGN_FILE"
}
err() {
local err_code=$1
shift
echo $* >&2
exit $err_code
}
enc_verif_sign() {
openssl base64 -d -in "$SIGN_FILE" -out "$TMP_SIGN_FILE"
openssl dgst -sha256 -verify "$KEY_PUB" -signature "$TMP_SIGN_FILE" "$DATA_FILE" > /dev/null
if [ $? -ne 0 ]
then
err 1 "Error. Sign. Verification Failure"
fi
}
date_epoch() {
echo $(date +%s)
}
read_date_file() {
echo "$(cat $DATA_FILE)"
}
create_date_file() {
date_epoch > "$DATA_FILE"
enc_sign
}
check_date() {
enc_verif_sign
local -i epoch_file="$(read_date_file)"
local -i epoch_now="$(date_epoch)"
echo "DEBUG: $epoch_file > $(( epoch_now - DELAY ))"
if (( epoch_file > epoch_now ))
then
err 2 "Error. Time in futur"
elif (( $epoch_file < $(( epoch_now - DELAY )) ))
then
err 3 "Error. Expired"
else
echo "OK"
fi
}
#enc_create_key_priv
#enc_create_key_pub
#create_date_file
#enc_sign
enc_verif_sign
read_date_file
check_date