2011-03-11 25 views
5

Recientemente hemos estado buceando con el uso de OpenSSL para ayudar a cifrar/descifrar algunos datos que tenemos. Cada "cliente" tendrá un par de claves Pública/Privada y un Certificado X509 otorgado por una Autoridad Certificadora local. Ahora estoy buscando encriptar/descifrar datos con ese par de claves.Desglose de datos de gran tamaño para el cifrado RSA

Todo lo que he visto muestra usando los métodos RSA_public_encrypt y RSA_private_decrypt para encriptación RSA. Pero la cantidad de datos que puedo cifrar de una vez está limitada por RSA_size(rsa) - 41 para el tipo de relleno RSA_PKCS1_OAEP_PADDING. Así que mi pregunta es cómo cifrar grandes cantidades de datos mientras se apega a nuestro esquema RSA (sin frases clave estáticas, etc.). Estaba pensando en dividir los datos en fragmentos y luego en encriptarlos, pero parece que está derrotando el punto de relleno.

Cualquier ayuda sería apreciada.

Respuesta

6

Incluso si rompe los datos, descubrirá que la velocidad es prohibitivamente lenta. El método correcto es

  1. Generar clave aleatoria de algoritmo simétrico
  2. cifrar los datos utilizando el algoritmo simétrico y la llave aleatoria
  3. cifrar la clave aleatoria usando su clave pública y almacenarla en forma cifrada siguiente (o antes) los datos.
+0

Tiene sentido. ¿Cuál es la mejor forma de generar una clave aleatoria en C? Use arc4random() para seleccionar caracteres aleatorios de UTF8? ¿Hay una clase "Secure Random" en openssl o c's stdlib? – Staros

+0

@Staros arc4random() parece una buena opción ya que suena como un generador de RC4 criptográficamente fuerte. Sin embargo, también echaría un vistazo a la respuesta de Erickson en esta pregunta y verificará las posibilidades de usar OpenPGP: manejaría todo por ti. –

+1

@Staros - Lee el número requerido de bits de '/ dev/random'. No necesitan ser caracteres en ninguna codificación. – aaz

1

Debe utilizar un estándar como CMS (la base de la compatibilidad S/MIME en su cliente de correo electrónico) o PGP. Hay bibliotecas para estos dos estándares en casi todas las plataformas.

Descubrirá que son muy similares en su enfoque al cifrado masivo de datos, utilizando un cifrado simétrico para encriptar datos y encriptar esa clave secreta con la clave pública de los destinatarios del "mensaje". Este enfoque es seguro y rápido.

Sin embargo, estos estándares van más allá, manejando de forma segura cosas que quizás no haya pensado aún, como encriptar los datos para múltiples destinatarios, adjuntar metadatos al contenido encriptado, etc. También obtiene interoperabilidad con otro software. Por ejemplo, si usa S/MIME, puede usar casi cualquier cliente de correo electrónico en cualquier plataforma para descifrar. De hecho, dependiendo de sus requisitos de integración, es posible que no necesite escribir ningún software usted mismo.

El uso de uno de estos protocolos bien establecidos no resolverá todos sus problemas de seguridad, pero hará que sea más difícil hacer algo realmente tonto.

+0

CMS no está en la versión actual de OpenSSL en OS X. Creo que se introduce en 0.9.9 o 1.0. PKCS7 es así y supongo que eso también se aplica. – Staros

+0

PKCS # 7 * es * CMS. – erickson

+1

Tenía la impresión de que CMS era una implementación más avanzada de PKCS7. Sin embargo, ni idea de cómo ni por qué. – Staros

Cuestiones relacionadas