utilizando un hash que no sea sha1 para OAEP con OpenSSL / CLI

5

La utilidad rsautl OpenSSL no parece tener una configuración en la que se pueda cambiar el hash para OAEP. Mi prueba sugiere que solo tiene por defecto sha1 y eso es todo.

Mi pregunta es ... ¿hay alguna manera de cambiar el hash?

El comando que usé para probarlo:

openssl rsautl -inkey publickey.txt -encrypt -oaep -in plaintext.txt -out ciphertext.txt
Neubert
fuente

Respuestas:

11

rsautlque es antiguo, no. pkeyutlque se suponía que debía reemplazar rsautlen 2010, sí. -pkeyopt rsa_oaep_md:nameo rsa_mgf1_md:namedonde namehay un hash como en tu Q en PSS .

Nota para pkeyutl(editar) antes de 1.1.0 el orden de opciones es importante ; que debe hacer -encrypta continuación, -inkey rsaprivate a continuación, -pkeyopt (no está documentado AFAICS, aunque los casos análogos en genpkeylo son) y que tiene que hacer rsa_padding_mode:oaepantes rsa_{oaep,mgf1}_md:hash.

Mismo problema posible con el modo FIPS.

dave_thompson_085
fuente
2
Estaba intentando esto justo ahora (tal vez lo intenté antes demasiado idk) y tuve que hacerlo -pkeyoptantes de cada opción. p.ej. openssl pkeyutl -in ciphertext.txt -decrypt -inkey test.pem -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha1. Entonces, en ese caso, necesitaba hacerlo una vez para cada opción, no una vez a nivel mundial.
neubert
1
@neubert: sí, necesita -pkeyoptpara cada opción clave; Pensé que esa parte estaba clara en la página de manual y no la repetí. Pero los requisitos en orden fueron (y no son) todos los AFAICS documentados, y tales requisitos son inusuales openssl, así que los llamé.
dave_thompson_085
1
El orden no parece importar con OpenSSL 1.1.0f, pero no pude encontrar estas opciones documentadas. Aunque -pkeyopt rsa_oaep_md:sha256funciona, no se menciona en man pkeyutl.
starfry
@starfry: (no sé por qué no me notificaron en ese momento) sí, 1.1.0, publicado 8 meses después de escribir esta respuesta, reimplementé completamente el manejo de opciones para todas las operaciones de línea de comandos; editado para cualquier otra persona que venga. Es lo rsa_mgf1_mdque se aplica tanto a OAEP como a PSS, y está documentado en 1.1.1, que fecha más o menos tu comentario :-)
dave_thompson_085