STANDAR

 

Pretty GoodMR  Privacy (PGP), "Intimidad bastante buena", de Phil's Pretty Good Software, es una aplicación informática de criptografía de alta seguridad para MSDOS, Unix, VAX/VMS y otros ordenadores. PGP permite intercambiar ficheros y mensajes con intimidad, autenticación y comodidad. 'Intimidad' quiere decir que sólo podrán leer el mensaje aquellos a quienes va dirigido. 'Autenticación' quiere decir que los mensajes que parecen ser de alguien sólo pueden venir de esa persona en particular. 'Comodidad' quiere decir que la intimidad y la autenticación se consiguen sin los problemas de gestión de claves asociados a otros programas de criptografía convencional. No se necesitan canales seguros para intercambiar claves entre usuarios, por lo que PGP resulta mucho más fácil de utilizar. Esto se debe a que PGP está basado en una potente nueva tecnología llamada criptografía de "clave pública".

 

OpenPGP proporciona servicios de la integridad de los datos para  mensajes y los archivos de datos usando estas tecnologías como base:

 

-         Firmas digitales

-         Encriptación

-         Compresión

-          conversión radix-64

 

 

Además, OpenPGP proporciona claves de la gerencia y servicios certificados, pero muchos de éstos están más allá del alcance de este documento.

 

 

OpenPGP utiliza dos métodos de encriptación para proporcionar a confidenciabilidad: encriptación clave-simétrica y encriptación  clave-pública. Con la encriptación  clave-pública, el objeto es encriptado usando un algoritmo simétrico de encriptación. Cada clave simétrica se utiliza solamente una vez.

Un nueva " sesión clave " se genera como número al azar para cada mensaje. Puesto que se utiliza solamente una vez, la clave sesión está limitado al mensaje y transmitida con él. Para proteger la  clave, esta es encriptada con clave- pública del receptor. La secuencia es como sigue:

 

1.  El remitente crea un mensaje.

2. El OpenPGP que envía genera un número al azar que se utilizará como clave de la sesión

para este mensaje solamente.

 

3. Se encripta la clave de la sesión usando una  clave pública para cada recipiente. Éstas " Claves encriptadas de la sesión " comienzan el mensaje.

 

4. El OpenPGP que envía el mensaje encriptado usando la clave de la sesión, que forma el resto del mensaje. Observe que el mensaje también está comprimido generalmente.

 

5. El OpenPGP que  recibe desencripta la clave de la sesión usando la clave privada del recipiente.

 

6. El OpenPGP que recibe  desencripta el mensaje usando la  clave de la sesión. Si el mensaje fue comprimido, será descomprimido.

 

 

Con el encriptación clave-simétrica, un objeto se puede encriptar con una clave simétrica derivada del passphrase (o el otro secreto compartido), o de un mecanismo de dos etapas similar al método de clave-pública descrito arriba en el cuál una clave de sesion

es encriptada con un algoritmo simétrico afinado de un secreto compartido.

 

Ambas firmas digitales y servicios de confidenciabilidad pueden ser aplicados al mismo mensaje. Primero, una firma se genera para el mensaje y se asocia al mensaje. Entonces, el mensaje más firma se encripta usando una clave simétrica de la sesión. Finalmente, la clave de la sesión es encriptada usando encriptacion clave-pública y se prefija el al bloque encriptado.

 

Materias de la carrera con las que se relaciona el tema?

 

 

  • Compiladores.
  • Datos y estructuras de almacenamiento.
  • Teleprocesos.
  • Teoría de la computación 2.

 

Compiladores:          Aquí nos interesaría ver el tipo de encriptación utilizado y  la codificación del programa fuente.

 

Da. y Estr. De Alm.: La forma de manejo de los datos seria lo mas importante a observar en esta materia.

 

Teleprocesos :           En esta materia se centraría en la forma de transmisión de los datos y los tipos de protocolos necesarios para su uso, el tipo de enlace y los el volumen de los paquetes enviados.

 

Teo. de la comp. 2:       En esta materia al igual que en compiladores nos interesa el tipo de encriptación, la codificación del programa fuente, nada mas que aquí yo añadiría el estudio de los tipos de datos codificados, es decir el uso de enteros, caracteres y números de punto flotante y su representación en 32 y 64 bits.

 

 

Que otras materias externas servirían?

 

Todas aquellas materias en las cuales se maneje el envió de datos cifrado, para transferencias de passwords, datos privados, números de tarjetas de crédito y transferencias de DVD y otros formatos encriptados.  Además para un mejor entendimieto, pienso que seria necesaria una materia de Lenguajes Formales o una ampliación al temario de Teo de la comp. 2.   Alguna materia de S.O. en la cual se lleve el manejo de Unix o cual quiera de su variantes (linux, sun , silicon, rs, solaris, HP-UX, irix , etc).

 

 

PSEUDOCODIGO DE ALGORITMOS:

 

LOS ALGORITMOS DE PGP

 

El programa PGP emplea tres algoritmos de encriptado : el RSA, de clave pública, el IDEA, de clave única, y el MD5 para producir digests, combinados de una forma que se explicará más adelante para conseguir la máxima seguridad y la mayor rapidez y comodidad.
 

EL ALGORITMO RSA:

RSA, diseñado por Ron Rivest, Adi Shamir y Leonard Adleman, basa su seguridad en la pertenencia al grupo de los problemas difíciles de la clase NP del problema de la factorización de números grandes. La clave pública y la privada están en función de un par de números primos grandes (de 100 o 200 dígitos).  Es decir, hallar la clave privada supondría encontrar por factorización los dos números primos que la forman, un cálculo hoy en día todavía imposible para claves de al menos 1024 bits (recordad: "hoy en día", otoño de 1999).

