# ¿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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cpad/introduccion-a-directorio-activo-ad/como-funciona-kerberos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
