# ¿Como funciona Kerberos?

El protocolo Kerberos es un sistema de autenticación de red que utiliza criptografía de clave simétrica para proporcionar autenticación fuerte para las comunicaciones cliente-servidor. La versión más comúnmente utilizada es Kerberos V5, que está diseñada para funcionar en redes inseguras y proporcionar autenticación mutua entre el cliente y el servidor. Veamos los detalles del flujo de autenticación y los términos asociados:

## <mark style="color:red;">**Componentes Principales:**</mark>

1. <mark style="color:red;">**Key Distribution Center (KDC):**</mark> Es una instancia de confianza centralizada que provee los servicios AS y TGS.
2. <mark style="color:red;">**Authentication Service (AS):**</mark> Es el servicio dentro del KDC que autentica a los usuarios y servicios y emite TGTs.
3. <mark style="color:red;">**Ticket Granting Service (TGS):**</mark> Es otro servicio dentro del KDC que emite tickets de servicio para acceder a recursos después de que el cliente ha sido autenticado inicialmente por el AS.
4. <mark style="color:red;">**Ticket Granting Ticket (TGT):**</mark> Es un "boleto" que el AS emite a los clientes cuando se autentican con éxito, que a su vez es utilizado para solicitar tickets de servicio del TGS.

### <mark style="color:red;">**Términos Adicionales:**</mark>

* <mark style="color:red;">**Principal:**</mark> En Kerberos, un principal es una entidad única (usuario o servicio) identificada por su nombre completo en el dominio.
* <mark style="color:red;">**Session Key:**</mark> Es una clave criptográfica simétrica utilizada para cifrar y descifrar comunicaciones durante una sesión específica.
* <mark style="color:red;">**Pre-authentication:**</mark> Es un proceso donde el cliente debe demostrar conocimiento de la contraseña antes de que el AS emita un TGT, para prevenir ataques de repetición.
* <mark style="color:red;">**Service Ticket:**</mark> Es un ticket emitido por el TGS que permite al cliente acceder a un servicio en particular.
* <mark style="color:red;">**Realm:**</mark> Es un dominio administrativo para Kerberos, generalmente corresponde a un dominio en una red.

## <mark style="color:red;">**Flujo de Autenticación:**</mark>

<figure><img src="https://1580805812-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzDuZE3U19tNNqSAmcpyE%2Fuploads%2FR2UmITOjuf8f5q92WkdY%2Fimage.png?alt=media&#x26;token=bd6705e7-1bd6-4db8-b304-c895f3da6acf" alt=""><figcaption></figcaption></figure>

1. <mark style="color:red;">**Pre-Autenticación:**</mark>
   * El usuario inicia sesión en su cliente Kerberos proporcionando su identificador de usuario y contraseña.
   * El cliente Kerberos genera una clave de cifrado a partir de la contraseña del usuario y la utiliza para cifrar un timestamp, enviando este paquete al AS como parte de su AS\_REQ.
2. <mark style="color:red;">**AS\_REQ / AS\_REP:**</mark>
   * El AS valida la pre-autenticación y luego crea el TGT y una clave de sesión para el usuario.
   * El TGT está cifrado con la clave secreta del servicio TGS, y solo el TGS puede descifrarlo.
   * El AS envía de vuelta al cliente el TGT y la clave de sesión (AS\_REP), cifrada con la clave generada a partir de la contraseña del usuario.
3. <mark style="color:red;">**TGS\_REQ / TGS\_REP:**</mark>
   * Cuando el cliente necesita acceder a un servicio, cifra una solicitud con la clave de sesión y envía esta solicitud junto con el TGT al TGS.
   * El TGS descifra el TGT, verifica la validez y autenticidad de la solicitud y genera un ticket de servicio para el recurso solicitado, cifrado con la clave del servicio en cuestión.
4. <mark style="color:red;">**Acceso al Servicio:**</mark>
   * El cliente recibe el ticket de servicio y la nueva clave de sesión asociada, y se conecta al servidor del recurso solicitado, enviando el ticket de servicio y una autenticación cifrada con la clave de sesión.
   * El servidor de recursos descifra el ticket de servicio, verifica la autenticidad de la autenticación del cliente y, si todo es correcto, permite el acceso.

## <mark style="color:red;">**Ejemplo práctico:**</mark>

Supongamos que Gerh quiere acceder a un servidor de archivos en su empresa:

1. **Gerh** ingresa su nombre de usuario y contraseña en su cliente Kerberos.
2. El cliente solicita un TGT al AS pre-autenticándose con un timestamp cifrado.
3. El AS valida la solicitud, crea un TGT y una clave de sesión, y los envía a Gerh cifrados con su clave de contraseña.
4. **Gerh** desea acceder al servidor de archivos y envía un TGS\_REQ al TGS, incluyendo el TGT y una solicitud cifrada con su clave de sesión.
5. El TGS valida el TGT, crea un ticket de servicio para el servidor de archivos, y se lo envía a **Gerh**.
6. **Gerh** accede al servidor de archivos presentando el ticket de servicio y su autenticación cifrada.
7. El servidor valida el ticket y la autenticación, y permite a **Gerh** acceder a los archivos.

Este proceso garantiza que solo usuarios autenticados y con los permisos correctos puedan acceder a los recursos protegidos en la red. Además, la autenticación mutua asegura tanto al cliente como al servidor que están comunicándose con las partes correctas.