Para generar las dos claves, se toman aleatoriamente dos números primos grandes, p y q. Para una mayor seguridad,  p y q son de la misma longitud. Se calcula n = p*q.

A continuación, se elige aleatoriamente la clave de encriptación, e, de tal manera que e y (p-1)*(q-1) son primos relativos (es decir, de manera que el máximo común divisor de e y (p-1)*(q-1)  sea 1; o dicho en otras palabras, que el único factor que compartan e y (p-1)*(q-1)  sea 1).

Por último, se calcula la clave de descifrado, d, tal que:

d = e-1 mod ((p-1)*(q-1))

d y n también son primos relativos. Los números e y n son la clave pública; d es la clave privada. Los dos números primos, p y q, dejan de ser necesarios al terminar el proceso. Pueden ser descartados, pero nunca han de ser revelados.

Para encriptar un mensaje m en primer lugar se divide en bloques numéricos mi menores que n (por ejemplo, en el caso de datos binarios, se toma la mayor potencia de 2 menor que n), obteniéndose un mensaje encriptado, c formado por varios bloques ci. La fórmula de encriptación es:

ci = mie mod n

Para desencriptar, se toma cada bloque ci y se calcula:

mi = cid mod n

Igualmente, se podría haber encriptado el mensaje con d y descifrarlo con e.
 

SEGURIDAD DE RSA:

Se supone (no es demostrable matemáticamente) que la seguridad de RSA se basa totalmente en el problema de factorización de números grandes, es decir, la factorización de n, hoy en día virtualmente imposible, como se ha dicho, con claves de al menos 1024 bits (conviene ir siempre por delante, y usar ya las de 2048). También sería posible atacar RSA descubriendo el valor (p-1)*(q-1), pero este ataque equivale a una factorización de n.

Otra posibilidad es un ataque de fuerza bruta probando cualquier d posible hasta dar con el valor correcto, pero es un ataque aún menos eficiente.

Han surgido diversos estudios sobre nuevos posibles ataques, pero hasta la fecha no ha surgido ninguno sencillo.

Otra cuestión podría surgir en cuanto a p y q. La mayoría de los algoritmos empleados para calcular primos grandes son probabilísticos; por tanto, ¿qué ocurriría si no son primos?. El problema se resuelve haciendo disminuir esta posibilidad al mínimo, (y así ocurre en PGP, que emplea alugnos algoritmos de detección de primalidad) y aunque se diera el caso, el proceso de cifrado y descifrado daría errores con estos números, por lo que el problema sería rápidamente descubierto. Hay unos pocos números, los números de Carmichael, que no son detectados por algunos algoritmos de primalidad y son inseguros. Pero si alguien da aleatoriamente al generar las claves con uno de estos números, entonces es al día siguiente le caerá un rayo justo después de enterarse de que ha acertado la quiniela y la primitiva. :-)

Existen asimismo varios ataques,  no contra el algoritmo en sí, sino contra la forma de implementarlo. Explicarlos aquí haría que nos extendiéramos demasiado, y que se sepa hasta la fecha, la implementación de PGP no es vulnerable a ellos.

 

 

 

EL ALGORITMO IDEA

El algoritmo de clave única IDEA utiliza texto en bloques de 64 bits y una clave de 128 bits. Ha sido diseñado de tal manera que el proceso de encriptado consiste en ocho pasos de encriptación que son idénticos excepto en los sub-bloques de la clave utilizados, terminando con una transformación de la salida. En cada paso se utilizan tres operaciones : suma modular con módulo 216, multiplicación modular con módulo 216 +1 y OR exclusivo.

Hay un total de ocho rondas de encriptación. En cada ronda se divide el bloque de 64 bits en cuatro bloques de 16 bits: X1, X2, X3 y X4, siendo combinados con las operaciones indicadas entre sí y con seis sub-bloques de 16 bits de la clave (subclaves). Entre ronda y ronda, se cambia de posición a los bloques 2 y 3. Finalmente, se combinan los cuatro sub-bloques con cuatro subclaves.

Los pasos de cada ronda son los siguientes:
 

  1. Multiplicar X1 y la primera subclave.
  2. Sumar X2 y la segunda subclave.
  3. Sumar X3 y la tercera subclave.
  4. Multiplicar X4 y cuarta subclave.
  5. Calcular el XOR de los pasos 1 y 3.
  6. Calcular el XOR de los pasos 2 y 4.
  7. Multiplicar los resultados del paso 5 y la quinta subclave.
  8. Sumar los resultados de los pasos 6 y 7.
  9. Multiplicar los resultados del paso 8 y la sexta subclave.
  10. Sumar los resultados los pasos 7 y 9.
  11. Calcular el XOR de los pasos 1 y 9.
  12. Calcular el XOR de los pasos 3 y 9.
  13. Calcular el XOR de los pasos 2 y 10.
  14. Calcular el XOR de los pasos 4 y 10.

La salida producida por la ronda son los cuatro sub-bloques resultado de los pasos 11, 12, 13 y 14. Se cambia el bloque 2 por el 3 (excepto en la última ronda), y ésta será la entrada de la siguiente ronda.

Tras la octava ronda, hay una transformación final de la salida:

  1. Multiplicar X1 y la primera subclave.
  2. Sumar X2 y la segunda subclave.
  3. Sumar X3 y la tercera subclave.
  4. Multiplicar X4 y cuarta subclave.

