SKS, criptografía de bolsillo
Keywords: criptografía, curva elíptica, clave pública, PGP, GPG

# SKS

## criptografía de bolsillo

### Gestión de claves

Ya hemos visto en la sección de instalación cómo importar claves y cómo generar una clave propia. Hay más opciones cuyo manual breve obtenemos mediante `sks -k`:

    Modo de uso [gestión de claves]:
     generación de clave
       -kg < id. de clave / contraseña > clave
     listado de claves
       -kl [id 1] [id 2] ... [id n]* > lista
     listado base-36 de claves (huella digital en modo ICAO)
       -kf [id 1] [id 2] ... [id n]* > lista
     exportación de claves
       -ke [id 1] [id 2] ... [id n]* > claves
     importación de claves
       -ki fichero-de-claves  < fichero-de-claves (alternativamente)
     borrar clave
       -kd id.-numérico  < id.-numérico (alternativamente)
     (*) Será seleccionada toda clave que contenga cualquier identificador
         La ausencia de identificador selecciona todas las claves
     Fichero de claves: /home/manuel/.skspkr

### Generación de claves

Ya hemos visto que para generar un par de claves pública-privada hay que teclear:

        sks -kg

El programa te pedirá una descripción identificativa de la clave y, a continuación, la contraseña. Se admite cualquier entrada por `stdin` que contenga al menos dos líneas: la primera como identificador y la segunda como contraseña. Por la salida estándar se emite la clave pública en formato legible por la función `-ki` (importar clave). De esta forma se puede redireccionar a un fichero con vistas a su distribución. No obstante, esto se puede hacer más adelante, mediante la exportación de claves.

Por diseño, el programa almacena sólo la clave pública. La clave privada es la propia contraseña (convenientemente "aliñada" y "digerida" por la función resumen) y ésta se almacena únicamente en tu memoria. De esta forma no te hace falta más que una copia del programa para generar en cualquier momento tu clave pública.

Como identificador conviene poner el nombre y/o dirección de correo electrónico. Se pueden usar cadenas de texto con cualquier tipo de caracteres, incluídos acentos, comillas, etc. Sin embargo, para la contraseña deberíamos emplear exclusivamente caracteres ASCII y, dentro de éstos, evitar todo tipo de comillas para que los guiones de comandos no se hagan un lío (las diversas comillas juegan papeles importantes como separadores en muchos lenguajes script). Tanto el identificador como la contraseña admiten un máximo de 256 caracteres.

Aquí viene ahora todo el rollo ese del cuidado en la elección de la contraseña, la poquísima entropía por letra de las lenguas naturales, la asombrosa eficiencia de los ataques de diccionario, etc, etc. Para resumir recomiendo una visita a diceware, que explica todo lo que hay que saber sobre contraseñas y ofrece un sencillo método con dados para generar contraseñas fuertes. Está en inglés pero hay enlaces a la versión en español (si bien es un poco cutre...).

▲

### Listado

Mediante la orden `-kl` obtenemos un listado simple de todas las claves del anillo. Se lista una clave por línea; por cada clave se muestra un identificador numérico de 32 bits, calculado a partir de todos los bits de la clave pública, y a continuación el identificador textual.

Se puede filtrar las claves añadiendo identificadores que coincidan con el criterio de búsqueda. El sistema es idéntico al de selección de claves en cifrado de clave pública. Por ejemplo:

        sks -kl Hola Hello

lista las siguientes claves:

     [6be386a4]: Hola Mundo /hola mundo/
     [40023a50]: Hello World /hello world/

### Huella digital

La orden `-kf` lista la "huella digital" (o fingerprint, que a veces se traduce literalmente por "huella dactilar") de cada clave para la comprobación por via telefónica o directa con su propietario. La huella digital es un resumen de la clave del cual se extraen los 30 dígitos, en base 36, menos significativos, en grupos de 5. En base 36 se usan los 10 dígitos del 0 al 9 más el alfabeto ICAO de 26 letras. Las letras se muestran en mayúsculas para mejor visibilidad, salvo la letra "o" que es minúscula para distinguirla mejor de la cifra "0".

Por ejemplo, las huellas del anillo de prueba son:

     [6be386a4]: Hola Mundo /hola mundo/
      F4XFT 5K97H AF4QN Y5454 HQJDS 894ME

     [40023a50]: Hello World /hello world/
      RM8QQ JR20C H3RLW F8YW9 PL64Q ZHZ9E

     [5425be1c]: Jose Luis Torrente <jltorrente@caspa.net> /amiguete/
      8EBGT BFFL2 PCFLL AYLKW RQMRK CSF9Z

     [00e14ca8]: Manuel Pancorbo Castro <mpancorbo # wanadoo.es>
      803ME P8X9X 6ZA5T YIC2P o7QL2 RDLX8

