elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Análisis del vídeo del hackeo al Sindicato de los Mossos de Esquadra


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: kub0x)
| | | |-+  Creación clave simétrica OpenSSL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Creación clave simétrica OpenSSL  (Leído 2,159 veces)
mestebanrg

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Creación clave simétrica OpenSSL
« en: 1 Diciembre 2016, 19:15 »

Buenas tardes,

Soy nuevo en este foro y en el mundo de la criptografía, y a ver si podéis echarme una mano, ya que tengo la cabeza como un platillo.
Para un proyecto que estoy desarrollando, necesito generar claves simétricas aleatorias de 128 bits. Exactamente en la documentación del proyecto detalla la Key como matriz de bytes con clave simétrica de 128 bits producido de acuerdo con la norma AES.
Posteriormente, tengo que cifrar esta Key con una clave pública que me han suministrado desde un organismo público con un algoritmo RSA y codificado todo esto en base 64.
Estoy usando openssl para realizar estas tareas, pero no se si lo que estoy probando es lo necesario para crear estas claves simétricas y las codificaciones.
Gracias.


En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.115


S3C M4NI4C


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #1 en: 2 Diciembre 2016, 11:20 »

Por lo que veo te dan una clave pública en formato .pem y tu debes generar una clave simétrica AES-128 bit para posteriormente cifrarla con dicha pública y enviarla. No veo que uses firmas digitales o mecanismos de integridad, lo cual en una aplicación real pone en peligro este mecanismo.

Comentas que es un proyecto, por lo tanto estarás usando uno o varios lenguajes de programación. En la mayoría de lenguajes existen librerías que te permiten hacer esto, pero yo te pondré un ejemplo con OpenSSL. Aunque en AES-CBC no se puede reutilizar el mismo IV dos veces.

Primero genera una clave AES-128 bit para cifrar en modo CBC:

Código:
openssl enc -aes-256-cbc -k pass -P -md sha1

Obviamente donde pone pass pones una password, si quieres, aleatoria. El output del comando será la key+iv+salt. Guarda la key en un fichero llamado key.bin, ya que no has dicho nada de cifrar con AES, por lo tanto el IV y salt no nos sirven para este ejemplo.

Ahora cifra la clave AES-128 con la RSA que te han suministrado:

Código:
openssl rsautl -encrypt -inkey id_rsa.pub.pem -pubin -in key.bin -out key.bin.enc

Donde id_rsa.pub.pem es la pública que te han suministrado, key.bin es la AES-128 que has generado y key.bin.enc es el fichero que se creará después de ejecutar el comando, con la AES-128 cifrada por la pública RSA.

Saludos!


« Última modificación: 2 Diciembre 2016, 11:22 por kub0x » En línea

No hay amigos, ni enemigos, lucha necia, todos contra todos.

"Music directly represents the passions of the soul. If one listens to the wrong kind of music, he will become the wrong kind of person".

mestebanrg

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #2 en: 2 Diciembre 2016, 13:43 »

Hola kub0x,

Muchas gracias por la respuesta.

La verdad que el lenguaje que utilizo está basado en la BBDD Universe de Rocket Software y en cuestiones de encriptaciones y cifrados, no está tan avanzado como el resto de lenguajes existentes.
Una duda que tengo para generar la clave simétrica aleatoria de 128, yo estaba probando con openssl rand -base64 48 -out key.txt, pero no se si tiene sentido y verdaderamente éste comando me lo crea dicha clave con los 128 bits.

Gracias nuevamente y saludos.
En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.115


S3C M4NI4C


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #3 en: 2 Diciembre 2016, 15:09 »

De nada hombre, aquí estamos para ayudar.

Una duda que tengo para generar la clave simétrica aleatoria de 128, yo estaba probando con openssl rand -base64 48 -out key.txt, pero no se si tiene sentido y verdaderamente éste comando me lo crea dicha clave con los 128 bits.

Ahí estás generando una clave aleatoria de 128 bits, pero sin seguir el estandar de generación de claves para cifrado simétrico, y tampoco sigues las directivas que OpenSSL recomienda en https://wiki.openssl.org/index.php/Enc . Existen clave simétricas no deseables para el cifrado, imagínate que por casualidades de la vida ese comando te generá una clave aleatoria no deseable para el cifrado :P Si guardas el Salt, podrás recuperar la clave en cualquier momento. Si cifras con la misma clave AES asegurate de generar un IV distinto. ¿Cómo se genera la clave y el IV? Pues a través de un salt + la password usando PBDKF2. En el link que te he dado arriba también verás que puedes guardarla en B64, y otras opciones que son muy útiles a la hora de trabajar con OpenSSL.

Saludos!
En línea

No hay amigos, ni enemigos, lucha necia, todos contra todos.

"Music directly represents the passions of the soul. If one listens to the wrong kind of music, he will become the wrong kind of person".

mestebanrg

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #4 en: 2 Diciembre 2016, 17:59 »

Estupendo.

Voy a probar y te comento que tal va las encriptaciones, porque al final tengo que conseguir esto:

Result=Base64(CRSA,Kpub(Ks))

Donde Ks es la clave simétrica aleatoria de 128 bits
Kpub es la clave pública que me han dado para encriptarla con el algoritmo RSA.

