¿Cómo implementar una Web de confianza?

5

¿Cómo implementar una Web de confianza o algo similar?

Alice obtiene una clave pública y privada de RSA.

Bob debe enviar a Alice un código secreto nuclear (o el número de teléfono de su niñera).

Bob pregunta por la clave pública de Alice en el servidor, pero la malvada Eve intercepta la solicitud y envía su clave en su lugar.

¿Cómo evitar esas situaciones?

Alguien de StackExchange en Crypto me dijo:

  

La vinculación de la identidad a las claves públicas está fuera del alcance de criptografía pura.   La criptografía no puede saber a quién te refieres con "Alicia". Intercambiarlo en RL,   Haga que otra persona en la que ya confíe le diga (ya sea web de confianza o   CA), ...

Bueno, ¿cómo implemento eso (en PHP / MySQL)? ¿Alguien puede explicarme cómo implementar esto o cómo funciona para que pueda implementarlo?

Gracias

    
pregunta Jeremy Dicaire 24.01.2013 - 19:37
fuente

2 respuestas

4

La idea básica de la web de confianza, tal como se utiliza en PGP para enviar mensajes, es la validación de pares:

Alice conoce a Bob, Bob conoce a Cindy, pero Alice no conoce a Cindy. Cindy quiere enviarle algo privado a Alice, pero primero debe ser "presentada" a Alice.

Cindy comienza pidiendo primero a Alice su certificado de clave pública. Alicia lo envía; Es información pública, para que ella pueda transmitirla al mundo. En este único certificado se incluiría una serie de firmas digitales, cada una de una persona que Alice conoce, incluido Bob, quien está a cargo de la exactitud de este certificado. Cada firma es única para la combinación del certificado y el firmante, y la creación de una firma requiere una clave privada conocida solo por ese firmante. Una vez creada, cualquiera que conozca la clave pública que coincide con la clave privada del firmante puede usar esa clave para verificar que la firma coincida con el mensaje y con el firmante (o que no lo haga).

Como tal, la malvada Eva no puede esperar alterar el mensaje de tal manera que las firmas aún coincidan, ni puede cambiar las firmas por sí mismas, sin haber comprometido las claves privadas de todos los firmantes. Lo peor que puede hacer, dado que otra persona ya lo sabe y confirma la identidad de Alice, es corromper el certificado, lo que hace que Cindy lo rechace, impidiendo la comunicación deseada.

Alternativamente, Cindy podría preguntar a todos sus amigos si conocen a Alice, y cualquiera que lo haga, incluyendo a Bob, puede enviar a Cindy una copia del certificado de Alice con solo su firma. Esto reduce la cantidad de firmas que deben incluirse en un solo certificado para proporcionar una buena oportunidad para que Cindy reconozca una; ya que Cindy le pregunta a sus propios amigos, que solo responderían si de hecho conocieran a Alice, Cindy solo recibe firmas de personas que conoce y en las que confía ostensiblemente. Pero, podría causar una gran cantidad de datos que se enviarán a Cindy si Cindy y Alice tienen muchos amigos en común.

En cualquier caso, Cindy escanea estas firmas en busca de firmantes que ella sepa. Ella encuentra el nombre de Bob, valida su firma de este certificado, y ahora sabe que Bob cree que este es el verdadero certificado para la verdadera Alicia. Cindy ahora tiene la opción de confiar en Bob implícitamente, y así confiar en el certificado de Alice solo en su palabra, o en confiar parcialmente en Bob, y buscar a otras personas que conoce que hayan firmado el certificado de Alice. Si encuentra suficientes personas en las que confía parcialmente, o al menos en una persona en la que confía de forma implícita, puede confiar en el certificado de Alice por extensión. Esto se conoce como la "introducción confiable" y es fundamental para la web de confianza.

Una vez que Cindy decide confiar en el certificado, usa su clave pública para cifrar la clave en un mensaje cifrado simétricamente que también ha sido firmado por Cindy con su propio certificado. Entonces ella lo envía a Alice. Alice no conoce a Cindy, y por eso repite un proceso similar que Cindy hizo para obtener, validar y decidir confiar en el certificado de clave pública de Cindy (lo que ella hace, porque Bob ha firmado el certificado de Cindy y Alice confía en Bob de manera implícita). Ella usa su propia clave privada para descifrar la clave del mensaje, luego la usa para descifrar el mensaje y finalmente usa la clave pública de Cindy para validar la firma del mensaje.

