Outils pour utilisateurs

Outils du site


tech:gpg_-_script_-_batch_-_auto_encrypt

GPG - Script - batch - auto encrypt

Voir aussi :

Par défaut GPG utilise le dossier « .gnupg » dans le HOMEDIR de l'utilisateur. Il contient notamment la configuration, le trousseau de clefs, le trust database etc…

Or notre besoin actuel est juste de pouvoir chiffrer un fichier avec une clef publique déterminée. Je propose une approche “stateless” où le trousseau de clefs serait créé avant chaque chiffrement et détruit à la fin.

Par exemple pour chiffrer “secret_plan_to_rule_the_world.txt” avec la clef publique de Bob :

bash gpg-auto-encrypt.sh -k bob.pub.asc -i secret_plan_to_rule_the_world.txt -o encrypted-data.txt.gpg

Le fichier “encrypted-data.txt.gpg” a été généré et peut être envoyé. Seul Bob pourra le déchiffrer.

En cas de changement de clef, il suffit de remplacer le fichier “bob.pub.asc”

Il manque cruellement la vérification de Signature \ Sans signature rien de garantie que le fichier chiffré n’a été altéré volontairement ou pour des causes techniques.\ Sans signature vous pouvez faire confiance sur le fait que seul Bob pourra déchiffré le fichier (à condition d’être certain de la clef de Bob et que Bob ai bien protégé sa clef privée) \ Mais Bob ne peut pas avoir confiance en votre fichier.

gpg-auto-encrypt.sh

#! /bin/bash
 
set -euo pipefail
export LC_ALL=C
 
SCRIPT_NAME="$(basename "$0")"
install -d "${HOME}/tmp/"
GNUPGHOME="$(mktemp -d -p "${HOME}/tmp/" --suffix=_"${SCRIPT_NAME%%.*}")"
trap 'rm -rf "$GNUPGHOME"' EXIT
 
gpg_import() {
	PUBKEY_ID=$(gpg --batch --import "${PUBKEY_FILE}" 2>&1 | awk '/^gpg: key / {gsub(":", "") ; print $3 ;}')
}
 
gpg_encrypt() {
	gpg --batch --trust-model always --output "$OUTPUT_FILE" -r "${PUBKEY_ID}" --encrypt "$DATA_FILE"
}
 
main() {
	gpg_import
	gpg_encrypt
}
 
usage() {
	cat <<-EOF
		Usage: $0 -k KEY_FILE -i INPUT_FILE -o OUTPUT_FILE
 
		Mandatory arguments:
		-k FILE    Public key file.
		-i FILE    File to encrypt.
		-o FILE    Encrypted file to write.
 
		Example :
		$0 -k bob.pub.asc -i secret_plan_to_rule_the_world.txt -o encrypted-data.txt.gpg
 
	EOF
}
 
ARGS_COUNT="$#"
 
while [ "${1-}" != "" ]; do
	case $1 in
	-k)
		shift
		PUBKEY_FILE=$1
		;;
	-i)
		shift
		DATA_FILE=$1
		;;
	-o)
		shift
		OUTPUT_FILE=$1
		;;
	-h | --help)
		usage
		exit 0
		;;
	--) # End of all options
		shift
		break
		;;
	-*)
		echo "SCRIPT_NAME: invalid option" >&2
		echo "Try '$SCRIPT_NAME --help' for more information." >&2
		exit 1
		;;
	*)
		usage
		;;
	esac
	shift
done
 
if [ "$ARGS_COUNT" -lt 6 ]; then
	usage
	exit 1
fi
 
main
tech/gpg_-_script_-_batch_-_auto_encrypt.txt · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki