Estoy intentando un flujo de trabajo para ejemplificar el proceso de firma digital utilizando criptografía asimétrica.
Si entiendo correctamente, entonces la clave pública y la clave privada en un par de claves criptográficas asimétricas son funciones inversas. Ergo, si la clave privada es la función F, entonces la clave pública es G = F ^ (- 1), y F (G (x)) = x.
Si entiendo correctamente, un correo electrónico firmado digitalmente consta de: a) un mensaje de texto simple, llamémoslo M; b) algún texto cifrado, llamémoslo C.
Supongamos que H es una función hash conocida públicamente, como sha1.
Al enviar un correo electrónico firmado digitalmente, primero aparecería el mensaje de texto sin formato original: H (M) = M '. Luego aumentaría el valor de hash usando mi clave privada: F (M ') = C.
Ahora, cuando envío el correo electrónico, incluyo tanto M como C. Si la integridad del correo electrónico firmado digitalmente no se ha comprometido, el destinatario encontrará que G (C) = H (M).
Mi pregunta no tiene que ver con la teoría subyacente, porque creo que la entiendo lo suficientemente bien. (Si lo que describí anteriormente es incorrecto, por favor dígame). De hecho, mi pregunta es respecto a la implementación y la verificación manual del flujo de trabajo. ¿Qué programas / comandos están disponibles para implementar cada paso que se describió anteriormente? He utilizado satisfactoriamente el siguiente comando en la línea de comandos de linux para invocar la función hash sha1:
echo -n "hola mundo" | sha1sum | awk '{print $ 1}'
Necesito un comando para transformar un texto usando la función que es mi clave privada. Y necesito un comando para transformar un texto usando la función que es mi clave pública. Prefiero algo que me permita verificar manualmente cada paso del proceso.
EDIT Sé que una herramienta precompilada como gpg es una forma más práctica de hacer firmas digitales en un caso de uso real. Mi objetivo es tener un flujo de trabajo alternativo que genere los mismos resultados que gpg. Es importante poder validar el proceso de forma cruzada. Además, me gustaría poder enseñar a un hipotético subalterno sobre firmas digitales, y para ello quiero poder desglosar el proceso en una serie de pasos bien entendidos. Y debido a que el propósito principal es realizar una validación cruzada, y no autenticar \ no repudiar realmente alguna comunicación importante, por lo tanto, las debilidades inherentes de este enfoque no me conciernen.