El algoritmo emplea 52 subclaves, que son creadas de la siguiente manera: se divide la clave de 128 bits en ocho subclaves de 16 bits. Éstas serán las ocho primeras subclaves del algoritmo (seis para la primera ronda, y dos para la segunda). Después, se rotan 25 bits de la clave hacia la izquierda y de nuevo se divide en ocho subclaves. Las cuatro primeras son para la segunda ronda; las otras cuatro para la tercera. Se realiza otra rotación de 25 bits a la izquierda, se vuelve a dividir en ocho subclaves... hasta el final del algoritmo.

El proceso de descifrado es prácticamente el mismo que el de encriptación, con la diferencia de que las 52 subclaves son las inversas de las empleadas en la encriptación respecto de la operación en la que fueron usados, además de utilizarse en el orden inverso.

 

SEGURIDAD DE IDEA:

La longitud de la clave de IDEA es de 128 bits. Suponiendo que un ataque de fuerza bruta fuera el más eficiente, haría falta calcular 2128 (1038) encriptaciones para encontrar la clave. Si se lograra diseñar un chip que probara mil millones de claves por segundo y se fabricaran mil millones de ellos, aún harían falta 1013 años - más que la edad del Universo. Con 1024 chips como éste se podría encontrar la clave en un día, pero no hay suficientes átomos de silicio en el Universo para construirlos.

En cuanto a los ataques basados en criptoanálisis, por ahora, sólo unos pocos estudios, como el de Willi Meier, han logrado ataques más eficientes que el de fuerza bruta (empleando 242 operaciones), pero contra una implementación de IDEA con dos rondas. El IDEA normal, con ocho rondas, es por ahora seguro.

Por último, John Daemen descubrió algunas claves débiles de IDEA, pero la posibilidad de generar aleatoriamente alguna de estas claves es de una entre 296.  Y si incluso queremos eliminar esta posibilidad, basta con calcular el XOR de cada subclave y 0x0dae antes de emplearla.
 

EL ALGORITMO MD5:

El algoritmo MD5 de message digests está publicado en la Request For Comment 1321. La RFC incluye una implementación en C.

Se comienza suponiendo que se tiene un mensaje de b bits de longitud, escritos m0, m1,...m(b-1). El algoritmo tiene cinco pasos :
 

Paso 1 : Adición de bits de relleno.

El mensaje es rellenado con n bits, de tal manera que le falte a su longitud 64 bits para ser un múltiplo de 512. De esos n bits, el primero es 1 y el resto son 0.

Paso 2 : Adición de la longitud.

La nueva longitud tras añadir los bits de relleno es almacenada en una representación de 64 bits y añadida al final del mensaje en forma de dos palabras de 32 bits, yendo en primer lugar la que contiene los bits menos significativos. Si la longitud del mensaje fuera mayor que 264, solamente se usan los 64 bits menos significativos.

De esta manera, la longitud del mensaje es ahora múltiplo de 512. M0...Mn-1 denotan las palabras de 32 bits del mensaje.

Paso 3 : Inicialización de los bufferes.

Se usan cuatro bufferes, A,B,C y D, que son registros de 32 bits. Son inicializados a los siguientes valores :

A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
 

Paso 4 : Procesado del mensaje en bloques de 16 bits.

En primer lugar se definen cuatro funciones auxiliares que tienen como entrada tres palabras de 32 bits y como salida una palabra de 32 bits.