He preferido usar base 36 en lugar de la base hexadecimal porque:

1. Permite cadenas más cortas con fuerte resistencia a colisiones sin comprometer la legibilidad . Por ejemplo, GPG usa el algoritmo SHA1 que produce huellas de 40 dígitos hexadecimales con una resistencia de 160 bits. Las huellas de SKS usa el algoritmo de resumen TIGER, del cual se toman 30 dígitos en base 36 con una resistencia de 156 bits.
2. Permite dictar la huella mediante un método que ha probado su eficacia como es el alfabeto ICAO (Organización Internacional de Aviación Civil). De esta forma se mejora mucho la distinguibilidad en medios ruidosos, como es la línea telefónica (peor todavía si se trata de celurares) o la radio. Por ejemplo, para dictar la huella de mi clave diría: ocho, cero, tres, maik, eco..., o bien ocho de octavo, cero de nada, tres de tercero, eme de madrid, e de españa..., o cualquier otra convención que entiendan los interlocutores.

Se pueden filtrar las claves de las que se quiere obtener la huella. El procedimiento es exactamente el mismo que en el listado ordinario:

        sks -kf Hola Hello

     [6be386a4]: Hola Mundo /hola mundo/
      EM498 SDJQH 4545Y NQ4FA H79K5 TFX4F

     [40023a50]: Hello World /hello world/
      E9ZHZ Q46LP 9WY8F WLR3H C02RJ QQ8MR

▲

### Exportación de claves

El objetivo de esta orden es transportar las claves del anillo y tenerlas a mano junto con el programa para usarlas en toda ocasión. También es útil para extraer la propia clave y distribuirla. Por último, es una alternativa de verificación de claves, aunque un poco más farragosa porque la clave se muestra en base 64, que usa letras mayúsculas y minúsculas mezcladas.

Tecleando `sks -ke` obtenemos a la salida el listado de todas las claves en formato listo para su importación.

    -----SKS KEY-----
    key: bOKoAFmL259zVgL1BUBHkv0Csy5a5ZHCpIbj
    Hola Mundo /hola mundo/

    -----SKS KEY-----
    key: xkrhNQDF7OaJU5mCb5yLMjZoEF8GqXhXUDoC
    Hello World /hello world/

    -----SKS KEY-----
    key: il8XBZKD5ZdRsmVtvVE22qK+ZjWA4YzCHL4l
    Jose Luis Torrente <jltorrente@caspa.net> /amiguete/

    -----SKS KEY-----
    key: Aa86V48h3xy+5uoQIzXgiKCBSQN3gm7WqEzh
    Manuel Pancorbo Castro <mpancorbo # wanadoo.es>

Como siempre, podemos redirigir la salida a un fichero para su uso posterior. Por supuesto, se puede filtrar la búsqueda de la misma forma que hemos visto hasta ahora. Por ejemplo, si quisiera enviar mi clave a alguien podría hacer:

        sks -ke 00e14ca8 | mail miamigo@colegas.net -s "Mi clave"

▲

### Importación de claves

Para incorporar una o varias claves que tus corresponsales te hayan enviado, se usa la orden `-ki`.

        sks -ki miclave

donde `miclave` es el fichero que contiene las claves, tal y como las muestra la orden `-ke`. Si no hay argumento tras `-ki`, entonces el programa espera las claves por la entrada estándar `stdin`.
▲

### Borrar claves

Para borrar una clave es imprescindible saber su identificador numérico (las 8 cifras hexadecimales, no sirve introducirlo parcialmente) y sólo se pueden borrar de una en una. Esto es así para evitar el borrado accidental de una clave o de todo el anillo. La orden es `-kd`:

        sks -kd

y el programa emite el listado breve de todas las claves y pide el identificador de la clave que se desea eliminar. Alternativamente, si ya se conoce el identificador, entonces éste se puede teclear como parámetro de entrada:

        sks -kd 40023a50

▲

### Otras funciones

Debido al diseño minimalista de SKS, no se contemplan otras opciones (cambiar el identificador textual, borrar varias claves,...) y, menos aún, la opción de firmar claves para garantizar con la propia firma la identidad. Esto último, el crédito en las claves, es cuestión del usuario.

Si se quieren manipular claves, se puede hacer directamente sobre el fichero que contiene el anillo. El fichero y su ruta completa aparecen al final de la pantalla de ayuda. Se puede editar el fichero para borrar varias claves de golpe, modificar identificadores textuales, insertar claves "a pelo", etc.

▲