pylapp

cryptographie

Au fait, pensez-vous Ă  signer vos commits ?

đŸ‡«đŸ‡· – mercredi 8 juin 2022

Mots clés : #Git, #commits, #GPG, #signature, #cryptographie

Au jour d'aujourd'hui il est indéniable que le code source a une valeur concrÚte, tant pour ce qui est de la propriété intellectuelle et du patrimoine logiciel qui en découle que pour les sommes investies pour son écriture. En 2009, un article de silicon.fr est paru et évoquait le fait que la valeur des logiciels open source est estimée à 400 milliards de dollars américains, explosant les quelques 25 milliards de dollars américains pour l'écosystÚme Linux !

Le fait est qu'il faut ĂȘtre capable de dĂ©finir, et surtout certifier, qui est l'auteur des commits pour savoir Ă  qui appartient la contribution induite. Lorsque des entreprises travaillent avec des filiales ou des prestataires, ou quand du code source est cĂ©dĂ© Ă  une fondation ou un organisme tiers, voire mĂȘme si les projets open source sont critiques, certifier l'origine du commit est rassurant.

Certes, on pourrait se contenter de regarder l'identité de l'auteur, avec par exemple la bonne vieille commande git log, permettant de ressortir l'historique Git et d'obtenir des détails sur les derniers commits.

Affichage d'un commit Git. On distingue notamment une section \

Sauf que le champ Author d'un commit est dĂ©finit par deux Ă©lĂ©ments : les champs user.name et user.email de la configuration Git (locale ou globale). Or, ces champs peuvent ĂȘtre dĂ©finis par n'importe qui, avec n'importe quelle valeur, sans vraiment de contrĂŽle naĂŻf et natif sur ça. Ils ne sont donc pas Ă  considĂ©rer comme fiables.

On pourrait aussi regarder du cÎté du Developer Certificate of Origin (DCO), avec notamment l'option -s dans la commande Git de commit. Or le DCO n'est pas dédié à cette question, mais plutÎt au fait que l'on confirme avoir les autorisations qui vont bien pour faire ce commit, apporter cette contribution, dans le respect des licences par exemple. C'est intéressant, mais pas adapté.

On peut par contre considérer la signature des commits via... une clé GPG (option -S).

L'idĂ©e est simple finalement : on crĂ©Ă© une clĂ© GPG, on la dĂ©pose dans son compte sur sa forge logicielle (GitHub ou GitLab par exemple), et on dĂ©finit dans le dĂ©pĂŽt en local la clĂ© Ă  utiliser (user.signingkey). Ainsi, on peut plus fortement confirmer que le commit est bien signĂ© par une personne via sa clĂ© GPG avec la mĂȘme adresse e-mail entre celle du commit et celle de la clĂ©. C'est d'ailleurs trĂšs pratique car via sa forge on peut facilement voir que le commit est vĂ©rifiĂ© (ellipse bleue), avec une clĂ© GPG d'identifiant donnĂ© (rectangle vert), et d'ailleurs signĂ© avec le DCO (rectangle rouge). Bon le hic c'est qu'il faut ĂȘtre capable d'avoir une autoritĂ© permettant de vĂ©rifier les clĂ©s, ou alors de placer une confiance aveugle envers la forge logicielle concernĂ©e dont peut-ĂȘtre les administrateurs seraient peu scrupuleux et capables d'altĂ©rer les clĂ©s publiques enregistrĂ©es. À creuser en tout cas.

Extrait de l'interface web de GitHub indiquant que le commit concerné est bien cryptographiquement vérifié

Affichage d'un commit Git. On distingue entre autres une rubrique concernant la clé GPG utilisée avec la cryptographie utilisée et l'empreinte de la clé ainsi que l'adresse email utilisée

Ce faisant, il est mĂȘme possible de vĂ©rifier a posteriori la signature d'un commit via la commande git show [commit] —show-signature, ou plus appropriĂ©e la commande git verify-commit [commit] qui renvoie le strict nĂ©cessaire en terme d'informations.

Message indiquant que le commit concerné est bien cryptographiquement vérifié

Remarque, ce serait intéressant d'avoir des hooks vérifiant au moment du commit s'il est bien signé. Dans des projets critiques ou sensibles, on saura ainsi s'il n'y a pas un contributeur tiers qui aurait commis des commits sans autorisation. Ce n'est pas suffisant, mais ça aide.

On peut ainsi voir que pour le commit donné, il y a bien eu une signature avec une clé GPG de type EDDSA avec l'identifiant indiqué (dont on retrouve une partie à la fin), et une note indiquant que c'est bien la bonne adresse email qui est utilisée.

Bref, pensez à signer vos commits. C'est rigolo et ça fait classe.

Pour en savoir davantage, je vous conseille cet article assez simple et aussi cette page de la documentation GitHub Ă  propos d'une nouvelle fonctionnalitĂ© chez eux : “le mode vigilant”.

— DerniĂšre mise Ă  jour : lundi 3 octobre 2022 PrĂ©cĂ©demment sur paper.wf —

Did you enjoy reading this blog? Give me a beer đŸș or use something else â€ïžâ€đŸ”„ Licensed under CC-BY-SA 4.0. Opinions are my own. To contact me, feel free to choose the most suitable medium for you, or for example Mastodon.