Antecedentes :
Algunos programas existentes, como git-annex ( cifrado git-annex ) y pass , delegan la criptografía a GPG , "una implementación completa y gratuita del estándar OpenPGP ". Más específicamente, estos programas se basan en los ID de clave GPG como una forma de interactuar con GPG:
GPG se utiliza para crear y administrar pares de claves públicas / privadas GPG.
El programa recibe instrucciones de utilizar un par de claves públicas / privadas GPG específicas a través de su ID de clave.
Si bien confiar en GPG es bueno y recomendable, la forma específica de hacerlo (a través de ID de clave GPG) conduce a un uso posiblemente innecesario de la criptografía de clave pública.
La criptografía de clave pública / asimétrica aborda algunos casos de uso específicos que, en términos generales, implican la transferencia segura de información entre una parte confiable y varias partes no confiables. Si alguien decide usar
pass
para almacenar sus propias contraseñas en un repositorio público de git, no hay una parte que no sea de confianza en este esquema para justificar el uso de la criptografía asimétrica.La criptografía tradicional / simétrica es potencialmente más segura que la criptografía asimétrica. Por ejemplo, existen algoritmos cuánticos que rompen la criptografía asimétrica, pero aún no existen computadoras cuánticas para ejecutarlos. Si bien estos desarrollos no están garantizados, no se conocen debilidades similares (potenciales) para la criptografía simétrica.
La criptografía asimétrica se beneficia de 2 capas distintas de seguridad:
(a) la clave privada está cifrada simétricamente con una frase de contraseña
(b) la clave privada (encriptada) se mantiene en una ubicación segura
Por lo tanto, por ejemplo, (a) no agrega nada a la seguridad de la criptografía asimétrica mientras (b) se mantenga. Es perfectamente válido (aunque no aconsejable) hacer una criptografía asimétrica con una frase de contraseña vacía.
La criptografía simétrica normal, con una sola clave privada, solo proporciona seguridad de tipo (a). Si se reemplaza la criptografía asimétrica por la criptografía simétrica, sería bueno mantener ambos niveles de seguridad (a) y (b). Una forma de hacerlo es con 2 niveles simétricos:
generar una cadena aleatoria privada
cifrar simétricamente una cadena aleatoria privada usando una frase de contraseña, almacenar de forma privada
cifrar simétricamente el mensaje con una cadena aleatoria privada, almacenar públicamente
A continuación se describe lo que sucede debajo del capó cuando un programa como
pass
GPG utiliza una identificación de clave GPG. (Suponga que la criptografía de clave pública es RSA y la criptografía simétrica es AES). Primero, GPG se usa para:(i) cree un par de claves pública / privada RSA
(ii) La clave pública RSA no está encriptada, se almacena de forma privada (disco duro) o públicamente (servidor de claves)
(iii) Clave privada RSA con cifrado AES con frase de contraseña, almacenar en privado
A continuación, después del cifrado OpenPGP , así es como funciona el cifrado:
(iv) generar clave de sesión aleatoria
(v) Mensaje de cifrado AES con clave de sesión, almacenar públicamente
(vi) Clave de sesión cifrada RSA con clave pública RSA, almacenar públicamente
Observe que el mensaje se ve comprometida por romper o bien (v) o (vi).
Vulnerabilidad potencial innecesaria :
Supongamos que en el futuro se desarrollan computadoras cuánticas y que RSA no funciona. (Para los paranoicos, supongamos que RSA ya está roto.) Si bien esto traerá cambios en la forma en que hacemos cosas como la banca en línea, también tendrá un impacto negativo completamente innecesario en la seguridad de los datos creados por pass
/ git-annex
.
Lo malo que sea esto depende de si la clave pública RSA de (ii) anterior se almacena pública o privadamente. Si se almacena públicamente, los datos ya están comprometidos: un atacante puede descifrar (vi) obtener la clave de sesión, luego descifrar (v) con la clave de sesión para obtener el mensaje. Si la clave pública RSA de (ii) en realidad se mantiene privada, la seguridad de los datos se reduce a (b), la seguridad del medio que contiene la clave pública RSA, lo que equivale a realizar un cifrado asimétrico sin una frase de contraseña.
Esta vulnerabilidad, exagerada o no, es completamente innecesaria, ya que se debe al uso innecesario de la criptografía de clave pública inherente a la interfaz existente entre programas como pass
/ git-annex
y GPG (a través de ID de clave GPG).
Pregunta :
¿Existe una forma "relativamente fácil" de:
eliminar el uso de cifrado asimétrico cuando GPG se utiliza debajo del capó a través de ID-s de clave GPG
continuar usando GPG para administrar claves como antes
mantener la seguridad de 2 niveles mencionada en 4 como (a) y (b)
El esquema completo que busco es:
(i ') genera una cadena aleatoria privada
(ii ') Cadena aleatoria privada con cifrado AES con frase de contraseña, almacenar en privado
(iii ') Mensaje cifrado AES con cadena privada aleatoria, almacenar públicamente
Entiendo cómo hacer cada uno de estos pasos por separado, pero lo que estoy preguntando es la mejor manera de conectar esa "solución" en la forma en que los programas pueden usar GPG a través de ID de clave GPG. Específicamente, espero que dichos programas emitan llamadas externas del formulario gpg --encrypt --recipient <keyid>
y gpg --decrypt
.
Conclusión : Parece que no hay una bala mágica, e interceptar estas llamadas utilizando un gpg
script de envoltura es la única forma de hacerlo. Quizás GPG debería considerar este problema en el futuro.