tech:signer_des_fichiers
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| tech:signer_des_fichiers [2025/11/11 16:16] – Jean-Baptiste | tech:signer_des_fichiers [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Signer des fichiers | ||
| + | |||
| + | Voir | ||
| + | * [[sign_signify-openbsd|signify-openbsd]] | ||
| + | * [minisign](https:// | ||
| + | |||
| + | ## Avec ssh_keygen | ||
| + | |||
| + | ## Avec OpenSSL | ||
| + | |||
| + | |||
| + | ### Création de la paire de clefs | ||
| + | |||
| + | Génération de la clef privé | ||
| + | ~~~bash | ||
| + | openssl genrsa -out priv.pem 4096 | ||
| + | ~~~ | ||
| + | |||
| + | Génération de la clef public | ||
| + | ~~~bash | ||
| + | openssl rsa -in priv.pem -pubout -out public.pem | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Signer | ||
| + | |||
| + | ~~~bash | ||
| + | openssl dgst -sha256 -sign priv.pem -out plop.txt.sha256 plop.txt | ||
| + | openssl base64 -in plop.txt.sha256 -out / | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Vérifier la signature | ||
| + | |||
| + | ~~~bash | ||
| + | openssl base64 -d -in plop.txt.sign -out / | ||
| + | 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` | ||
| + | ~~~bash | ||
| + | #! /bin/bash | ||
| + | |||
| + | set -o nounset | ||
| + | |||
| + | DELAY=60 | ||
| + | |||
| + | KEY_PRIV=priv.pem | ||
| + | KEY_PUB=public.pem | ||
| + | SIGN_FILE=plop.txt.sign | ||
| + | TMP_SIGN_FILE=/ | ||
| + | DATA_FILE=plop.txt | ||
| + | |||
| + | enc_create_key_priv() { | ||
| + | openssl genrsa -out " | ||
| + | } | ||
| + | |||
| + | enc_create_key_pub() { | ||
| + | openssl rsa -in " | ||
| + | } | ||
| + | |||
| + | enc_sign() { | ||
| + | openssl dgst -sha256 -sign " | ||
| + | openssl base64 -in " | ||
| + | } | ||
| + | |||
| + | err() { | ||
| + | local err_code=$1 | ||
| + | shift | ||
| + | echo $* >&2 | ||
| + | exit $err_code | ||
| + | } | ||
| + | |||
| + | enc_verif_sign() { | ||
| + | openssl base64 -d -in " | ||
| + | openssl dgst -sha256 -verify " | ||
| + | if [ $? -ne 0 ] | ||
| + | then | ||
| + | err 1 " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | date_epoch() { | ||
| + | echo $(date +%s) | ||
| + | } | ||
| + | |||
| + | read_date_file() { | ||
| + | echo "$(cat $DATA_FILE)" | ||
| + | } | ||
| + | |||
| + | create_date_file() { | ||
| + | date_epoch > " | ||
| + | enc_sign | ||
| + | } | ||
| + | |||
| + | check_date() { | ||
| + | enc_verif_sign | ||
| + | local -i epoch_file=" | ||
| + | local -i epoch_now=" | ||
| + | echo " | ||
| + | if (( epoch_file > epoch_now )) | ||
| + | then | ||
| + | err 2 " | ||
| + | elif (( $epoch_file < $(( epoch_now - DELAY )) )) | ||
| + | then | ||
| + | err 3 " | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # | ||
| + | #enc_sign | ||
| + | |||
| + | enc_verif_sign | ||
| + | read_date_file | ||
| + | check_date | ||
| + | ~~~ | ||
| + | |||
