¿Cuál es la mejor manera de cifrar un blob con una clave pública?

1

Necesito cifrar campos de blobs de arrays de bytes de aproximadamente 50k a 100k cada uno en .net con una clave pública y luego almacenar en SQL / Server para destruir los datos originales. Cuando los datos son recuperados por el propietario final, sería con una clave que solo ellos tienen (yo no).

El problema es que necesito que todos los registros estén encriptados con la misma clave para que el propietario pueda descifrar los campos con lógica establecida (grupo de registros, no un registro a la vez).

Estoy leyendo que RSA es demasiado lento para ser práctico para datos tan grandes y que RSA generalmente se usa solo para cifrar una clave simétrica. Esto funcionaría para mí si estuviera descifrando un registro a la vez, pero ese no es el caso y estoy atascado.

Entonces, si la asimetría no funciona, ¿cuál es otra / la mejor manera de resolver este problema?

    
pregunta pghcpa 04.02.2014 - 21:58
fuente

2 respuestas

1

La mejor manera es: no lo hagas tú mismo. Utilice un formato / protocolo con las bibliotecas existentes que hacen el trabajo. De hecho, como sucede con todas las cosas criptográficas, hacer que una implementación funcione sea fácil, hacer que una implementación segura sea casi imposible, especialmente porque no se puede probar la seguridad.

En este caso, esto apunta al formato OpenPGP y su conocida implementación de código abierto GnuPG (que es tanto una herramienta de línea de comandos como una biblioteca).

Internamente, OpenPGP usa cifrado híbrido : se genera una clave simétrica y se cifra con el público asimétrico (por ejemplo, RSA) llave; y la clave simétrica se utiliza para procesar la mayor parte de los datos con un algoritmo de cifrado simétrico. Pero aunque es interesante saber el concepto, es mejor dejar los detalles en un formato que ha sido examinado por los criptógrafos, y una implementación que ha sostenido el despliegue en producción durante una década, y para la cual se supone que se han encontrado la mayoría de los errores y eliminado.

    
respondido por el Tom Leek 04.02.2014 - 22:32
fuente
0

Esto se puede lograr de manera similar a la forma en que hacemos el cifrado de archivos grandes con una clave pública.

Cada vez que se debe encriptar un blob de este tipo:

  1. Genere una nueva clave simétrica (AES por ejemplo).
  2. Use la clave simétrica para cifrar su blob.
  3. Cifre la clave simétrica usando su clave pública RSA.
  4. Almacene la clave simétrica cifrada y el blob cifrado.

El propietario luego descifra la clave simétrica usando su clave privada y luego usa la clave simétrica para descifrar las manchas.

Aquí hay un artículo que lo archiva en java. El concepto es similar. enlace

    
respondido por el coolest_head 04.02.2014 - 22:14
fuente

Lea otras preguntas en las etiquetas