Al ser PGP
un programa más antiguo que GnuPG
, es normal que un
nuevo usuario de GnuPG
tenga ya instalado alguna versión de PGP
en
su sistema, y que desee mantener sus viejas claves después de actualizarse a
GnuPG
. Pues bien, no sólo es posible importar el contenido de los anillos
de claves sino que, alternativamente, es posible que GnuPG
gestione los
anillos de claves de PGP 2.6.3
y PGP 5.0
.
Hay otros «problemas» de compatibilidad sobre los que también trataremos en
este capítulo, como son las firmas de tipo V4 generadas por GnuPG
, o
el uso por parte de PGP
de los algoritmos propietarios RSA
oIDEA
. Empezaremos por esto último.
El uso de algoritmos con patentes restrictivas por parte de PGP
representa
un problema por cuanto la filosofía que inspira a GnuPG
de implementar un
sistema criptográfico libre. Así pues, las patentes sobre estos algoritmos
imposibilitan una implementación total. Pero GnuPG
también pretende
cumplir con las reglas de los «estándares» de OpenPGP
http://www.d.shuttle.de/isil/gnupg/rfc2440.html.
Existen extensiones para RSA,
http://www.rsa.com e IDEA,
http://www.ascom.ch que pueden ser instaladas y que permiten cierto uso
de estos algoritmos. Las claves generadas por PGP 2.6.x
son del tipo
RSA, y el algoritmo de cifrado que usa es IDEA (también puede ser
usado por PGP 5.x
). Es posible conseguir el código fuente de estos
algoritmos en los ficheros
ftp://ftp.guug.de/pub/gcrypt/contrib/rsa.c.Z e
ftp://ftp.guug.de/pub/gcrypt/contrib/idea.c.Z.
También existen los binarios instalables de estas extensiones para algunas distribuciones de Linux, como Debian (comprobar para otras distribuciones).
GnuPG
es el único sistema capaz de implementar firmas digitales V4
(de acuerdo con OpenPGP) y esta es la opción por defecto, pero en este
caso PGP
no es capaz de verificarlas. Es posible obligar a GnuPG
a
usar V3, de dos modos:
$HOME/.gnupg/options
añadiendo la línea:
force-v3-sigs
$ gpg [opción] --force-v3-sigs [fichero]
Intentaremos explicar cómo exportar las claves públicas y privadas desde
nuestros anillos de claves PGP
a los anillos de claves GnuPG
.
NOTA: este método se ha extraído del PGP2GnuPG Howto,
http://technocage.com/~caskey/gpg/pgp2gnupgp.html de Caskey L.
Dickson y no lo he probado personalmente. La última actualización del
mismo data de Diciembre de 1998. Por ello, y para poder integrar PGP
con
GnuPG
, recomiendo el uso del método que se explica en la
siguiente sección por ser más sencillo y fiable.
Suponiendo que tengamos instaladas las dos versiones de PGP
para
Unix/Linux
, tenemos pues sus respectivos anillos de claves públicas
y privadas en $HOME/.pgp/
:
PGP 2.6.x
PGP 2.6.x
PGP 5.x
PGP 5.x
A continuación usaríamos las órdenes que correspondan a cada versión para extraer la(s) clave(s) que deseemos.
Así, para extraer una clave de PGP 2.6.x
:
$ pgp -kx UID fichero anillo
vg.:
$ pgp -kx Pepe clavepepe2 ~/.pgp/pubring.pgp
Esta operación generaría el fichero clavepepe2.pgp
. Para extraer nuestra
clave privada, no tendríamos más que indicar nuestro UID y el fichero de las
claves secretas ~/.pgp/secring.pgp
. No nos consta que haya modo
alguno de indicar más de un UID con PGP 2.6.3
, si saben de alguno, por
favor envíenmelo a
homega@ciberia.es.
Una vez extraída la clave sólo queda importarla al fichero de GnuPG
:
$ gpg --import clavepepe2
Para extraer una clave de PGP 5.0
:
$ pgpk -x UID -o fichero
vg.:
$ pgpk -x Pepe -o clavepepe5
En este caso, el fichero por defecto es el de las claves públicas, y
obtendríamos el fichero clavepepe5
como hemos indicado.
Una vez más, sólo queda importar la clave:
$ gpg --import clavepepe5
Ya que PGP 5.0
no nos permite indicarle el fichero sobre el que queremos
operar, la extracción de la clave secreta se complica un poco. La solución
viene dada por un sistema superior como GnuPG:
Este procedimiento pone en riesgo la clave secreta durante un breve periodo de tiempo, así que no debería ser usado en un sistema multiusuario o público. Los pasos a seguir son:
GnuPG
.secring.skr
):
$ pgpk -e UID
vg.:
$ pgpk -e 0x614DB9FA
sec 1024 0x614DB9FA 1998-03-22 ---------- DSS Sign & Encrypt
sub 1024 0x2B9E0571 1998-03-22 ---------- Diffie-Hellman
uid Horacio <homega@vlc.servicom.es>
uid Horacio <homega@correo.com>
1024 bits, Key ID 0x614DB9FA, created 1998-03-22
"Horacio <homega@vlc.servicom.es>
"Horacio <homega@correo.com>"
Do you want to unset this key as axiomatic [y/N]? N
Do you want to unset this key as axiomatic [y/N]? N
Do you want to add a new user ID [y/N]? N
Do you want to change your pass phrase (y/N)? Y
Need old passphrase. Enter pass phrase: <introducir contraseña>
Need new passphrase. Enter pass phrase: <dejar vacío>
Enter it a second time. Enter pass phrase: <dejar vacío>
Changing master key passphrase...
Changing subkey passphrase...
Do want to set this as your default key [y/N]? N
Keyrings updated.
PGP 5.0
es incapaz de hacerlo, así que usaremos GnuPG
:
$ gpg --export-secret-keys --secret-key-ring ~/.pgp/secring.skr 0x614DB9FA > miclave
Todo esto en una una sola línea; se creará el fichero miclave
.
$ gpg --import < miclave
Acto seguido volveremos a introducir una contraseña a la clave desde
GnuPG
.
Es posible evitar todo lo anterior, manteniendo instaladas las diferentes
versiones de PGP
al mismo tiempo que la de GnuPG
. Siendo GnuPG
un sistema superior y más reciente, puede reconocer los anillos de claves de
PGP
como propios.
En el caso de PGP 5.0
, basta con añadir el camino completo a los
ficheros de claves de PGP 5.0
, precedido por keyring
o
secret-keyring
, al final del fichero
~/.gnupg/options
según corresponda:
keyring ~/.pgp/pubring.pkr
secret-keyring ~/.pgp/secring.skr
Los ficheros de claves de PGP 2.6.3
son reconocidos por GnuPG
por
defecto. Si no fuera así, bastaría con repetir la misma operación
anterior adaptándola a las circunstancias:
keyring ~/.pgp/pubring.pgp
secret-keyring ~/.pgp/secring.pgp
Si a continuación hacemos un listado de las claves públicas con GnuPG
,
observaremos que lee los tres ficheros, ~/.gnupg/pubring.gpg
,
~/.pgp/pubring.pkr
, y ~/pubring.pgp
:
$ gpg --list-keys
/home/usuario/.gnupg/pubring.gpg
--------------------------------
pub 1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig)
<dd9jn@gnu.org>
pub 1024D/A95AF46C 1998-11-29 Brenno J.S.A.A.F. de Winter
<brenno@dewinter.com>
sub 3072g/A3CA62A0 1998-11-29
(... y demás claves públicas DSA/ElGamal...)
/home/usuario/.pgp/pubring.pkr
------------------------------
pub 1024D/FAEBD5FC 1997-04-07 Philip R. Zimmermann <prz@pgp.com>
sub 2048g/42F0A0A0 1997-04-07
(... etc DSS/Diffie-Helman...)
/home/usuario/.pgp/pubring.pgp
------------------------------
pub 1024R/88A17FF5 1995-09-11 IRIS-CERT, Spain
(... etc RSA...)
Lo mismo sucedería con las claves privadas:
$ gpg --list-secret-keys
/home/horacio/.gnupg/secring.gpg
--------------------------------
sec 1024D/42337AE6 1999-03-14 Horacio (comentario)
<homega@vlc.servicom.es>
ssb 2048g/1F177864 1999-03-14
/home/horacio/.pgp/secring.skr
------------------------------
sec 1024D/7992AB40 1998-05-04 Horacio <homega@vlc.servicom.es>
uid Horacio <homega@correo.com>
ssb 2048g/917366AE 1998-05-04
/home/horacio/.pgp/secring.pgp
------------------------------
sec 1024R/32D4A925 1997-09-23 Horacio <homega@vlc.servicom.es>