$ gpg --verify php-7.1.1.tar.xz.asc php-7.1.1.tar.xz
gpg: Signature made Tue 17 Jan 2017 21:46:34 CET
gpg: using RSA key 0xF9BA0ADA31CBD89E
gpg: requesting key 0xF9BA0ADA31CBD89E from hkps server hkps.pool.sks-keyservers.net
gpg: key 0xF9BA0ADA31CBD89E: public key "Joe Watkins <krakjoe@php.net>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
gpg: Good signature from "Joe Watkins <krakjoe@php.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5289 95BF EDFB A719 1D46 839E F9BA 0ADA 31CB D89E
La signature est bonne ...
... mais on ne sait pas d’où vient la clé.
(On bénéficie quand même d’un niveau d’indirection
supplémentaire par rapport à MD5 ou SHA-256.)
OpenPGP : les grands principes
Clés publiques / privées
Clés associées à des user ids
Nom, adresse électronique
Photo
Clés identifiées par leur empreinte
Partage de clés « hors bande »
Réseau de serveurs de clés
Trousseaux de clés
Confiance établie par signature de clé
Par n’importe quelle autre clé
(presque)
Appréciation individuelle de la valeur des
signatures
L’arbre des clés PHP (avant...)
On peut encore mieux faire !
Une signature de confiance
Sur un tag du noyau Linux :
$ git tag -v v4.9
object 69973b830859bc6529a7a0468ba0d80ee5117826
type commit
tag v4.9
tagger Linus Torvalds <torvalds@linux-foundation.org> 1481483882 -0800
Linux 4.9
gpg: Signature made Sun 11 Dec 2016 20:18:02 CET
gpg: using RSA key 79BE3E4300411886
gpg: Good signature from "Linus Torvalds <torvalds@linux-foundation.org>" [full]
Une signature de confiance
Sur une archive du noyau Linux :
$ gpg --verify linux-4.9.8.tar.sign linux-4.9.8.tar
gpg: Signature made Sat 04 Feb 2017 09:47:47 CET
gpg: using RSA key 0x38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman (Linux kernel stable release signing key)
<greg@kroah.com>" [full]
L’arbre des clés Linux
Le web of trust
Chaque ensemble de clés connectées constitue
une toile de confiance
La multiplication des connexions rend la toile
résistante
Chacun peut décider du niveau de confiance de
chaque signataire (owner trust)
GnuPG calcule le niveau de confiance de chaque clé
La toile la plus importante est le strong
set
Près de 60 000 clés
Distance moyenne de 6,2
9,2 signatures en moyenne (la clé la
plus signée en compte 660)
Très résistant (la taille du
strong set décroît de façon linéaire avec la suppression
de clés aléatoires)
No trust value assigned to:
4096R/0x38DBBDC86092693E 2011-09-23
"Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>"
Primary key fingerprint: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
s = skip this key
q = quit
Your decision?
Le modèle de confiance GnuPG
« Owner trust » : valeur donnée aux liens (signatures) entre
clés
N/A
aucune
marginale
totale
Critères de validité d'une clé :
elle a suffisamment de signatures de confiance
signature directe
signature par une clé avec une confiance totale
signatures par trois clés avec une confiance marginale
le chemin de retour se fait en cinq liens ou moins
Une tentative de simplification : TOFU
Trust on first use
Détection de changement
Clés marginales par défaut
Linux et OpenPGP
Modèle de développement ouvert
Contributions ouvertes à tous, par
patches échangés par courrier électronique
ou sur Facebook