Ahora, eso es con tres personas que ya están parcialmente "enredadas" en la web y, por lo tanto, pueden confiar entre sí según las recomendaciones de sus compañeros. Para dos personas sin amigos en los que se confía mutuamente, como cuando una web recién comienza o cuando una persona nueva que nunca ha usado PGP antes intenta unirse, esta recomendación automática de pares simplemente no funcionará; no hay recomendaciones de pares para hablar (puede que ni siquiera haya compañeros). Para hacer girar correctamente los primeros hilos de esta web, las personas que lo deseen deben intercambiar archivos de certificados entre sí dentro de un entorno de confianza inherente (conocido como "parte de firma clave"). De lo contrario, la malvada Eva puede interceptar los certificados que se intercambian, reemplazarlos con certificados falsificados, y se convierte en un "hombre en el medio".

La forma más antigua y sencilla de evitar esto es simplemente reunirse en persona e intercambiar físicamente los archivos de certificados entre sí. Existen otras posibilidades, tales como buzones seguros, pero todo lo que Eve necesita es un segundo de acceso no restringido y no detectado al almacenamiento físico de la llave para arruinarlo todo.

    
respondido por el KeithS 25.01.2013 - 00:48
fuente
2

Este es un problema clásico en el que una red de confianza está diseñada para ayudar. Si una red de confianza se está haciendo bien, la clave pública debe presentarse para obtener una firma de otro miembro de la web y la huella digital de la clave pública debe compartirse en un canal fuera de banda (al igual que la verificación de identidad debe ser hecho fuera de banda). Para algunos sitios web de fideicomisos, esto implica realmente reunirse en persona con la persona autenticada.

Esto hace que sea mucho más difícil comprometer un canal, pero incluso si un atacante logra comprometer un canal en particular, eso solo les otorga una firma. El otro aspecto de una buena red de confianza es que debería ser posible obtener varias firmas que certifiquen su identidad. Incluso si uno o dos usuarios terminan firmando la clave pública incorrecta, sería muy difícil (a menos que se encuentre un problema sistemático) obtener firmas para la clave pública falsa de varias otras partes en la web de confianza.

El atacante podría hacer que varias entidades firmen sus propias claves, pero como esos firmantes no serían más confiables que el certificado falso, no aumentaría la confianza a menos que el atacante pudiera obtener sus certificados falsos. En quien confían los firmantes en los que confía.

En cuanto a la logística de configuración de una red de confianza, tiene algunas opciones. Si desea optar por uno administrado de manera semi-central, puede validar personalmente la autenticidad de algunas personas y luego otorgarles la posibilidad de cerrar la sesión de las personas en una base de datos central. Para una versión más P2P / no centralizada, simplemente debe hacer que cada cliente realice un seguimiento de una lista de niveles de confianza asociados con las claves públicas que conocen. El certificado de cada usuario estaría firmado por cada persona que lo apruebe y, luego, el cliente puede calcular la confianza al mirar las claves públicas en las que confía que lo han firmado. El inconveniente es que las claves pueden ser bastante grandes, por lo que puede requerir algún tipo de optimización, como tener la lista de certificados de confianza publicada para cada cliente y luego hacer que la persona que quiere autenticarse envíe las cadenas de confianza adecuadas.

El tamaño aún sería bastante grande, por lo que un sistema centralizado generalmente sería más fácil. El sistema centralizado podría ser tan simple como un repositorio de certificados PKI. Cada certificado se almacena de forma centralizada y cualquier certificado que haya firmado otro certificado puede consultarse. El servidor o el cliente pueden navegar a través de las cadenas de confianza más actualizadas. (Como en un sistema p2p, si A firmaba con B y luego C firmaba con A, B tendría un certificado desactualizado para su firmante A y si el tercero D solo confiaba en C, entonces no confiarían en B a menos que las cosas estuvieran centralizadas).

    
respondido por el AJ Henderson 24.01.2013 - 21:01
fuente

Lea otras preguntas en las etiquetas