SKS, criptografía de bolsillo

Modo de filtro

SKS se puede utilizar como un filtro dentro de una cadena de proceso de archivos de texto. En este caso, el texto que va a ser procesado entra siempre por la entrada estándar (stdin) y el resultado se emite por la salida estándar. Si la operación solicitada es el cifrado, entonces el resultado se codifica en base64 para transformarlo en cadenas texto que se pueden imprimir o editar.

También se pueden filtrar archivos binarios (opción -b), pero en este caso no se aplica codificación base64.

En este modo de funcionamiento los identificadores y contraseñas se introducen como parámetros del programa. Esto hace "visible" la contraseña si se usa directamente la línea de comandos para hacer uso de este modo. En realidad, el modo de filtro está pensado para usarlo dentro de guiones de comandos (scripts) de más alto nivel, donde las contraseñas se deben introducir mediante formularios con eco de estrella apropiados o similares.

Sin embargo, los ejemplos que se proporcionan aquí están escritos directamente en línea de comandos para mostrar con más claridad el funcionamiento. También se asumirá que se pretende filtro de texto (ASCII); el filtro binario es mucho más sencillo de entender a partir del filtro de texto.

Mediante la orden sks -f o sks -b obtenemos un breve resumen del manual del modo de filtro:

Modo de uso [filtrado]:
 cifrado convencional
   -fc "contraseña" <claro >cifrado-ascii
   -fC       (compresión previa de datos)
 cifrado de clave pública
   -fe [id 1]  [id 2] ... [id n]*  <claro >cifrado-ascii
   -fE       (compresión previa de datos)
 descifrar (todos casos)
   -fd "contraseña" <cifrado-ascii >claro
 firmar/verificar
   -fS "contraseña" <texto >texto-firmado
   -fV <texto-firmado >texto
[filtrado binario]:
 cifrado convencional
   -bc "contraseña" <claro >cifrado
   -bC       (compresión previa de datos)
 cifrado de clave pública
   -be [id 1]  [id 2] ... [id n]*  <claro >cifrado
   -bE       (compresión previa de datos)
 descifrar (todos casos)
   -bd "contraseña" <cifrado >claro
 (*) Será seleccionada toda clave que contenga cualquier identificador
     La ausencia de identificador selecciona todas las claves

La segunda letra tras la f elige la función del programa que actúa de forma muy similar a la orden en modo de no filtrado. Por ejemplo, para cifrar un flujo de texto con destino al usuario Torrente:
    ...(flujo de texto).. | sks -fE Torrente 
Un ejemplo más concreto usando la línea de comandos de Linux-Unix:
    cat mensaje.txt | sks -fE Torrente > cifrado.txt
donde en lugar de cifrado.txt se puede "enchufar" (pipe) otro programa, por ejemplo, de correo eléctrónico:
    cat mensaje.txt | sks -fE Torrente           \\
    | mail jltorrente@caspa.net -s "Lee esto"
El receptor usa la orden -fd para descifrarlo:
    cat cifrado.txt | sks -fd amiguete 
Si la contraseña está formada por palabras separadas por espacios, se pueden usar comillas:
    cat cifrado.txt | sks -fd "hola mundo"
Si el flujo de entrada contiene varios bloques de texto cifrado, el programa intentará descifrar todos con la clave propuesta. Los bloques se identifican con indicadores de comienzo y fin de armadura que incluyen los símbolos ###. La salida contiene sólo el texto descifrado; cualquier texto fuera de la armadura no se considera.

Para firmar se procede con -fS y el resultado es la entrada que se proporciona, junto con la cabecera de identificación, y con el código de firma incrustado al final. Por ejemplo, el usuario Hola Mundo firma un mensaje que envía al usuario Torrente:

    cat mensaje.txt | sks -fS "hola mundo"        \\
    | mail jltorrente@caspa.net -s "Lee esto"
y el receptor lo verifica mediante:
    cat mensaje.txt | sks -fV 
y obiene el mensaje "limpio" a la salida, más una confirmación por la salida de error (stderr).

Por su filosofía minimalista, el programa no contempla una orden para firmar y cifrar. Se puede invocar al programa dos veces y "enchufar" las salidas:

    cat mensaje.txt | sks -fS "hola mundo"          \\
    | sks -fE Torrente hola > mensaje.sks
que el receptor puede verificar mediante:
    cat mensaje.sks | sks -fd amiguete | sks -fV > mensaje.txt