# Certificado anónimo rastreable

Un Certificado anónimo rastreable, también conocido como TAC (del inglés Traceable Anonymous Certificate), es un certificado de clave pública en el que se asocia una clave pública a un seudónimo siempre que el propietario de la clave privada asociada, usuario, demuestre su identidad válida. El sistema asegura que cada usuario tiene uno y solo un único seudónimo y que, si es necesario, es posible obtener la identidad asociada a cualquier seudónimo de certificado.
Este tipo de certificados son presentados a través del RFC 5636. Este RFC define un protocolo para emitir certificados X.509 de entidad final anónima que contienen seudónimos en lugar de la identidad del usuario actual en el campo Sujeto. El protocolo, sin embargo, asegura la rastreabilidad a partir del seudónimo de la identidad del usuario bajo la petición de una parte confiable.

## Entidades

El objetivo del mecanismo es ocultar la identidad del usuario en un contexto de aplicaciones basadas en PKI (por privacidad). Para ello establece reparte la funcionalidad en dos entidades para que ninguna de ellas pueda revelar la identidad real del usuario. Sin embargo el sistema también establece un mecanismo, que bajo ciertas circunstancias, permiten a ambas entidades colaborar para revelar la verdadera identidad del usuario. Es necesario que las dos autoridades colaboren para que puedan revelar la identidad de la entidad detrás del certificado anónimo.
Estas dos propiedades (certificados anónimos y aseguramiento de las rastreabilidad) es lograda gracias a una arquitectura que involucra dos entidades adicionales al usuario a certificar. Visto desde fuera un TAC es emitido por una sola autoridad de certificación, pero las responsabilidades de creación y preservación de los certificados es partida en dos entidades BI (siglas del inglés Blind Issuer) y AI (siglas del inglés Anonymity Issuer).
* La BI mantiene en una base de datos la identidad real del usuario, pero no tiene suficiente conocimiento para validar o conocer la relación entre el certificado emitido y el usuario, por lo tanto actúa como una autoridad de registro (RA del inglés Registration Authority), teniendo conocimiento de la identidad de los usuarios reales pero no del certificado emitido para cada usuario. Se encarga de autenticar el usuario y mantener una base de datos de usuarios registrados.
* La AI valida una petición de certificado enviada por el usuario, con la cooperación del BI. Por tanto actúa como autoridad de certificación (CA del inglés Certificaction Authority) ya que tiene conocimiento de la emisión del certificado al usuario pero no tiene conocimiento de la identidad real del mismo.
Finalmente, para firmar digitalmente el certificado, ambas partes necesitan interaccionar.
El sistema se basa en exigir una fuerte separación entre la autoridad de registro y la certificación. Para partir las responsabilidades de las autoridades se usa firma digital con umbral y firma ciega. La firma con umbral permite que la RA y la CA compartan una clave privada para firmar y necesiten cooperar para firmar un certificado. La firma ciega es usada para asegurar que el contenido del certificado que está siendo firmado no sea visible a los firmantes.

## Procedimientos

El sistema descrito establece dos procedimiento principales uno de emisión del certificado y otro para establecer cual es la identidad del usuario que usa un certificado determinado al que vamos a llamar de procedimiento de mapeo de identidad.

### Emisión del certificado

El procedimiento de emisión del certificado podemos dividirlo en los siguientes pasos:
1 Autenticación. Usuario->BI
    El usuario se identifica en la RA. Se asume que el usuario ya está registrado en la RA, es decir, la RA tiene grabada en una base de datos cada usuario conteniendo su perfil de usuario y su correspondiente identificador único (UserKey)
2 Envía Token. BI->Usuario
    El RA envía al usuario una estructura de datos especial llamada token. El token consiste en el UserKey, un TimeOut todo firmado digitalmente por la RA. Una vez recibido el usuario verifica la firma del token y basándose en el valor de Timeout se asegura de que la petición del certificado es completada antes de que el token expire. El tiempo de expiración permite descargar los recursos cuando este cumple y también disminuir el impacto de ataques.
3 Envía petición de certificado con el token. User->AI
    El usuario prepara una petición de certificado (Ej PKCS#10) para ello genera un pseudónimo y lo usa como campo sujeto en la petición de certificado. El usuario envía a la CA la petición de certificado junto con el token como un atributo de él.
4 Envía el token y el hash del certificado cegado. AI->BI
    Una vez recibido la CA realizar los chequeos estándar de una CA:
   * Verifica el formato de la petición de certificado
   * Desarrolla el chequeo de la prueba de posesión de la clave privada.
   * Verifica la unicidad del pseudónimo escogido.
   * Verifica que la petición contiene un token válido.
   * A continuación construye un certificado y le asigna un número de serie.
   * A continuación AI computa un valor hash sobre el certificado.
   * A continuación AI ciega el hash del certificado. Para ello usa un par de claves asimétricas donde ninguna de las claves ha salido nunca de la AI (necesario ya que la pública se va a usar para descegar el valor hash).
   * A continuación firma el token junto con el hash cegado y se lo manda a la BI.
5 Envía token y hash cegado del certificado parcialmente firmado. BI->AI
    La RA:
   * Verifica las firmas del hash cegado del certificado y del token.
   * Que ningún certificado fue emitido para este certificado previamente.
   * La RA firma ciegamente el hash del certificado usando su parte de la clave privada con umbral y lo envía a la CA
6 Envía el certificado correctamente firmado. AI->User
    La CA
   * Verifica la firma del token y el hash cegado del certificado parcialmente firmado
   * Compara el token en la lista de peticiones pendientes a la RA
   * Desciega el hash de certificado recuperando el parcialmente firmado hash del certificado
   * Usa su trozo de la clave privada para completar la firma del certificado (firma del hash)
   * Almacena el nuevo certificado y el correspondiente token en la base de datos
   * Envía el certificado preparado al usuario

### Mapeo de identidad

Para evitar un abuso del anonimato proporcionado por este tipo de certificados este protocolo permite a una entidad confiable, con justificación adecuada, obtener la identidad actual del propietario del certificado. El mecanismo se inicia mediante petición a la AI indicando el token relacionado con cierto certificado. A continuación se pasa el token a la BI para obtener la identidad relacionada con el token en cuestión. El procedimiento en cuestión tiene cuatro pasos:
En la fase inicial la AI es la encargada de verificar, lo cual no está especifiado, que cierto certificado ha sido usado para realizar un abuso de la plataforma. Si la AI determina que hay suficiente evidencia de abuso la AI revoca el certificado listando su número de serie en la CRL emitida por la AI.