¿Por qué Git necesita empujones firmados?

En las notas de la versión de Git 2.2.0 , describe una nueva opción para git push , --signed :

 "git push" learned "--signed" push, that allows a push (ie request to update the refs on the other side to point at a new history, together with the transmission of necessary objects) to be signed, so that it can be verified and audited, using the GPG signature of the person who pushed, that the tips of branches at a public repository really point the commits the pusher wanted to, without having to "trust" the server. 

Por lo tanto, parece que los datos que se envían al server durante el envío se firman para que el server pueda verificar y registrar quién realizó el envío. En las páginas man , puedes confirmar esto:

 --signed GPG-sign the push request to update refs on the receiving side, to allow it to be checked by the hooks and/or be logged. See git-receive-pack[1] for the details on the receiving end. 

Busca en las páginas man para git-receive-pack debajo de pre-receive ganchos de pre-receive y post-recieve pre-receive para ver exactamente cómo verificar un push firmado.

Parece que todo eso ayuda al server a verificar quién está haciendo el push realmente es quién dicen que son.

¿Cómo funciona el git push --signed ayuda (el empujador) a no tener que "confiar" en el server? Todo lo que he visto hasta ahora parece indicar que ayuda al server a confiar en usted. Más importante aún, ¿por qué los commits firmados y las tags firmadas no son suficientes para enviar a un server que no es de confianza? ¿Por qué incluso necesitamos empujones firmados?

Aquí hay un extracto del post de compromiso que introdujo impulsos firmados:

 While signed tags and commits assert that the objects thusly signed came from you, who signed these objects, there is not a good way to assert that you wanted to have a particular object at the tip of a particular branch. My signing v2.0.1 tag only means I want to call the version v2.0.1, and it does not mean I want to push it out to my 'master' branch---it is likely that I only want it in 'maint', so the signature on the object alone is insufficient. The only assurance to you that 'maint' points at what I wanted to place there comes from your trust on the hosting site and my authentication with it, which cannot easily audited later. 

Por lo tanto, aunque la confirmación esté firmada, no puede estar seguro de que el autor pretendió que la confirmación se envíe al master sucursal oa la function super-experimental-feature sucursal. Los bashs firmados permiten que el server mantenga un logging de cada evento push y su firma. Este logging se puede verificar para ver que cada compromiso estaba destinado a estar en una twig en particular.