6 votes

Comment fonctionne la signature d'engagement ?

Je me demande actuellement comment fonctionne exactement la signature de git commit.

J'ai essayé de le découvrir mais je n'ai pas trouvé de documentation technique exacte. Je sais comment faire pour signer un commit git mais je me demande ce que fait exactement git pour signer un commit.

Qu'est-ce qui est signé exactement ? Est-ce que ce sont les données complètes du référentiel au moment du commit, donc les données comme le message de commit etc. et les données de tous les fichiers ? Ou est-ce seulement le commit avec les pointeurs vers les fichiers contenus, etc ?

3voto

torek Points 25463

Bien que ce ne soit documenté nulle part, l'examen des code source montre que c'est le contenu entier de l'objet commit. Ce contenu est ensuite modifié en insérer la signature, de sorte que le processus de vérification doit extraire la signature dans un tampon séparé et transmettre les données originales, avant l'insertion de la signature, au signataire GPG.

Les données de signature GPG interviennent ensuite dans le calcul de la somme de contrôle SHA-1 du commit pour devenir l'ID de hachage du commit. Voir gpg-interface.c y commit.c , fonctions sign_buffer y do_sign_commit respectivement. La signature de l'étiquette est en builtin/tag.c (voir fonction do_sign et son appelant) ; les balises signées ont leurs signatures ajoutées plutôt qu'insérées, mais sinon cela fonctionne à peu près de la même manière.

0voto

MMGen Points 1

C'est l'objet commit brut renvoyé par git cat-file (avec la signature enlevée) qui est signé. Si HEAD est un commit signé, vous pouvez vérifier la signature à la main comme suit :

git cat-file commit HEAD > signed-commit
grep -B 9999 'BEGIN PGP SIGNATURE-----' signed-commit | head -n -1 > signed-commit.stripped
grep -A 9999 'END PGP SIGNATURE-----' signed-commit | tail -n +2 >> signed-commit.stripped
sed 's/^gpgsig //' signed-commit | sed 's/^ //' > signed-commit.sig
gpg --verify signed-commit.sig signed-commit.stripped

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X