Quali sono i vantaggi e gli svantaggi della firma crittografica dei commit e dei tag in Git?

99

Quindi qualcuno ha revisionato il mio lavoro e mi ha detto che dovevo sempre firmare i miei commit e tag in modo crittografico. Quando gli è stato chiesto perché, non sapeva spiegarmelo e ha detto "È solo una buona cosa da fare".

Cercando di evitare un ovvio scenario di scimpanzè , perché dovrei davvero? Ci sono davvero tanti vantaggi distinti e nessuno svantaggio?

Quali sono i motivi pratici che mi spingono a firmare ogni commit e tag che faccio?

    
posta Madara Uchiha 22.09.2013 - 11:20
fonte

1 risposta

93

(Questo è in gran parte basato su Una storia Git Horror: integrità del repository con commit firmati - molto buona lettura e più informazioni di quelle che potrei inserire in una risposta.)

Ci sono diversi modi in cui un repository git può essere compromesso (questo non è un difetto di sicurezza, solo un fatto della vita - non si dovrebbe evitare di usare git a causa di questo). Ad esempio, qualcuno potrebbe aver spinto al tuo repository sostenendo di essere te stesso. O per quello, qualcuno potrebbe aver spinto al repository di altro che dichiara di essere te (qualcuno potrebbe spingere al proprio repository sostenendo di essere te stesso). Questa è solo una parte della vita in un DVCS.

Proprio come un esempio:

$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email [email protected]

Lì, ho cambiato la mia configurazione git per far finta di essere te. E ora posso rimandare e lasciare che quei commit si introducano in qualche modo nella build di produzione, e sembra che tu l'abbia fatto.

Con la firma dei commit (e dei tag), si può dimostrare che alcuni commit e tag sono stati da te (e le cose che non sono firmate non dovrebbero averlo inserito nella build di produzione). Questa è davvero la chiave per tutto questo: firmando commit hai detto che è il tuo lavoro.

L'aspetto del "tuo lavoro" è particolarmente importante nel kernel di Linux (e quindi git) che occasionalmente viene colpito da cause legali sul copyright. Firmando commit, dichiari di avere il diritto al software, rintraccia l'origine. Potrebbe essere che non hai accesso alla fonte che viene rivendicata come copyright e il reclamo è infondato. Può darsi che la società abbia dimenticato di lavorare per loro qualche anno fa e sotto la loro direzione ha aggiunto materiale al kernel, o qualsiasi altra cosa.

C'è qualche dibattito sul fatto che ogni commit debba essere firmato. Da firma GPG per il commit git? (torna in '09 ), Linus ha scritto:

Signing each commit is totally stupid. It just means that you automate it, and you make the signature worth less. It also doesn't add any real value, since the way the git DAG-chain of SHA1's work, you only ever need one signature to make all the commits reachable from that one be effectively covered by that one. So signing each commit is simply missing the point.

Molto altro sui pensieri sull'accesso a git può essere letto anche lì.

Detto questo, è comunque arrivato a git.

Sembra esserci un consenso di maggioranza sul fatto che la firma delle commit non è necessaria, ma la firma dei tag è molto buona. Quel post sul blog in alto suggerisce che si dovrebbe firmare tutto comunque. Come ho detto, c'è un dibattito su se ogni commit è necessario o meno.

La chiave per il dibattito "firma ogni commit" ha probabilmente a che fare con il flusso di lavoro che usi. La maggior parte delle persone fa un sacco di commit nel proprio repository locale, e quindi spinge quel set. Dovrebbe essere sufficiente per taggare la raccolta finale (supponendo, cioè, che tu assicuri che tutte le modifiche siano corrette). Se lavori in un ambiente in cui si muovono molti singoli commit, la distinzione tra un tag e un commit diventa meno ... distinta e il commit di firma può diventare più utile.

    
risposta data 22.09.2013 - 20:34
fonte

Leggi altre domande sui tag