F(X,Y,Z) = (X AND Y) OR ((NOT(X)) AND Z)
G(X,Y,Z) = (X AND Z) OR (Y AND (NOT(Z))
H(X,Y,Z) = X XOR Y XOR Z
I(X,Y,Z) = Y XOR (X OR (NOT(Z)))

En este paso se usa una tabla de 64 elementos T[1 ... 64] construida con la función seno, siendo Ti la parte entera de 4294967296 * abs(sen(i)) (i en radianes).

 

El proceso es el siguiente:

/*Procesar cada bloque de 16 bits. */
For i = 0 to N/16-1 do

/*Copiar bloque i en X. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /* of loop on j */

/* Grabar A como AA, B como BB, C como CC, y D como DD. */
AA = A
BB = B
CC = C
DD = D

/* Primera etapa. */
/* [abcd k s i] denota la operación a = b + ((a + F(b,c,d) + X[k] + T[i]) << s). */
/* Realizar estas 16 operaciones. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

/*Segunda etapa. */
/* [abcd k s i] denota la operación a = b + ((a + G(b,c,d) + X[k] + T[i]) << s). */
/* Realizar estas 16 operaciones. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

/*Tercera etapa. */
/* [abcd k s t] denota la operación a = b + ((a + H(b,c,d) + X[k] + T[i]) << s). */
/* Realizar estas 16 operaciones. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

/*Cuarta etapa. */
/* [abcd k s t] denota la operación a = b + ((a + I(b,c,d) + X[k] + T[i]) << s). */
/* Realizar estas 16 operaciones. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

/* Incrementar los registros*/
A = A + AA
B = B + BB
C = C + CC
D = D + DD

end /* del bucle i */
 

Paso 5 : Salida.

El message digest producido es A, B, C, D, empezando con los bits menos significativos de A y terminando con los más significativos de D. Independientemente de la longitud del mensaje, el digest será de 128 bits.
 

SEGURIDAD DE MD5:

Berson trató de utilizar el criptoanálisis diferencial contra una sola ronda de MD5, pero su ataque no es efectivo contra las cuatro rondas. Hay un ataque más efectivo de den Boer y Bosselaers, en el que se producen colisisones en la función de compresión. En principio, esto no tendría un impacto práctico en la seguridad del hash, pero a fin de cuentas es una violación de los principios de diseño de MD5, por lo que convendría la cautela. Hay que tener en cuenta, por otro lado, que en el caso que nos ocupa, PGP, aunque se pudiera explotar esta debilidad, no afectaría a la seguridad de la encriptación, sino a la veracidad de las firmas digitales. En el difícil caso de que se lograra un ataque efectivo, bastaría recurrir a una versión superior de PGP o a gnuPG y emplear firmas DSA/SHA-1.

 

Como prever  errores?

PGP (Pretty Good Privacy) versión 5.0 puede generar claves de muy baja calidad (es decir, predecibles por un atacante), dependiendo de las circunstancias y el sistema operativo empleado.

PGP es un popular programa de cifrado y firma digital, que emplea tecnología de clave pública. El usuario genera sus propias claves una vez, empleando el propio programa. La clave pública puede ser distribuida libremente, y la clave privada debe ser poseída exclusivamente por su propietario.

Existe un fallo en la versión 5.0 de PGP, que se manifiesta cuando el usuario genera una clave asimétrica en un entorno Unix que proporcione un dispositivo "/dev/random" (por ejemplo, Linux o *BSD). La rutina de lectura de dicho fichero contiene un fallo de programación que provoca que no se recoja NINGUNA entropía a través suya. Ello hará que el programa "piense" que cuenta con valores aleatorios de suficiente calidad como para generar una clave segura, cuando en realidad esto no es así. Las claves resultantes, por tanto, serán predecibles e inseguras.

Las versiones 2.* y 6.5 de PGP no están afectadas por este problema. Se recomienda a los usuarios que hayan generado su clave con la versión 5.0 que generen una revocación de la misma y que creen una clave nueva con una versión inmune.

Los usuarios que no quieran instalar una versión inmune en su sistema, pueden continuar usando la versión 5.0, corrigiendo el bug ellos mismos. Ello es tan fácil como editar el fichero "src/lib/ttyui/pgpUserIO.c" y modificar la línea 1324. Esa línea pone

     RandBuf = read(fd, &RandBuf, count);

cuando debería poner

     read(fd, &RandBuf, count);

Luego sólo queda compilar y reinstalar.

Más información:

·         Security flaw in PGP 5.0

  • The International PGP Home Page

 

Esta versión contiene soporte para nuevos métodos de cifrado, mediante algoritmos todavía más rápidos y seguros, como el DSS/Diffie-Hellman, soporte para servidores de claves integrado en el propio programa (protocolo HKP), mayor integración en programas de correo, etc. Lamentablemente también han aparecido dos tipos de licencias, la comercial y la de toda la vida ó "freeware", haciendo distinciones entre las prestaciones de las dos versiones.

Centrándonos en la versión Unix, encontramos -como es tradicional- el paquete que contiene el código fuente del programa, a fin de que nosotros mismos lo compilemos y lo instalemos, una práctica muy recomendable en este tipo de software y que (como veremos) nos reportará ventajas sustanciales en comparación con las versiones ya compiladas (para Windows, por ejemplo). Como decíamos, existen ahora dos versiones de PGP 5.0i: la comercial (de pago) y la freeware, que es la que se obtiene gratis de cualquier servidor de FTP. Una de las desventajas de los usuarios de la versión freeware 5.0 es que no permite generar claves RSA, es decir, el anterior formato de claves (versión 2.6.x y anteriores), con lo que automáticamente los nuevos usuarios de la versión 5.0 perderían compatibilidad con los usuarios que tienen claves RSA (por cierto, la gran mayoría). En la práctica, lo que se recomienda hacer a los nuevos usuarios es instalarse una versión antigua (2.6.3i), generarse la pareja de claves RSA y después instalarse la 5.0 y generarse aquí las nuevas claves DSS/DH, a fin de no perder compatibilidad; sin duda una solución poco elegante pero la única factible si no queremos pagar la licencia de la versión 5.0 comercial.

Pues bién; la principal ventaja de usar PGP 5.0i freeware compilándola en nuestra máquina UNIX es que SÍ SE PUEDEN GENERAR CLAVES RSA. Simplemente nos pedirá el tipo de clave que queremos generar, RSA ó DSS/DH. Es una buena idea generarse ambas a fin de poder mantener compatibilidad con ambos tipos, teniendo en cuenta que las claves RSA son todavía usadas por la mayoría de usuarios. Esto se hace con "pgpk -g" (ver las páginas del manual del programa):

polaris:~>pgpk -g
Choose the type of your public key:
1) DSS/Diffie-Hellman - New algorithm for 5.0 (default)
2) RSA
Choose 1 or 2: 2
[...]
 

 

QUÉ ERRORES, QUE AVISOS?

 

 

Ningún programa está 100% libre de errores. PGP 2.6.3i es probablemente la versión de PGP más libre de errores disponible hasta ahora

 

PUNTOS DÉBILES Y PRECAUCIONES

PGP ha demostrado ampliamente su gran seguridad, y todavía ningún experto ha podido romper sus claves. Sin embargo, por razones ajenas al programa y que caen fuera de sus posibilidades, puede no ser impenetrable en algunos casos a los ataques destinados a hacerse con nuestros datos. El principio fundamental que hay que tener en mente es evaluar si la información que se protege es más valiosa que los medios para obtenerla; de esta manera, aprenderemos a defendernos de los ataques poco costosos (en los que valga la pena emplear recursos en atacarnos porque la información es más valiosa que los recursos empleados) y a ignorar los caros (en los que el coste que supondría atacarnos no es rentabilizado por el valor de nuestra información).

 

- Descubrimiento de la contraseña (pass phrase)

Es sin duda el ataque más simple, y depende completamente del propietario de la clave. Las medidas son las obvias habituales : el único lugar completamente seguro para la contraseña es la cabeza ; hay que procurar guardar bien la clave secreta ; hay que buscar una contraseña compleja...
 

