Table des matières

Principe général

Dans le schéma qui suit, nous avons :

L'utilisateur dispose au moins d'un mot de passe qui servira de clé de chiffrement pour son authentification initiale, que nous appèlerons K_user pour que la suite soit bien lisible et compréhensible. Cette clé K_user est réputée connue des seuls utilisateur et AS.

Le serveur TGS dispose d'une clé de chiffrement que nous appèlerons K_tgs et que l'utilisateur ne connait pas.

Le serveur d'application dispose d'une clé de chiffrement K_service. Cette clé n'est connue que par le TGS et le serveur d'application.

Diagramme général

Authentification

L'utilisateur doit commencer par s'authentifier auprès du service d'authentification AS de kerberos. Généralement, cette opération se fait en indiquant le nom de l'utilisateur et son mot de passe dans un formulaire de saisie. Qu'il soit bien clair que ceci ne veut pas dire que le mot de passe va circuler sur le réseau.

Ledit utilisateur peut ainsi :

C'est simple, c'est beau. En résumé, l'utilisateur dispose d'une clé de session K_session et d'un TGT. Ce TGT ne peut servir qu'à ceux qui disposent de K_tgs c'est-à-dire au seul TGS qui a émis ce TGT. Si un utilisateur présente au TGS un TGT falsifié, le TGS ne pourra le déchiffrer et n'en fera rien. Il est donc primordial de s'assurer qu'il n'y a pas de fuites sur K_tgs, sans quoi, un faux TGS pourrait voir le jour.

Certains préfèrent une présentation plus graphique, la voici : Authentification

Demande de ticket de service

(3) Si l'utilisateur souhaite accéder à un service nécessitant son authentification (par exemple un serveur http), il devra demander au TGS un ticket de service spécifique. Le client envoie alors au service TGS serveur kerberos une TGS_REQ contenant :

(4) Le TGS va alors répondre en envoyant au client un ticket contenant :

Ainsi :

Ticket de service

Authentification du client auprès du service

(5) Le client peut maintenant utiliser son ticket de service pour s'authentifier auprès du service « kerbérisé ». Il envoie au serveur d'application :

(6) La réponse AP_REQ est optionnelle et dans notre cas de figure n'existe pas. Inutile donc de se prendre encore un peu plus la tête.

Lorsque le service Kerbérisé reçoit cette requête, comme il dispose de sa clé de service K_service, il peut déchiffrer le « blob » et donc récupérer :

Il peut alors déchiffrer l'identité ID_user, ainsi que le TimeStamp. La comparaison des deux identités permettra au service de s'assurer qu'il n'est pas grugé par un intrus, le Timestamp lui permettra de déduire que ce ticket n'est pas un ticket volé, puis rejoué par un intrus (sauf si l'intrus a pu le faire en moins de 5 minutes).

Il pourra alors ouvrir ses portes au client.

Et GSSAPI ?

Generic Security Services Application Programming Interface est en gros une couche d'abstraction qui va permettre de normaliser les discussions entre les services concernant la sécurité. Ainsi, Kerberos 5 implémentant GSSAPI, toute application qui implémente également GSSAPI doit pouvoir utiliser kerberos pour gérer les aspects de sécurité. Nous en verrons un exemple avec ssh.

Bref...

Lorsque vous saurez que cette présentation est largement simplifiée, dans la mesure où tous les protagonistes appartiennent au même royaume, que nous n'avons pas évoqué le principe des relations inter-royaumes ni de choses comme le renouvèlement, la transmission, la révocation de tickets et encore moins les éventuelles extensions du protocole, vous apprécierez d'autant mieux la complexité de l'usine.

Ce que nous avons vu devrait permettre de comprendre ce que nous allons observer dans le cas très simple de notre plate-forme de tests.