General

Usar una tarjeta inteligente como factor adicional de autenticación en GnuPG

Desde DC8 tengo un lector USB de tarjetas inteligentes y una tarjeta inteligente preprogramada para ser utilizada en GnuPG que he estado utilizando principalmente para investigar el impacto de tener un factor adicional de autenticación en GnuPG.En principio, no se trata de un mecanismo asequible para el usuario final a través de las interfaces gráficas que están disponibles en el mercado para Linux, sobre todo si se quiere aprovechar en términos de seguridad el tener un segundo factor de autenticación. Esto es una lástima. El lector de tarjetas, sin embargo, sí puede usarse para otras cosas interesantes.Supongamos que tiene una llave GPG. En este momento no importa mucho si la llave ha sido utilizada para algo útil, aunque esto tendrá algunas repercusiones en la usabilidad del factor adicional a futuro.Su llave GPG tiene una subclave principal de cifrado, probablemente creada utilizando ElGamal y probablemente con una longitud de 2048 bits.El objetivo de utilizar una tarjeta inteligente es eliminar la llave secreta y la subclave principal de cifrado de su llave GPG y sustituirla por tres llaves en la tarjeta inteligente que son utilizadas para cifrar, firmar y autenticar. Estas llaves se crean usando RSA y tienen una longitud de 1024 bits. Para acceder a las llaves necesita introducir un código de identificación denominado PIN. Al eliminar estos dos elementos de la llave, se fuerza a cualquier atacante a tener la tarjeta inteligente y el PIN para ejecutar cualquier acción que comprometa la llave.Obviamente, el estado de su llave GPG antes de hacer este cambio puede (y debe) ser guardado en un dispositivo de almacenamiento exteo que se resguarde físicamente de forma segura. Así podrá tener acceso a la llave secreta principal y a la subclave principal de cifrado en caso de algún problema. Esto lo puede hacer a nivel del sistema de archivos respaldando su directorio .gnupg o bien a nivel de la aplicación utilizando --export-keys y --export-secret-keys.Otro aspecto importante a tener en cuenta es el mecanismo que utilizará para acceder a la tarjeta inteligente. Puede usar PC/SC a través del demonio pcscd, o puede usar CCID directamente de acuerdo a la implementación de GnuPG. Para usar la tarjeta con el segundo mecanismo necesita privilegios de administrador o configurar udev para otorgar permisologías a un usuario o grupo en particular.En cualquier momento puede usar gpg --card-status para verificar no solo que el lector y la tarjeta funcionan, sino que la lógica de la tarjeta arroja datos con sentido. También puede usar gpg --card-edit para agregar información adicional de contexto, además de configurar el PIN de la tarjeta. Hay dos PIN, uno de uso cotidiano y uno administrativo. Asegúrese de estar consciente de cual PIN se le solicita para evitar bloquear la tarjeta.Una vez que tenga todo listo, utilice gpg --edit-key LLAVE para editar su llave GPG, y el comando addcardkey para añadir las tres subclaves en la tarjeta inteligente. El orden en que debe seleccionar las claves es: autenticación, firma y cifrado, ya que GnuPG seleccionará automáticamente la última subclave creada para cifrar.Guarde los cambios y seleccione la subclave principal de cifrado utilizando key 1. En este punto debe haber hecho los respaldos y creado las tres subclaves en la tarjeta inteligente. Ahora está listo para eliminar la subclave principal de cifrado de su llave GPG utilizando delkey y guardar los cambios en la misma. Con esto remueve una parte del material sensible de su llave GPG.El siguiente es un procedimiento un poco extraño. Ya ha borrado la subclave principal de cifrado. Ahora quiere borrar la llave secreta de su llave GPG. Y en ambos casos quiere borrar solo la porción secreta, no la pública. La opción --delete-secret-keys de GnuPG eliminará las claves y subclaves secretas, por lo que primero debe respaldar las subclaves:gpg --export-secret-subkeys LLAVE > sub.secringluego debe eliminar las claves y subclaves secretas:gpg --delete-secret-keys LLAVEy luego debe importar las subclaves secretas:gpg --import < sub.secringAnteriormente dijimos que el objetivo era borrar de la llave el material secreto, y no las porciones públicas, por lo que debe importar las porciones públicas de las subclaves, siendo la forma más sencilla importar todo el keyring público del respaldo que haya realizadogpg --import < pubring.backupEl momento de la verdad es cuando sube a un servidor de llaves públicas su llave pública incluyendo las nuevas subclaves. De hecho, el gran problema en la usabilidad de este mecanismo es que las subclaves anteriores no desaparecen de la memoria colectiva y usted depende de que todas las personas que tengan su llave pública descarguen la nueva desde los servidores, de otra forma, continuará recibiendo material cifrado usando la subclave pública anterior. Por eso recomiendo que sólo utilice este modelo de seguridad con dos factores con llaves nuevas y desde el principio.Aparte del cliente de GnuPG en consola, también utilizo la extensión Enigmail para Mozilla Thunderbird, y ésta es lo suficientemente inteligente como para pedirme el PIN de la tarjeta inteligente para las operaciones de firma y cifrado que realizo a futuro con la tarjeta inteligente en el lector. Así mismo, necesito la tarjeta y el PIN para descifrar cualquier material sensible que hayan enviado firmado a mi subclave. Este es el nivel de funcionalidad esperado.Como nota final, puede regenerar las subclaves de firma, autenticación y cifrado en la tarjeta. Sin embargo, mi experiencia personal con la tarjeta g10 es que debe utilizar el protocolo ccid nativo de GnuPG para acceder a la tarjeta. Para esto hay que tener privilegios sobre el dispositivo, por lo que hay un conjunto de reglas de udev disponibles para configurar los permisos a un grupo adicional.

Standard

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s