- Claves públicas falsas

Este tema ya fue comentado en el apartado de manejo de claves. PGP proporciona muchas opciones para protegerse contra las claves falsas, pero una vez más depende de la inteligencia del usuario.
 

- Archivos no del todo borrados

Este problema surge del proceso de borrado de los archivos realizado por el sistema operativo. Cuando hemos encriptado el mensaje y borramos el original sin encriptar, el sistema realmente no borra físicamente el archivo del disco, sino que simplemente marca los sectores que ocupa como libres, quedando los datos en el disco hasta que sean sobreescritos por otro archivo que ocupe su lugar. Si el atacante es rápido, puede leer esos sectores antes de que se sobreescriban. Y no digamos lo que puede ocurrir con esas "bonitas" utilidades Norton y similares que recuperan archivos borrados...

PGP tiene una opción prevista para estos casos. A la hora de encriptar, se puede añadir la opción "w", que hará que el programa no sólo borre el archivo del texto original, sino que además lo sobreescriba grabando el archivo encriptado en sus sectores (el archivo encriptado siempre es mayor que el original).

A pesar de todo esto, aún podrían quedar pequeñas trazas magnéticas de los datos en el disco, que pueden ser suficientes para hardware especializado en estas operaciones ; sin embargo, no son equipos al alcance de cualquiera.
 

 

- Virus y caballos de Troya

Otro problema puede surgir con la creación de algún virus destinado a capturar la pass phrase o la clave secreta, dejando la información en un archivo o enviándola a otro ordenador si estamos en una red. Esto no puede ser controlado por PGP, y es una tarea que ha de recaer en programas antivirus.

Por otro lado, se podría crear un "caballo de Troya" a partir de PGP, es decir una versión falsa que tenga su mismo aspecto pero no funcione correctamente. Por ejemplo, podría diseñarse de tal manera que admita firmas falsas. La única protección posible es conseguir nuestra copia de PGP de fuentes fiables (por ejemplo, de las páginas web de gente que ha participado en su desarrollo, de determinadas universidades, de estas páginas ;-)...), u obtener varias copias de sitios muy dispersos y compararlas para ver si todas son iguales. Por otro lado, las versiones auténticas de PGP siempre van acompañadas de un archivo de claves que contiene la firma de Philip Zimmermann y la de otros de los programadores que han participado en la creación de PGP.

 

 

- Fallas de seguridad "físicos"

También podría ocurrir que alguien entrara en nuestra casa y robara de nuestro ordenador la clave secreta. O en una empresa, algún empleado podría ser sobornado. Es importante vigilar dónde se deja la clave. Si por ejemplo se usa PGP en el trabajo, se puede llevar y traer una copia en un diskette cada dia. 

 

 

- Escuchas

Atacantes bien preparados pueden ser capaces de detectar remotamente las señales electromagnéticas del ordenador con un equipo de escuchas, pudiendo coger todo lo que se teclee o lo que se vea en pantalla. Este ataque puede evitarse blindando electromagnéticamente todo el equipo y cables con la tecnología llamada Tempest, fabricada en Estados Unidos y utilizada por gobiernos y grandes empresas.

 

- Inseguridad en equipos multiusuario

PGP fue diseñado originalmente en una PC. Sin embargo, se han creado versiones para sistemas multiusuario. En sistemas así, alguien puede colarse en nuestro directorio (empezando por el root) y ver nuestros datos o hacerse con nuestras claves. La seguridad en estos casos dependerá de la situación. Puede ser que se pueda confiar en todos los usuarios de un sistema, por ejemplo en un pequeño departamento de una empresa, o quizás puede que no haya intrusos interesados en los datos. PGP no puede garantizar la seguridad del texto sin encriptar.
 

- Análisis del tráfico

Aunque el atacante no pueda leer los textos encriptados, quizás pueda hacer un análisis del tráfico, es decir, averiguar de dónde vienen y a dónde van los mensajes, su tamaño, la hora a la que se envían... PGP no tiene protección contra esta técnica, y pueden ser necesarios protocolos de comunicación especializados. O en Internet puede probar a usarse un remailer anónimo que ayude a despistar al atacante.
 

 

 

 

- Criptoanálisis

El criptoanálisis es un conjunto de técnicas destinadas a buscar puntos débiles de los algoritmos de encriptación para romperlos.

PGP quizás podría sufrir un ataque con éxito mediante criptoanálisis hecho por alguien con enormes recursos de supercomputadores, como una agencia de inteligencia de un país desarrollado. Quizás, como se señaló al hablar del algoritmo RSA, han encontrado algún método para romperlo, en lugar del "imposible" cálculo de factores. O quizás hay algún método para el IDEA.

De todas maneras se puede ser algo optimista. Es importante señalar por ejemplo que según Ron Rivest, el gobierno americano usa entre otras cosas el RSA para proteger los códigos de sus armas nucleares. Expertos civiles en criptografía han atacado sin éxito el RSA desde

1978. El IDEA ha sido creado por los que son quizá los mejores criptógrafos de Europa, y también ha resistido todo ataque. Y la compresión que realiza PGP antes de encriptar pone

 

Soluciones a los problemas mas comunes:

Compile el problema en Irix y Solaris

Si usted está teniendo problemas con el fichero lib/pgp/helper/pgpLeaks.c , intente quitar la directiva en línea en la línea 78:

 - pgpLeaksSuspended(void) boleano boleano + estático en
línea estático { sSuspendCount de vuelta! =  0;  }

 

Gracias a Thomas C. Fischer y Payl C. Leyland por señalar esto hacia fuera.

 

