¿Está transmitiendo claves privadas entre dispositivos? [duplicar]

0

Tengo una aplicación donde el dispositivo de un usuario crea una clave pública / privada y toda la comunicación con este usuario se realiza mediante el cifrado de su clave pública, que se almacena en un servidor y se envía a otros clientes que lo soliciten.

Ahora estoy tratando de hacer que esto funcione en múltiples dispositivos.

Estoy pensando que solo puedo hacer que el nuevo dispositivo genere un par de claves ("clave temporal"), cifre la clave privada del usuario contra la clave pública del nuevo dispositivo, la envíe al nuevo dispositivo y borre la "temporal" clave ".

¿Hay algún problema con esto? ¿Existe una solución mejor que no requiera enviar nuevas versiones de la clave pública a todos los que ya la tienen?

    
pregunta zyklus 07.09.2015 - 12:01
fuente

3 respuestas

1
  

Uno de los propósitos principales para esto es poder decir "Nosotros (como compañía) no tenemos absolutamente ninguna forma de descifrar sus comunicaciones", por lo que es un no-go. Debe ser de dispositivo a dispositivo, o cifrado con la clave privada de un dispositivo, etc.

Bueno, en ese caso, hemos establecido que ambos dispositivos deben poder comunicarse entre sí, de forma bidireccional y en tiempo real, para completar la transferencia.

En ese caso, realmente no hay necesidad de elaborar esquemas de cifrado de clave pública. De hecho, es más probable que presenten problemas.

También sabemos que muchas personas no están realmente preparadas para destruir físicamente los medios de comunicación, tienen la capacidad de hacerlo de forma segura o incluso entender por qué podría ser importante hacerlo. En su lugar, la mayoría de las personas tienden a simplemente eliminar el archivo a través del sistema operativo, dejando todos los datos intactos en los medios de comunicación para que cualquiera que venga a buscarlos. Por lo tanto, la sugerencia de M'vy de permitir que el usuario copie la clave en los medios sobre los que tiene control físico, mientras que en teoría es buena , no es realmente una gran idea en la práctica.

En su lugar, use un algoritmo de intercambio de claves como Diffie-Hellman Key Exchange ( Wikipedia , RFC 2631 ) para permitir que los dos dispositivos involucrados acuerden interactivamente un secreto compartido. Como no queremos reinventar la rueda, usamos cualquier TLS o tal vez haya bibliotecas SSH / SFTP / SCP disponibles para que su plataforma objetivo haga el trabajo pesado. (En términos generales, nunca escriba el código criptográfico usted mismo . Las probabilidades son grandes de que hazlo mal , introduce errores sutiles y deja la información de tus usuarios en riesgo de exposición. Deja que alguien más cometa esos errores.)

Aunque no está relacionado con la criptografía en sí, asegúrese de que este proceso implique que el usuario se autentique en ambos dispositivos de alguna manera.

Una vez que los dos dispositivos hayan acordado un secreto compartido que consiste en, digamos, 32 bytes aleatorios, use ese secreto compartido como una clave de cifrado simétrica. AES -256 es lo suficientemente bueno para la mayoría de los propósitos en estos días , la clave de 256 bits tiene el beneficio adicional de proporcionar un margen de seguridad también en Criptografía post-cuántica , y para un factor de trabajo dado, AES no es muy computacional.

Una vez que haya transferido la clave a largo plazo de un dispositivo a otro y haya verificado que la copia es correcta, simplemente borre las claves de cifrado temporales de ambos dispositivos y posiblemente borre la clave a largo plazo del dispositivo desde el que se transfirió (este último probablemente sea tu mayor problema).

    
respondido por el a CVn 06.11.2015 - 15:54
fuente
0

El protocolo de intercambio de claves Diffie-Hellman se puede extender fácilmente al trabajo con tres o más personas. Consulte enlace y el Capítulo 22 de la Criptografía Aplicada de Schneier: creo que en la página 510.

Schneier también describe Intercambio de claves sin intercambiar claves

Si tiene una comunidad de usuarios, cada uno podría publicar una clave pública, X = g x mod n, en una base de datos común. Si Alice quiere comunicarse con Bob, solo tiene que recuperar la clave pública de Bob y generar su clave secreta compartida. Luego podría cifrar un mensaje con esa clave y enviarlo a Bob. Bob recuperaría la clave pública de Alice para generar la clave secreta compartida. Cada par de usuarios tendría una clave secreta única, y no antes Se requiere comunicación entre los usuarios. Las claves públicas deben estar certificadas para evitar ataques de suplantación de identidad y deben cambiarse regularmente, pero de lo contrario, esta es una idea bastante inteligente.

    
respondido por el Danny Lieberman 07.09.2015 - 12:19
fuente
0

La mejor manera de transferir claves privadas es que el propietario copie la clave a un medio sobre el que tenga control total.

Si necesita garantizar la protección de la pérdida del medio, se puede usar cualquier sistema de cifrado, ya sea el cifrado de la llave USB, incrustar la clave en un contenedor PKCS # 12 o cifrar el archivo. Este es básicamente uno de los trabajos de keystores.

    
respondido por el M'vy 07.09.2015 - 14:12
fuente

Lea otras preguntas en las etiquetas