Cómo se usan los certificados X509 para el cifrado

11

Tengo una pequeña duda sobre el proceso de X509. Soy consciente de OpenPGP Encryption / Decryption, donde generamos la clave pública y la clave privada. Podemos compartir la clave pública con los proveedores, ellos pueden cifrar los datos con la clave y podemos descifrar los datos utilizando la clave privada. Es simple y directo para mí.

Cuando se trata de X509, estoy un poco confundido. Mi cliente desea usar el certificado X509 para transferir información confidencial [que ya está encriptada usando un cifrado simétrico como AES] entre dos personas [entre el cliente y sus proveedores]. Cómo funciona X509 si podemos generar el certificado usando solo una clave pública.

Supongamos que, si cifro los datos usando AES con una clave generada al azar. ¿Cómo transfiero estos datos junto con la clave al proveedor que usa X509 para que ningún tercero no intercepte durante la transmisión de la red?

¿Podría alguien explicar? Por cierto, transferimos los datos en el mensaje SOAP, incluida la información del certificado

    
pregunta Nitin Gurram 19.02.2013 - 14:22
fuente

2 respuestas

22

X.509 es un formato para certificados : un certificado es una secuencia de bytes que contienen, en un formato específico, un nombre y una clave pública , sobre los cuales un firma digital se calcula y se inserta en el certificado. El firmante es una Autoridad de Certificación que afirma que la clave pública es de hecho propiedad de la entidad conocida bajo ese nombre Al verificar la firma, puede asegurarse de que el certificado sea genuino, es decir, es realmente lo que emitió la CA; y, de esa manera, usted gana confianza en la vinculación del nombre con la clave pública (en la medida en que confía en la CA para ser honesto y no demasiado crédulo, y como sabe la clave de la CA para la verificación de la firma, que puede implicar la obtención de un certificado para la CA, y verificando ese certificado, y así sucesivamente, hasta un ancla de confianza también conocido como certificado raíz ).

Por lo tanto, X.509 es una forma de distribuir claves públicas , lo que quiero decir: un método que permite que varios actores (por ejemplo, usted) sepan, con cierta garantía de no alteración por terceros maliciosos partes (es decir, "atacantes") las claves públicas de otros actores.

OpenPGP es un formato estándar para muchas cosas. Una de las cosas que define OpenPGP es una forma de codificar una clave pública junto con un "nombre" (una dirección de correo electrónico) y una firma sobre estas dos. Eso es, en realidad, un certificado por derecho propio (aunque con un formato que no es compatible con X.509). Pero OpenPGP también define cómo usar la clave pública de un individuo determinado (llamémosle Butch) para cifrar un montón de bytes que solo Butch, usando su clave private , podrá descifrar. Técnicamente, esto utiliza una clave de sesión generada aleatoriamente, utilizada con AES (o similar) para cifrar los datos sin procesar, y esa clave de sesión es lo que se cifra con la clave pública del destinatario (generalmente de tipo RSA o ElGamal).

Por lo tanto, para su problema, no desea "cifrar con X.509". X.509 no define nada acerca del cifrado. Lo que desea es utilizar un formato estándar que describa el cifrado con la clave pública del destinatario y se basa en los certificados X.509 para la distribución de la clave pública. Este formato estándar, junto con X.509, sería análogo a OpenPGP. Este formato estándar existe y se llama CMS (anteriormente conocido como "PKCS # 7"). Cuando los objetos de CMS se envían por correo electrónico, esto se convierte en otra capa de estándar, que se llama S / MIME .

CMS (o S / MIME) es lo que necesita para la comunicación asíncrona: usted prepara un blob para enviarlo más tarde al destinatario, como lo que hace con OpenPGP. Si puede realizar una comunicación sincrónica (el remitente y el destinatario están "en línea" al mismo tiempo), entonces puede usar SSL / TLS (o su homólogo en la Web HTTPS ). En SSL, el servidor tiene una clave pública, que envía al cliente como un certificado X.509. El cliente valida el certificado, luego usa la clave pública contenida en él para establecer una clave de sesión con el servidor y cifrar los datos con esa clave de sesión.

En cualquier caso, se sabe que el ensamblaje de algoritmos criptográficos en protocolos es difícil de hacer correctamente, casi imposible de probar para la seguridad, y lleno de peligros. Así que no imagines que puedes construir tu propia mezcla; realmente debería confiar en un estándar existente, como CMS o SSL.

    
respondido por el Thomas Pornin 19.02.2013 - 14:43
fuente
1

Un certificado X509 es un método para intercambiar claves públicas. Parece que el proveedor probablemente desea que continúe con el cifrado AES y luego la clave AES con su clave pública para que pueda transmitir la clave AES sin que sea susceptible de ser interceptada. Con mucho, los usos más comunes de la criptografía asimétrica (clave pública / privada) son la firma y el intercambio de claves simétricas.

Mi principal preocupación es que mencione que está obteniendo el certificado en una solicitud SOAP, lo que me hace cuestionar cómo se está realizando la validación. Este paso no tiene mucho sentido para mí, ya que si no conoce el certificado de antemano (por lo tanto, no sería necesario enviarlo), no estoy seguro de cómo lo validaría para el usuario apropiado que debería tener acceso a los datos y no ha sido atacado a través de un hombre en el medio.

La forma preferible sería que el certificado X509 sea uno que usted haya firmado para que su sistema pueda saber que el certificado es válido y para el usuario que lo envió. Luego, incluso si un hombre en el medio hiciera la solicitud, siempre que no tengan la clave privada para el certificado, no podrían descifrar la clave AES y los datos serían inútiles para ellos.

    
respondido por el AJ Henderson 19.02.2013 - 16:00
fuente

Lea otras preguntas en las etiquetas