Error en el bus en Solaris 2,5,1
Kris Van Hees < [email protected] > escribió:

Hi,

 

En la compilación del PGP 5.0i en un ambiente  Solaris 2,5,1 (Sparc20) con GCC 2,7,1 he tenido éxito, pero los abortos del código resultan con un error en el bus al ejecutar la generación dominante (pgpk - g). Rastreé acerca del problema al struct MD5Context, que contiene un condicional para HAVE64, que se fija junto con typedefs en include/pgpUsuals.h. No estoy seguro porqué, pero con que auto-muve-auto-resolving encuentra un tipo de 64bit tan ' largo sin firmar ', y fijo así HAVE64. Con todo y cuanto código está utilizando en esto falla. Pienso que esto pudo ser un problema con la interacción de GCC/Solaris . Me suena como  un problema de alineación  en el bus.

Invalidé manualmente el cheque HAVE64, de modo que el código utilice dos palabras de 32bit, y ése solucionó el problema.

 

Problema con configuraciones 64-bit


Si usted está en una máquina 64-bit tal como la alfa de la DEC, intente aplicar la corrección siguiente:

 

 *** src/lib/pgp/include/pgpUsuals.h~ se sentó agosto 9
22:44:58 1997 --- src/lib/pgp/include/pgpUsuals.h Tue de agosto 12 el
16:57:16 1997 * / # del **** del *** 50.57 del *************** si
ULONG_MAX > 0xfffffffful # si == 0xfffffffffffffffful de ULONG_MAX!
ulong bnword64 del typedef;    # definen BNWORD64 bnword64 # definen
HAVE64 1 # endif # endif --- 50.56 * / # si ULONG_MAX > 0xfffffffful #
si == 0xfffffffffffffffful de ULONG_MAX!  ulong word64 del typedef;  #
defina HAVE64 1 # endif # endif
 

Gracias a Paul C Leyland < [email protected] > por señalar esto.

 

Usando PGP 2.6.3i y PGP 5,0 paralelamente.

 
Si usted tiene PGP 2.6.3i ya instalado e instala  PGP 5.0i, el viejo binario será destruido. Marcel Waldvogel explica cómo fijar esto:

También todavía necesito los viejos binaries alrededor, así que he realzado los makefiles un poco. Con Maker " para instalar INSTPGP=pgp5 " es posible ahora instalar el PGP de modo que el binario principal (que usted nunca necesita llamar de todos modos) y la paginación principal del hombre ahora escucha " pgp5 " en vez del " PGP ". Puesto que los cambios están al " Makefile.in"s (de modo que pueda ser incluido en la distribución, * INDIRECTA *), usted necesita ejecutar " config " otra vez luego (o aplique la corrección manualmente a los makefiles).

Vea las dif.  abajo. Puesto que tengo mismo problema de Solaris 2,5,1 que Juergen, no puedo utilizar actualmente el PGP, tampoco.

- - Marcel

 el diff - r - el *** pgp50i-b8/src/apps/pgp/Makefile.in Mon
de agosto 11 el 15:41:37 de c pgp50i-b8/src/apps/pgp/Makefile.in
old/pgp50i-b8/src/apps/pgp/Makefile.in 1997 - ---
old/pgp50i-b8/src/apps/pgp/Makefile.in sentó de agosto 9 el 23:45:38
1997 **** del *** 7.15 del *************** #
 
PROG = PGP!  # fije esto a " pgp5 " si usted desea las viejas y nuevas
versiones del mantiene en paralelo!  INSTPGP = PGP!  INSTALLPROGS =
 
OMMON=../common Localincludes = - I$(common) - I$(srcdir)/$(COMMON) -
--- 7.13 #
 
PROG = PGP!  INSTALLPROGS = $(prog)
 
OMMON=../common Localincludes = - I$(common) - **** Del *** 22.32 Del
*************** De I$(srcdir)/$(COMMON)
 
instale::  $(prog) (\!  $(install) - PGP de m 755
$(destdir)$(bindir)/$(instpgp);  \ Cd $(destdir)$(bindir);  \ $(rm)
pgp_old del pgpv de los pgps del pgpe;  \!  $(ln_s) $(instpgp) pgpe;
\!  $(ln_s) $(instpgp) pgps;  \!  $(ln_s) $(instpgp) pgpv;  \!
$(ln_s) $(instpgp) pgp_old \) - --- 20.30
 
instale::  $(prog) (\!  $(install) - PGP de m 755 $(destdir)$(bindir);
\ Cd $(destdir)$(bindir);  \ $(rm) pgp_old del pgpv de los pgps del
pgpe;  \!  $(ln_s) pgpe del PGP;  \!  $(ln_s) pgps del PGP;  \!
$(ln_s) pgpv del PGP;  \!  $(ln_s) el pgp_old del PGP \) el diff - r -
el *** pgp50i-b8/src/man/Makefile.in Mon de agosto 11 el 16:01:48 de c
pgp50i-b8/src/man/Makefile.in old/pgp50i-b8/src/man/Makefile.in 1997 -
--- old/pgp50i-b8/src/man/Makefile.in sentó de agosto 9 el 23:45:36
1997 **** del *** 6.20 del *************** # $$Id:  Makefile.in, v
1,3,2,4 1997/06/24 quark Exp de 23:03:16 $ #
 
# cambio esto a pgp5 si usted desea viejas y nuevas versiones en
paralelo!  INSTPGP=pgp!  MAN1=$(INSTPGP).1 pgpe.1 pgpk.1 pgps.1 pgpv.1
MAN5=pgp.cfg.5
 