Bueno, y lo mejor de todo es que con esa clave simétrica se tienen que cifrar posteriormente otros dos campos con el algoritmo AES, Modelo ECB y PKCS5Padding. Casi nada  :-(

Muchas gracias.
En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.115


S3C M4NI4C


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #5 en: 2 Diciembre 2016, 21:10 »

Bueno, y lo mejor de todo es que con esa clave simétrica se tienen que cifrar posteriormente otros dos campos con el algoritmo AES, Modelo ECB y PKCS5Padding. Casi nada  :-(

¿Modo ECB? En serio :D Si este proyecto es para un entorno profesional (no académico) entonces olvídate de ECB por completo. Te explico el problema:

Imagina que tienes un mensaje de 512bits en un entorno ideal, así que divides el mensaje en 8 bloques de 64 bits. Imagina que el primer bloque y el segundo tienen secuencias parecidas, como ECB no concatena los bloques como otros modos de cifrado como CBC entonces comparando los dos primeros bloques ganas información, y el atacante sabría que información se repite, aunque no sepa que hay detrás de la información. Otra vulnerabilidad sería si dos mensajes distintos tienen información repetida, como un substring. El atacante podría distinguir entre ambos ciphertexts que partes se repiten.

La gracia del cifrado simétrico es que dos mismos plaintext al cifrarse sean completamente distintos, y ECB no lo consigue.

Sobre PKCS5Padding se utiliza en cifrados de bloque con tamaño de 64bit así que al cifrar por AES usaras bloques de dicho tamaño. Si tienes alguna duda con ello preguntame, ya que conozco su implementación, aunque OpenSSL u otra librería ya lo implementará de serie al cifrar.

Saludos!
En línea

No hay amigos, ni enemigos, lucha necia, todos contra todos.

"Music directly represents the passions of the soul. If one listens to the wrong kind of music, he will become the wrong kind of person".

mestebanrg

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #6 en: 5 Diciembre 2016, 12:11 »

Hola kub0x,

El proyecto consiste en crear un XML para realizar una petición SOAP.
En el Header tienen que ir una serie de etiquetas con su contenido cifrado como te he comentado y utilizan estos tipos de codificaciones y encriptaciones.
Ya te contare cuando vaya a realizarlo si todo ha ido bien, ya que el Web Service me responderá si todo está correcto.

Gracias por todo y saludos.

Hola kub0x,

Me he dado cuenta que la clave pública que me han proporcionado, no viene con formato PEM, sino viene cómo un certificado .cer.
Ahora sí que me he quedado  :o, ya que no tengo la clave privada, ni he conseguido extraer una clave pública en formato PEM, ni cifrar la clave simétrica generada aleatoriamente con el comando openssl smime.
Si me puedes echar una mano para poder cifrar con openssl y con un certificado público (.cer)

Muchas gracias de antemano.


MOD: No hacer doble post. Usa el botón modificar.
« Última modificación: 7 Diciembre 2016, 15:39 por MCKSys Argentina » En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.115


S3C M4NI4C


Ver Perfil
Re: Creación clave simétrica OpenSSL
« Respuesta #7 en: 11 Diciembre 2016, 23:21 »

Buenas, siento la tardanza.

No hay mucha diferencia entre cifrar con .DER o .PEM:

Citar
openssl rsautl -encrypt -keyform der -inkey id_rsa.pub.der -pubin -in key.bin -out key.bin.enc

Es el comando que puse arriba modificado para cifrar la clave simétrica AES con la pública de dentro del certificado en formato DER.

Con smime:

Citar
openssl smime -encrypt -aes256 -inform DER -in fichero_a_cifrar.extension -binary -outform DER -out fichero_cifrado.extension cert.pem

Lo que hará será generar una AES-256 aleatoria, cifrar el fichero con la AES y cifrar la AES con la pública del certificado. Para descifrar basta con:

Citar
openssl smime -decrypt -in fichero_cifrado.extension -inform DER -inkey tu_privada.pem -out fichero_en_plano.extension

He testeado OpenSSL sMIME generando claves en .DER desde cero y puedo decir que funciona 100%.

Saludos!
En línea

No hay amigos, ni enemigos, lucha necia, todos contra todos.

"Music directly represents the passions of the soul. If one listens to the wrong kind of music, he will become the wrong kind of person".

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con tema de Seguridad(Criptografía, Clave Simétrica y Clave Pública.....)
Seguridad
aldosn 1 1,729 Último mensaje 1 Junio 2007, 17:43
por »~^~«CkNU!»~^~«
Transpuesta y simetrica
Programación C/C++
Rich_crazy2 1 1,772 Último mensaje 10 Noviembre 2011, 01:34
por Rich_crazy2
Criptografia simetrica
Seguridad
andres.perezg 1 859 Último mensaje 13 Octubre 2014, 15:21
por engel lex
OpenSSL Project detecta nueva vulnerabilidad en OpenSSL y anuncia parche
Noticias
wolfbcn 0 327 Último mensaje 8 Julio 2015, 15:06
por wolfbcn
c++ matriz simetrica
Programación C/C++
77mapmap77 2 1,124 Último mensaje 28 Febrero 2016, 01:54
por 77mapmap77
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines