¿Hay algún archivo gratuito & herramienta de código abierto para criptografía de clave pública, donde la clave privada es solo una contraseña elegida?
Esto es lo que necesito:
- Quiero hacer copias de seguridad cada hora usando un script
- Quiero usar solo herramientas de código abierto.
- Las copias de seguridad deben estar cifradas,
- Necesito poder descifrarlos sin ningún archivo.
No puedo usar el cifrado simétrico para las copias de seguridad, porque la contraseña no se puede dar en el script en texto sin formato, y no se me puede preguntar cada vez que se realiza una copia de seguridad de la contraseña (por ejemplo, porque cuando estoy en vacaciones de 1 mes, las copias de seguridad aún deben realizarse).
Así que pensé en la criptografía de clave pública, pero todas las herramientas que leí sobre almacenan la clave privada en un archivo. Tengo miedo de perderla, al igual que todos los demás datos (es por eso que hago copias de seguridad en primer lugar). Imagine que mi disco sufre una falla de hardware, alguien lo roba, se quema en un incendio, etc. Claro, tengo copias de seguridad, pero no puedo descifrarlas sin el archivo de clave privada, ¡que ahora está perdido! Por supuesto, podría tener copias de seguridad de mi archivo de clave privada, pero simplemente no quiero confiar en un archivo para descifrar mis datos.
Encontré una solución (al menos desde el punto de vista matemático, porque no encuentro ninguna herramienta implementando esto). Digamos que tengo mi contraseña. Generemos un par de números primos (p1, p2) usando la siguiente función p2rsapk:
(p1,p2) = p2rsapk(password) = {
bits = password as vector of bits
(n1,n2) = split bits into two parts in deterministic way, e.g. just take halves
p1 = find prime based on n1, e.g. lowest prime p1 s.t. p1 > 2^n1-2
p2 = find prime based on n2
}
Voila! Acabamos de tomar una contraseña y la convertimos en nuestro par de claves privada / pública. Ahora podría cifrar mi copia de seguridad con la clave pública (utilizada por el script) y descifrarla cuando sea necesario sin necesidad de ningún archivo de clave privada (porque mi contraseña ES mi clave privada con la ayuda de la función p2rsapk).
También podría enviar mi clave pública a mis amigos para que me envíen mensajes cifrados, y puedo descifrarlos desde cualquier lugar sin el acceso a mi archivo de clave privada que ya no necesito.
Sin embargo, aunque la idea es bastante simple, no he encontrado ninguna herramienta que la implemente. ¿Se conoce este enfoque? ¿Y hay herramientas para esto?
EDITAR: No puedo enfatizar lo suficiente lo importante que es para mí no confiar en un archivo como clave privada. Soy muy consciente del enfoque en el que uno almacena la clave privada en un archivo (posiblemente protegido por contraseña) y sus ventajas y desventajas, y reconozco que es la forma más segura de ir en muchos escenarios. Hay muchos libros, tutoriales y páginas de manual que describen cómo proceder si uno quiere la clave privada en un archivo. Lo sé, pero al responder, tenga en cuenta que es un requisito estricto que no haya un archivo para almacenar la clave privada.
EDIT2: Soy perfectamente consciente de los problemas con contraseñas débiles. Sé que la contraseña es el enlace más débil, así que supongamos que usaré una contraseña segura (con un mínimo de 50 caracteres, incluyendo letras en mayúsculas y minúsculas, dígitos, símbolos y sin palabras del diccionario).