$(instpgp).1:  pgp.1!  $(ln_s) $
<$@
!
! install:: $(INSTPGP).1
   if test 'x$(MAN1)' != x; then \
    if test ! -d $(DESTDIR)$(mandir)/man1; then \
     mkdir -p $(DESTDIR)$(mandir)/man1; \
- --- 6,15 ----
  # $Id: Makefile.in,v 1.3.2.4 1997/06/24 23:03:16 quark Exp $
  #
 
! MAN1=pgp.1 pgpe.1 pgpk.1 pgps.1 pgpv.1
  MAN5=pgp.cfg.5
 
! install::
   if test 'x$(MAN1)' != x; then \
    if test ! -d $(DESTDIR)$(mandir)/man1; then \
     mkdir -p $(DESTDIR)$(mandir)/man1; \

 

 

 

Seguridad:

 

PGP se basa en algoritmos cuya robustez ante ataques está muy lejos del alcance de cualquier hacker profesional. La criptografía de claves públicas y los algoritmos utilizados se vienen estudiando desde hace 25 años y son los más robustos que existen. Más específicamente, PGP fue diseñado y probado por los criptógrafos más competentes del mundo y, hasta el momento, nadie ha sido capaz de romper su código. Para descifrar un mensaje encriptado con PGP haría falta tal poder de computación que resulta impensable que ningún individuo o compañía privada pudiera hacer frente a los costes. Nótese que, con las computadoras que existen hoy día, harían falta muchos años de cálculos constantes para acercarse al éxito.

 

Sin embargo, esto es sólo válido para el mundo de los ciudadanos de a pie. La pesadilla de todo criptógrafo es el poder de computación del que, supuestamente, disponen los gobiernos de las grandes potencias mundiales. No se sabe si gobiernos como el estadounidense son ya capaces de descifrar a bajo coste mensajes encriptados con PGP. Si necesitáramos protegernos de este tipo de ataques institucionales, posiblemente una solución estándar como PGP se nos quedaría corta pero, ¿a cuánta gente conocemos que necesite proteger su información de los gobiernos extranjeros?

 

Ahora bien, por muy seguro que sea PGP, la falta de sentido común y los descuidos pueden hacer vulnerable hasta el más complicado de los algoritmos de encriptación. Ejemplos de malas prácticas pueden ser: permitir que alguien copie nuestra clave privada, utilizar contraseñas muy fáciles de adivinar o no eliminar archivos comprometedores completamente. En el mundo real, la inmensa mayoría de los ataques a la seguridad y la privacidad de las comunicaciones no los llevan a cabo hackers inadaptados y superdotados, sino nuestros propios compañeros y empleados, pues es hacia donde nuestras defensas se presentan más débiles.

 

Una vulnerabilidad  de PGP, aunque no es un problema del programa en sí, es la posibilidad de que otros se hagan pasar por quienes no son. Por ejemplo, cualquiera podría crear una pareja de claves con el nombre de una personalidad de la vida pública y empezar a firmar mensajes con esa clave. Los usuarios más inexpertos o más crédulos podrían pensar que han recibido un mensaje de esa persona con sólo ver que su nombre aparece en la firma digital. Pues bien, para confiar al 100% en una clave pública o una firma, es necesario que se den una de las dos condiciones siguientes:

  1. La clave pública nos ha sido entregada directamente por la persona a la que pertenece. Esto no tiene por qué ocurrir físicamente, es decir, no tienen por qué darnos la clave pública en la mano. Pueden enviárnosla por correo electrónico y, al recibirla, podemos comprobar que lo que nos ha llegado es la clave pública de esa persona llamándola por teléfono y verificando los números de control.
  2. La clave pública está firmada por otras personas en las que confiamos. Al recibir una clave pública, es posible ver quién confía ya en esa clave y, si ellos son a su vez de confianza, aceptarla e incluso firmarla nosotros mismos.

Aún así, puede quedarnos un cierto poso de incertidumbre. Para resolverlo, lo mejor que se puede hacer es utilizar certificados digitales, que no son más que la firma de una autoridad reconocida sobre nuestra propia firma digital. Esto, a diferencia de PGP, no es gratuito.

 

El mayor problema de PGP:

Pese a lo que pudiera parecer, el mayor problema de PGP no tiene nada que ver con los hackers, los algoritmos y demás cuestiones técnicas. En realidad, su mayor desventaja es que sus usuarios son, en términos relativos, escasos, aunque su número aumenta a pasos agigantados. Si bien existen decenas de miles de usuarios de PGP, esta cifra es pequeña si se compara con el total de internautas.

 

Hay pocos motivos para no usar PGP, pues sus características suponen un salto cualitativo en lo que a nuestra forma de usar Internet se refiere, pero la mayoría de los internautas simplemente desconocen su existencia. No obstante, el número de usuarios de PGP es infinitamente superior al de las demás aplicaciones gratuitas de seguridad que podemos encontrar, por lo que no deja de ser el líder en su sector con una gran ventaja sobre sus competidores.

 

 

 

Puntos vulnerables:

 

Ningún sistema de seguridad de datos es impenetrable. PGP puede burlarse de diversas maneras. Los posibles puntos vulnerables que hay que tener en cuenta son, entre otros, el compromiso de la contraseña o de la clave secreta, la manipulación de las claves públicas, los ficheros que se han borrado pero que siguen todavía en el disco, los virus y caballos de Troya, los fallos en la seguridad física, las emisiones electromagnéticas, la exposición en sistemas multiusuario, el análisis de tráfico, y quizá incluso el criptoanálisis directo.

 

COMO VALIDAR LOS DATOS RECIBIDOS?

 

 

