He escrito un script para ayudar a nuestros desarrolladores a almacenar una copia de sus claves privadas sin una contraseña en nuestro árbol Puppet (no comprometido con Git) para que nuestras cajas de Vagrant puedan usar Hiera con eyaml + gpg ( enlace ) para acceder a datos secretos durante las pruebas.
El script funciona muy bien, pero también me gustaría automatizar el proceso de verificación de que la clave secreta ha sido eliminada de una frase de contraseña correctamente en la copia.
Hasta ahora, la única forma que encontré es manual: ejecutar gpg --homedir ... --edit-key keyid
y luego en el indicador interactivo ejecute password
y busque un mensaje This key is not protected.
.
Me gustaría hacer eso automáticamente en el script. Básicamente, quiero saber cómo la herramienta gpg sabe que debería imprimir este mensaje. De la respuesta en enlace y leer el código fuente de GnuPG en g10 / export.c Yo concluya que "sin frase de contraseña" en realidad se considera como "frase de contraseña es una cadena vacía" y el código realmente intenta descifrar una cadena aleatoria con la frase de contraseña y verificar que el resultado contenga un patrón aleatorio repetido.
¿Esto es correcto?
Si es así, ¿hay alguna manera de evitar tener que volver a implementar todo el proceso por mi cuenta pero en su lugar usar la herramienta de línea de comandos gpg o algunas API de Python / Ruby para hacer eso por mí? Miré algunos frontales de Python y Ruby para gpgme pero no vi algo como esto allí.
Veo en g10 / build-packet.c que debería esperar alguna salida diferente si el paquete está protegido o no, pero al intentar comparar volcados de claves secretas protegidas contra no protegidas no se hizo ' No cede nada excepto pequeñas diferencias en hashes. Podría estar malinterpretando el código allí.