A veces, no sólo nos gustaría evitar que cualquiera que no sea el destinatario del mensaje pueda leerlos. También puede ser necesario el asegurarse de que la persona con la que nos comunicamos no ha sido suplantada por alguien. En el mundo real las cartas pueden firmarse, pero, ¿ que ocurre con el correo electrónico ?  Para ello se recurre a la autenticación. El programa de encriptado añade al final del mensaje una firma electrónica creada encriptando un extracto del mensaje (message digest)con la clave secreta. El receptor del mensaje puede probar a desencriptar esta firma con la clave pública del emisor. Si se puede, esto prueba que el emisor es quien esperamos que sea, ya que - se supone - sólo él posee su clave secreta, y así, sólo él puede firmar.

 

La firma digital utiliza un codigo hash o algoritmo de resumen del mensaje, y un algoritmo clave-pública de la firma  . La secuencia es como sigue:

 

  1. El remitente crea un mensaje.
  2. El software que envía genera un código hash del mensaje.
  3. El software que envía genera una firma del código hash usando la  clave privad del remitente.
  4. La firma binaria se asocia al mensaje.
  5. El software que recibe guarda una copia de la firma del mensaje.
  6. El software que recibe genera un nuevo código hash  para el mensaje recibido y verifica que el mensaje use la firma. Si la verificación es acertada, el mensaje se valida como auténtico.

 

PGP utiliza "resúmenes de mensaje" para elaborar las firmas. Un resumen de mensaje es una función "distribución" ("hash") unidireccional de 128 bits, criptográficamente resistente, de ese mensaje. Es análogo a una "suma de verificación" o código CRC de comprobación de errores: "representa" el mensaje de forma compacta y se utiliza para detectar cambios en él. A diferencia de un CRC, sin embargo, resulta computacionalmente impracticable para un atacante idear un mensaje sustitutivo que produzca un resumen idéntico. El resumen del mensaje se encripta con la clave secreta para elaborar la firma.

 

Los documentos se firman añadiéndoles como prefijo un certificado de firma, junto con el identificador de la clave que se utilizó para realizarla, un resumen de mensaje del documento (firmado con la clave secreta) y un sello de hora del momento de la firma. El destinatario utiliza el identificador de la clave para buscar la clave pública del remitente y

comprobar la firma. El programa busca automáticamente la clave pública y el identificador de usuario en el fichero de claves correspondiente. Los ficheros cifrados llevan como prefijo el identificador de la clave pública con la que se han encriptado. El destinatario utiliza este prefijo de identificación para encontrar la clave secreta y poder desencriptar el mensaje. Su programa busca automáticamente la clave secreta en el fichero de claves correspondiente.

 

Estos dos tipos de fichero constituyen el método principal para almacenar y gestionar las claves públicas y secretas. En lugar de mantener las claves individuales en ficheros separados, se reúnen en anillos para facilitar la búsqueda automática, ya sea por identificador de clave o por identificador de usuario. Cada usuario mantiene su propio par de anillos. Las claves públicas individuales se guardan en ficheros aparte durante el tiempo necesario para enviarlas a algún amigo, que las añadirá entonces a su propio anillo de claves.

 

 

INTEGRIDAD DEL MENSAJE

También podría ser necesario estar seguros de que nadie ha interceptado el mensaje, lo ha modificado y nos lo ha enviado alterado. Para ello se emplean las mismas firmas digitales obtenidas para la autenticación. Dado que para crear esta firma se usan message digests, y los algoritmos que los crean garantizan que nunca dos mensajes distintos tendrán el mismo digest, si el texto es alterado, ya no se corresponderá con la firma electrónica que le acompaña.

 

 

CONCLUSIONES

 

Recomendaciones de uso:

 

PGP (tm) utiliza criptografía de clave pública para proteger el correo electrónico y los ficheros de datos. Comunícate con seguridad con personas a las que nunca has visto, sin necesidad de canales seguros para intercambiar claves. PGP es rápido y ofrece muchas

prestaciones, entre ellas una completa gestión de claves, firmas digitales, compresión de datos y un buen diseño ergonómico.

 

En general, la encriptación y la firma de mensajes debería usarse aunque la información que manejamos no sea especialmente sensible. Normalmente, cuando echamos una carta al buzón de correos, cerramos el sobre. Esto es así porque no queremos que otros lean su contenido. ¿Por qué vamos a exigirnos menos al enviar un mensaje por Internet? PGP es el programa que sirve de sobre a nuestras cartas por Internet.

Por si todo esto fuera poco, PGP es gratuito para fines no comerciales. Las versiones profesionales, además, tienen precios inferiores a los 25 Euros, lo que convierte al programa en una solución de seguridad enormemente económica.

 

REFERENCIAS:

 

 

INTERNET-DRAFT

OpenPGP Message Format

August 31, 1998 Expires Feb 28, 1999       

Callas, et al.          

 

http://www.arnal.es/free/cripto/pgp/histor.htm

Autor: Jose Luis Martín Mas

 

http://www.geocities.com/SiliconValley/Pines/2332/

Todo sobre el pgp

Autor: Javier González

Ultima modificación : 29 de Marzo de 1998.

 

http://www.argo.es/~jcea/artic/hispasec70.htm

Última Actualización: 8 de Junio de 2.000 – Jueves

Artículo publicado en el boletín Una-Al-Día de Hispasec, el 24 de Mayo de 2.000.

 

http://glub.ehu.es/seguridad/pgp5unix.html

Roberto Cano

28 Marzo 1998.

 

http://www.pgpi.org/doc/faq/pgpi/es/

Traducido por Mariano Absatz  del original en inglés que se puede encontrar en http://www.pgpi.org/doc/faq/pgpi/en/ .

Principal

Hosted by www.Geocities.ws

1