Tema 1: La problemática de la seguridad informática.

1.Autenticación, privacidad, disponibilidad, integridad.
En seguridad informática tenemos 4 objetivos fundamentales:

Otro aspecto relacionado con la seguridad informática es el principio del No Repudio, que consiste en que la persona que ha recibido, emitido o manipulado, una información no pueda negarlo. Esto es difícil de conseguir debido a que no existen testigos presenciales ni temporales de las cosas.
Antes de pasar al siguiente punto del tema vamos a ver una serie de conceptos genéricos importantes en seguridad informática.
En la actualidad no se puede hablar de un sistema informatico seguro, sino de que no se conocen amenazas que puedan violar su seguridad.
2.Vulnerabilidades.
Como anteriormente se ha explicado una vulnerabilidad es cualquier aspecto que pueda dañar la seguridad de un sistema informático. La vulnerabilidadesse clasifican en dos grupos:
Vulnerabilidades importantes son el hardware y el software. También existen en las comunicaciones(que tienen que ver con el hecho de tener equipos interconectados). Y por supuesto, también existe la vulnerabilidad humana. Ésta es muy importante ya que todo es sistema reposa sobre las personas, se puede afirmar que es la vulnerabilidad más grande que existe, dado que tanto el administrador como los usuarios del sistema provocan daños voluntaria o involuntariamente, pero también es la más fácil de controlar.
En cuanto a las amenazas se clasifican, atendiendo al efecto causado, en:
Si clasificamos las amenazas según el origen obtenemos:
Por último, las contramedidas se clasifican en 4 tipos organizados en capas de forma que van encadenadas:

3.Políticas.
 

Al diseñar un sistema seguro deberemos realizar un análisis inicial de la seguridad del sistema. Dicho análisis es fundamental, debe darse por escrito, revisarse periódicamente y estar enmarcado en una política de seguridad, que es un conjunto de directrices sobre todos los elementos que intervienen. También es necesario realizar un análisis del valor del sistema informático (Cr), del coste de las medidas de seguridad (Cs) y del coste que supone el intentar saltarse dichas medidas (Ca). Teniendo en cuenta estas definiciones la situación ideal sería: Ca > Cr > Cs. También puede darse esta situación Cr > Ca > Cs, pero lo caótico sería tener una situación como esta Cr > Cs > Ca.

También cabe señalar algunas medidas a tener en cuenta para el diseño de políticas de seguridad:

Tema 2: Fundamentos de criptografía.

  1. Teoría de la información
De los objetivos planteados en el tema anterior existe una herramienta que es muy útil en cuanto a confidencialidad, dicha utilidad se llama Criptología.
La Criptología se divide en dos ramas, Criptografía y Criptoanálisis. La primera es el “arte” de ocultar la información a los ojos de personas no autorizadas, para conseguirlo se basa en métodos de transformación de la información original en otra cuyo significado está oculto.
El criptoanálisis son una serie de técnicas para deshacer o averiguar la información inicial (es decir, descifrarla) de forma no lícita. Esta “descodificación” se puede realizar de forma correcta o incorrecta (para apoderarnos de información de otras personas), y depende de cómo haya sido cifrada y de la información adicional disponible a la hora de desencriptar.
Nosotros nos centraremos en los métodos para criptografiar. Estos métodos deben ser mecanismos para transformar la información inicial en otra ilegible y que, además, esta transformación se pueda invertir siempre que se disponga de la autorización requerida. El mecanismo debe tener un elemento llamado clave (que es mantenida en secreto, proporcionando así seguridad al sistema) o llave para cifrarla información en función de dicha clave. El hecho de descifrar con la clave no se considera criptoanálisis, sino simplemente invertir el proceso de cifrado.
Desde el punto de vista teórico se llama criptosistema a la quíntupla MCKED donde:
Para poder utilizar un criptosistema determinado, éste debe cumplir los siguientes requerimientos:

Con la técnica actual tenemos 2 grandes tipos de criptosistemas:

Son los más antiguos y sencillos, son rápidos y fáciles de implementar. También se llaman simétricos. Consisten en que existe una única clave para cifrar y descifrar llamada clave privada.
Se basan en la existencia de dos claves llamadas publica y privada, se les suele llamar asimétricos porque una clave se usa para cifrar y la otra para descifrar. Las llaves siempre van por pares, es decir, lo que se ha cifrado con una clave pública sólo se puede descifrar con la clave privada asociada.
La clave privada se mantiene en secreto mientras que la publica es conocida por todos. La utilidad de este método es evidente en comunicaciones ya que cualquiera puede cifrar un mensaje con la clave publica que solo el poseedor de la privada podrá descifrar.
Por ejemplo, tenemos 2 usuarios A con su clave publica Pa y su privada Ka y B con su Pb y Kb. Pues bien, A cifrara el mensaje con Pb y se lo mandara a B. Éste cogerá el mensaje de A y con su Kb lo descifrara. Con ello se consigue Confidencialidad
Si cifráramos el mensaje con las claves cambiadas, es decir A cifra con Ka y B descifra con Pa lo que conseguimos es Autenticidad.
Aparecen oficialmente en 1976 con el algoritmo RSA (Rivest Shamir Adleman). Este método basa su seguridad en la dificultad de resolver el problema de la factorización de un numero compuesto de un gran numero de cifras en factores primos. Este método se explicara con mas detalle posteriormente.
Ambos sistemas se utilizan debido a que los asimétricos son más difíciles de implementar y su coste algorítmico es grande, por lo que generalmente se suelen combinar con los simétricos.
Ahora vamos a tratar dos fundamentos teóricos en el diseño de algoritmos y en el estudio de su fortaleza, que son la Entropía y la Redundancia.
1.1.Entropía
El concepto de Entropía fue introducido por Shannon en los años 40. Según él, la entropía es la medida del desorden, siempre va relacionada con la uniformidad y el desorden.
Diremos que hay mucha entropía cuando haya mucha uniformidad.
Matemáticamente la entropía correspondiente a una variable aleatoria X se define como:

siendo P(Xi) la probabilidad de aparición de la ocurrencia Xi

Por ejemplo, calculamos la entropía de la variable aleatoria asociada a lanzar un dado al aire:

En este caso la entropía es máxima debido a que los sucesos son equiprobables.

Cuando existe algún tipo de dependencia entre una variable aleatoria X y otra Y, el conocimiento de Y proporciona información sobre X. Usando probabilidades condicionadas podemos definir la entropía de una variable X condicionada a otra Y como:

si aplicamos el Teorema de Bayes obtenemos:

Llegados a este punto,podemos definir el concepto de Cantidad de información( I ) como:

I = -lg(P(xi))

siendo P(xi) la probabilidad de aparición del estado xi, y también definimos el concepto de Cantidad de información de una variable sobre la otra como :

I( x, y) = H( Y) – H( Y/X)

Con todas estas definiciones se define un criptosistema seguro de Shannon como aquel en el que I( c, m) = 0. Y se interpreta de la siguiente manera: el hecho de conocer c no nos aporta ninguna información sobre m.

Para que un sistema cumpla esto es necesario que el cardinal( c) = cardinal( m), es decir, que existan tantas claves como mensajes. Esto es casi imposible, debido a que seria inmanejable, pero se podría intentar.


 

1.2.Redundancia
 

Como hemos visto, la entropía da una medida de la redundancia de la información. En base a ello podemos definir el concepto de Redundancia, pero antes debemos hacer dos definiciones:

donde M es el conjunto de todos los mensajes de longitud k. Con ello estamos midiendo el numero de bits de información que nos aporta cada carácter del mensaje.

con ello estamos midiendo el numero máximo de bits de información que pueden se codificados con cada carácter del mensaje.

Llegados a este punto ya podemos definir la Redundancia (D) como la diferencia entre los dos índices anteriores.

  1. Matemática discreta
Para entender los algoritmos de clave asimétricas que se expondrán con posterioridad es necesario tener claro las siguientes ideas o conceptos:
Este algoritmoPermite obtener de forma eficiente el máximo común divisor de dos números. Y para ello se basa en la siguiente propiedad:
Dados dos números enteros a y b, si sabemos que m|a (m divide a a) y que m|b (m divide a b), podemos afirmar que m|(a-bk) (m divide a a-bk), o lo que es lo mismo, m|(a mod b) (m divide a a modulo b). Si llamamos c a (a mod b) y volvemos a aplicar la propiedad obtenemos que m|(b mod c) ( m también divide a c), si aplicamos el proceso sucesivas veces llegaremos a un punto en el que a mod b será cero, y el paso previo nos proporcionara el máximo común divisor entra a y b.
Y el algoritmo de Euclides se programaría de la siguiente forma:
G0 = a
G1 = b
Mientras (G1 != 0)
X = G0 % G1

G0 = G1

G1 = X

Finmientras

G0

Se dice que los números que cumplen la condición mcd(a,n) = 1 son primos entre sí ( aunque a y n no sean primos)
Denominaremos Conjunto de Residuos modulo n (CR) al siguiente conjunto: CR = {1, 2, 3, ..., n-1} y Conjunto Reducido de Residuos (CRR) al conjunto de números primos relativos con n, en otras palabras, CRR es el conjunto de números que tienen inversa modulo n. Por ejemplo si tomamos n = 12:
CR = {1, 2, 3, ..., 11}
CRR = {1, 5, 7, 11}
Se define la función de EulerÆ(n) como el cardinal del conjunto CRR.

Teorema de Euler:

Dados dos enteros a y n si mcd(a,n) = 1 entonces aÆ(n)º 1 (modulo n)

El teorema anterior nos permite calcular la inversa de un numero a si puedo calcular la función de Euler Æ(n), ya que se cumple la siguiente relación:

aÆ(n)= a*aÆ(n)-1 = 1

pero en la práctica para calcular inversas se usa el algoritmo extendido de Euclides ya que se desconoce Æ(n) y la implementación de dicho algoritmo es la siguiente:

inversa(int n, int a)

{ int c,i;

int g[],u[],v[];

g[0]=n; g[1]=a;

u[0]=1; u[1]=0;

v[0]=0; v[1]=1;

i=1;

while (g[i]!=0)

{c=g[i-1]/g[i];

g[i+1]=g[i-1]%g[i];

u[i+1]=u[i-1]-c*u[i];

v[i+1]=v[i-1]-c*v[i];

i++;}

while (v[i-1]<0)

v[i-1]=v[i-1]+n;

return(v[i-1]%n);}

La ventaja del uso de este tipo de aritmética (modular, inversas, …) radica en poder trabajar con números grandes sin necesidad de almacenar resultados intermedios

Por ello es necesario buscar alternativas al método que presenten un coste algorítmico menor. Una de estas alternativas es el Algoritmo de Exponenciación rápida.
Si tomamos la representación binaria de b obtenemos:
b = 20b0+21b1+22b2+...2nbn
Si ahora sustituimos dicha representación en ab obtenemos

Recordemos que los bi solo pueden vales 0 o 1, por tanto para calcular ab solo hemos de multiplicar las posiciones cuya bi sea 1, y que además, para calcular el valor a2n únicamente hay que multiplicar por 2 el valor a2(n-1). Con todo ello el orden algorítmico del método desciende espectacularmente. Y el método se implementa de la siguiente forma:

Exp_rapida(a,b){

z = b;

x = a;

r = 1;

Mientras (z > 0){

Si (z % 2 =1)

r = r * x

x = x * x

z = z / 2}

Finmientras}

Este método consiste en :
1.Tomar un número aleatorio a tal que a < p
2.Calcular b = a (p-1)/2 (mod p)
3.Si b ¹ 1 (mod p) y b ¹ -1 (mod p), p no es primo
4.Si b º 1 (mod p) y b º -1 (mod p), entonces tenemos una probabilidad del 50% de que sea primo.
A efectos prácticos lo que se hace para generar un numero primo grande es generar un numero aleatorio grande, añadir un 1 en el bit mas significativo de dicho numero y otro 1 en el bit menos significativo para, posteriormente, tomar una tabla de números primos e ir comprobando si nuestro numero es primo o no.
1.mcd[ (p-1), (q-1) ] = es pequeño.
2.p-1 y q-1 tienen algún factor primo grande (p’ y q’).
3.p’-1 y q’-1 tienen factores primos grandes.
4.p’+1 y q’+1 tienen factores primos grandes.
  1. Criptografía Clásica
En criptografía clásica estudiaremos 3 métodos de cifrado:
Su nombre se debe al emperador romano Julio Cesar. Es un algoritmo de cifrado monoalfabeto y el método consiste en sumar 3 al ordinal de cada una de las letras del mensaje de entrada( o mensaje en claro). Por ejemplo: si el mensaje en claro es HOLA, el mensaje cifrado sería KROD.
Matemáticamente la transformación criptográfica sería :
C = ( M + 3 ) mod 29 
es modulo 29 ya que trabajamos con un alfabeto que tiene 29 letras, si trabajaramos con el código ASCIIseria mod 256.
Y para descifrar simplemente se resta 3 a cada una de las letras del mensaje cifrado.

Éste es un método de sustitución multialfabeto. El método consiste en calcular el ordinal de cada una de las letras del mensaje de entrada y sumarle el ordinal de la i-ésima letra de la clave modulo n( con n = longitud de la clave).
Matemáticamente la transformación sería:
con l = longitud de la clave.
Para descodificar solo hay que restar en lugar de sumar.
Este método lo que hace es dividir el mensaje de entrada en bloques de tamaño fijo y en cada bloque desordenar las letras siguiendo un patrón prefijado. Por ejemplo, si ciframos HOLA_QUE_TAL_ESTAS con tamaño de bloque 6 y el patrón 5,6,1,2,4,3 el mensaje quedaría: _QHOALALUE_TAS_ETS. Para descodificar solo hay que tomar el mismo tamaño de bloque y aplicar el mismo patrón.
  1. Criptografía actual
En la actualidad se utilizan los tipos de criptografía explicados en el punto 2.1, la criptografía de clave privada y la de clave publica.Ahora vamos a señalar las características de algunos de los métodos utilizados en cada tipo de criptografía.
4.1.Criptografía de clave privada (DES, IDEA, RC4)
En criptografía de clave privada podemos señalar entre otros los siguientes algoritmos:
Este algoritmo fue desarrollado y patentado por los investigadores de IBM en 1970 y posteriormente adoptado por el gobierno de USA en el año 76 para las comunicaciones no clasificadas. En él se consideran los 64 bits del bloque de entrada b1,b2,...,b64, éstos se permutan mediante la permutación inicial IP, siendo el bloque de salida B0 el constituido por el bloque L0 de 32 bits concatenado con el R0, también de 32 bits. La salida (L16,R16), después de 16 iteraciones con la función f, se permuta de nuevo con la permutación IP-1, inversa de la IP obteniéndose el cifrado de los 64 bits de entrada.
En cada iteración de, de la anteriormente citadas, la función f combina operaciones de sustitución y transposición. Si llamamos Ti al resultado de la iteración i-ésima, ésta se compone de Li y Ri, con 32 bits en cada una de las partes de forma que en cada iteración se cumple:

Donde ki es una clave de 48 bits generada por la función generadora de claves ki = KS (i,K) siendo K la clave externa de 64 bits. En el último paso las partes del resultado de L y R no se permutara, en su lugar se concatenan como R16.L16, que se toma como entrada a la permutación IP-1. Esto se hace para que el algoritmo sirva tanto para cifrado como para descifrado.

La función de cifrado f (R,K) tiene como entrada los 32 bits correspondientes a la mitad derecha de la iteración (Ri-1) y los 48 bits de la clave ki. La cadena Ri-1 se expande a 48 bits y la salida se suma en un OR exclusivo a los 48 bits de ki y la salida de todo esto se reparte en 8 bloques de 6 bits. Cada uno de estos bloques se mete en una caja (Sj) que realiza una transformación no lineal dando como salida una secuencia de 4 bits.

La union de las salidas de estas cajas se permuta y se obtienen los 32 bits de la función f.

Las principales ventajas del DES radican en que en 20 años no se le ha encontrado ninguna debilidad y en el hecho de que las claves no forman una estructura de grupo, es decir que si codifico con clave k1 y luego con clave k2 no existe ninguna clave k3 que de cómo resultadoel mismo cifrado que la k1 y k2 juntas.

En las siguientes imágenes se muestran algunos esquemas del funcionamiento del DES y de sus componentes:
 

El DES admite varios modos de trabajo:

i.ECB (Electronic Code Book).

Consiste en subdividir la cadena que se quiere codificar en bloques del tamaño deseado y se cifran todos ellos empleando la misma clave. A favor de este método podemos decir que permite codificar los bloques independientemente de su orden. También es resistente a errores, pues si uno de los bloques sufriera una alteración, el resto quedara intacto.

Por contra, si el mensaje presenta patrones repetitivos, el texto cifrado también los presentara, y eso es peligroso, sobre todo cuando se codifica información muy redundante

ii.CBC (Cipher Block Chaining)

Este modo incorpora un mecanismo de retroalimentación en el cifrado por bloques. Esto significa que la codificación de bloques anteriores condiciona la codificación del bloque actual, por lo que sería imposible sustituir un bloque individual en el mensaje cifrado. Esto se consigue efectuando una operación XOR entre el bloque del mensaje que queremos codificar y el último criptograma obtenido. En cualquier caso, dos mensajes idénticos se codificarán de la misma forma usando el modo CBC. Más aun, dos mensajes que empiecen igual se codificarán igual hasta llegar a la primera diferencia entre ellos. Para evitar esto se emplea un vector de inicialización, que puede ser un bloque aleatorio, como bloque inicial de la transmisión. Este vector será descartado en destino, pero garantiza que siempre los mensajes se codifiquen de manera diferente, aunque tengan partes comunes.

Las siguientes figuras muestran como se codifica y descodifica en este modo:

Codificar:Descodificar: 

iii.CFB (Cipher Feedback)

En este modo la salida se utiliza para retroalimentar al mecanismo de codificación. Después de que cada bloque ha sido cifrado parte de él se guarda en un registro que posteriormente será encriptado usando la llave del usuario mediante el modo ECB, y a la salida se le aplica un XOR con los datos en claro para obtener el cifrado definitivo.

Este modo habilita al usuario para que pueda descifrar solo una porción de una gran base de datos simplemente empezando a descifrar en un punto equidistante entre el dato buscado y el dato inicial.

Este algoritmo data del año 1992, fue inventado por Lai y Massey (del Swiss Federal Institute of Technology), esta libre de restricciones y permisos nacionales y es de libre distribución por Internet. Puede trabajar con los mismos modos que el DES. Trabaja con bloques de 64 bits y emplea una llave de 128 bits( dato que hace que el ataque por fuerza bruta no sea factible por lo menos actualmente). Consta de 8 rondas. Dividiremos el bloque X a codificar, de 64 bits, en cuatro partes X1X2X3X4de 16 bits. Denominaremos Zia cada una de las 52 subclaves de 16 bits que vamos a necesitar. Las operaciones que llevaremos a cabo en cada ronda son las siguientes:
1.Multiplicar X1 por Z1
2.Sumar X2 con Z2
3.Sumar X3 con Z3
4.Multiplicar X4 por Z4
5.Hacer un XOR entre los resultados del paso 1 y el paso 3.

6.Hacer un XOR entre los resultados del paso 2 y el paso 4.

7.Multiplicar el resultado del paso 5 por Z5.

8.Sumar los resultados de los pasos 6 y 7.

9.Multiplicar el resultado del paso 8 por Z6.

10.Sumar los resultados de los pasos 7 y 9.

11.Hacer un XOR entre los resultados de los pasos 1 y 9.

12.Hacer un XOR entre los resultados de los pasos 3 y 9.

13.Hacer un XOR entre los resultados de los pasos 2 y 10.

14.Hacer un XOR entre los resultados de los pasos 4 y 10.

La salida de cada iteración serán los cuatro sub-bloques obtenidos en los pasos 11, 12, 13 y 14, que serán la entrada del siguiente ciclo, en el que emplearemos las siguientes seis subclaves, hasta un total de 48. Al final de todo intercambiaremos los dos bloques centrales

Y después de la octava iteración se multiplica X1 por Z49, se suma X2 con Z50, sumamos X3 con Z51 y se multiplica X4 por Z52

Las primeras ocho subclaves se calculan dividiendo la clave de entrada en bloques de 16 bits. Las siguientes ocho se calculan rotando la clave deentrada 25 bits a la izquierda y volviendo a dividirla, y así sucesivamente.

Las subclaves necesarias para descifrar se obtienen cambiando de orden las Ziy calculando sus inversas para la suma o la multiplicación.

El Algoritmo RC4 fue diseñado por Ron Rivest en 1987 para la compañía RSA Data Security. Su implementación es extremadamente sencilla y rápida, y está orientado a generar secuencias en unidades de un byte, además depermitir claves de diferentes longitudes. Es un algoritmo propietario y el código fuente del algoritmo no se ha publicado nunca oficialmente, pero en 1994 alguien difundió en Internet una descripción que, genera las mismas secuencias. Dicha descripción consta de una S-Caja de 8*8, que almacenara una permutación del conjunto {0,...,255}. Dos contadores i y j se ponen a cero. Luego, cada byte Orde la secuencia se calcula como sigue:
1.i = ( i+ 1 ) mod 256
2.j = ( j + Si ) mod 256
3.Se intercambian los valores de Si y Sj
4.T = ( Si + Sj ) mod 256
5.Or = St

Para calcular los valores iniciales de las S-Cajas se hace lo siguiente:

1.Si = i

2.Rellenar el vector K0...K255 con la clave tantas veces como sea necesario

3.j = 0

4.Para i = 0 hasta 255 hacer

j = ( j + Si + Ki ) mod 256

intercambiar Si y Sj

Es el algoritmo utilizado en muchas aplicaciones de tipo comercial actuales.


 

4.2.Criptografía de clave publica (RSA)
 

En este tipo de sistemas se utilizan dos claves: una clave pública y una clave privada. En un grupo de usuarios, cada uno de ellos posee dos claves distintas:

• La clave pública, Pa, puede ser conocida por todos los usuarios del sistema.

• La clave privada, Ka, tan solo es conocida por su propietario.

Aunque estas claves están relacionadas matemáticamente, no se puede obtener una a partir de la otra. En este tipo de criptografía la longitud de las claves suele ser de 1024bits o superior frente a los 256 o 512 de las claves de la criptografía simétrica.

Este tipo de sistemas se denominan asimétricos porque no podemos usar una misma clave para cifrar y descifrar un mensaje. Ambas claves deben usarse en el proceso. Si ciframos un mensaje con una de ellas, debemos descifrarlo con la otra. Y sirve tanto para garantizar la confidencialidad de los mensajes como para la autenticidad, únicamente depende de cómo se manejen las claves privada y publica al generar los mensajes.

Por ejemplo, si un usuario A quiere enviar un mensaje confidencial a otro B, debe cifrarlo utilizando la clave pública de B, de esta forma el mensaje tan solo puede descifrarse utilizando la clave privada de B. Si nuestro propósito es garantizar la autenticidad el usuario A cifrará el mensaje con su propia clave privada (Ka) de forma que el receptor únicamente deberá descifrar el mensaje usando la clave pública de A (Pa).

El algoritmo mas extendido para implementar este tipo de criptografía es el RSA cuyas siglas coinciden con las iniciales de sus creadores (Rivest-Shamir-Adelman). El RSA utiliza dos claves y cualquiera de las dos puede ser pública o privada. Las dos claves se generan matemáticamente basándose en la combinación de grandes números con factores primos

Para generar el par de llaves (Kp y Kq) se eligen aleatoriamente dos primos grandes p y q. Después se calcula el producto n=p*q. Después se escoge un numero e primo relativo con (p-1)(q-1). Así se obtiene la clave publica (e,n), que tendrá inversa en modulo (p-1)(q-1), de forma que:

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

Y la clave privada la formaran (d,n).

Una vez obtenidas ambas llaves usaremos las siguientes relaciones para cifrar y descifrar:

C = me (mod n)

D = md (mod n)

4.3.Software criptográfico

Todos los métodos de cifrado vistos hasta ahora se pueden encontrar en el llamado Openssl. El Openssl es un software de libre distribución capaz de cifrar tanto en clave privada, usando el DES, IDEA, RC4, RC5, triple Des, blowfish,..., como en clave publica, usando RSA (cifrando, descifrando y tambiéngenerando los pares de llaves RSA necesarias).

  1. Estándares y aplicaciones criptográficos.
La existencia de numerosos criptosistemas con determinadas características de fortaleza, seguridad, etc. no es suficiente para hacer uso de la criptografía. Es necesario aplicar una serie de técnicas denominadas protocolos para que el uso de la criptografía ofrezca ciertas propiedades de seguridad (secreto, integridad, autenticidad, etc.).
Para utilizar un criptosistema en la transmisión de información es necesario establecer una serie de convenciones(denominadas protocolos) entre las dos partes. Un protocolo es una secuencia ordenada de pasos tomados por dos o más partes para llevar a cabo una determinada tarea
Existen distintos tipos de protocolos, pero nos quedaremos únicamente con el protocolo adjudicatario, en él se utiliza un adjudicador para llevar a cabo la transacción. Se trata de una tercera parte que puede juzgar si la transacción se ha llevado a cabo justamente, por ejemplo un notario público. Su función es atestiguar la autenticidad de ambas partes y la validez de la transacción a posteriori. El adjudicador tan solo juzga su validez. En el caso de Internet el adjudicador suele ser una empresa llamada Verisign que, previo pago de su importe, atestigua que la persona/s es/son quien/es dice/n ser.
5.1.Firma digital

La firma digital es un es un protocolo que produce el mismo efecto que una firma real, se trata de una "marca" que sólo el emisor puede producir y que otras personas pueden reconocer fácilmente como perteneciente al mismo. 

El objetivo básico de la firma digital es que el emisor confirme que el mensaje es suyo y que el receptor pueda aceptarlo como autentico.


 

5.1.1.Funciones hash
 

La función Hash o función de resumen es una función matemática que se añade a un mensaje para probar su autenticidad y que cumple estas características:

El MD5, Sha-1 y el Sha-2 son funciones de resumen, la primera produce firmas de 128 bits mientras que las 2 siguientes producen firmas de 160 bits.
5.1.2.Firma con clave pública
Recordemos que en este caso buscamos autenticidad, no confidencialidad, el proceso que se realiza cuando una persona A manda un mensaje a B firmado es el siguiente:
1.A calcula la función de resumen del mensaje a enviar H(m), posteriormente cifra dicho resumen con su clave privada.
2.A manda a B H(m) junto al mensaje original m.
3.B recibe el mensaje y la función de resumen cifrada. B debe descifrar con la clave publica de A obteniendo H(m), generar la función de resumen del mensaje en claro H’(m) y luego comparar H(m) con H’(m), si ambos son iguales el mensaje es autentico, si no lo son el mensaje puede haber sido mal transmitido o modificado por alguien en el camino.

Llegados a este punto si queremos garantizar tanto la autenticidad como la confidencialidad deberemos calcular la función Hash, añadir el mensaje en claro y posteriormente cifrar todo junto.


 

5.2.Infraestructuras de clave pública (PKI)
 

Se trata del conjunto de protocolos, servicios y normas que constituyen la base a utilizar por cualquier aplicación criptográfica de clave pública. Eltérmino PKI incluye los servicios y protocolos necesario para la administración de claves, generalmente usando Autoridades certificadoras. Estas autoridades, también conocidas como notarios electrónicos, deben ser empresas fiables y altamente reconocidas que se dedican a validar los certificados. Un certificado es un documento digital que atestigua que una clave privada corresponde a un individuo determinado. Los certificados pueden tener múltiples estructuras pero hoy por hoy se esta imponiendo el uso del estándarde certificación x509.


 

5.2.1.Certificación x509
 

Los certificados x509 se componen de dos partes:

5.2.2.Autoridades certificadoras
Las autoridades certificadoras, como ya se ha indicado anteriormente, son los notarios digitales que expenden los certificados a aquellas personas o entidades que los solicitan.
Para conseguir un certificado deberemos proporcionar nuestros datos a la autoridad certificadora, el algoritmo utilizado en la generación de las llaves ( generalmente el RSA), la llave pública. Toda esta información se la remitimos a la autoridad certificadora. Ésta, si cumplimos las normas requeridas, nos proporcionara el certificado, validando así nuestra identidad en la red.

Tema 3: Seguridad en redes (Internet).

  1. Criptografía en las redes
La introducción de las redes informáticas supone la posibilidad de compartir de una enorme cantidad de recursos hardware y software a nivel tanto local como mundial, con la conexión a Internet, cualquiera puede acceder a ordenadores de todo el mundo para desarrollar y ejecutar sus programas o para cualquier otra finalidad y sobretodo tiene acceso a una enorme cantidad de información de todo tipo.
Como inconveniente a todas estas ventajas también se han incrementado los problemas de seguridad así como el numero de atacantes, la privacidad de los datos sensibles se hace más difícil de garantizar, los controles de seguridad se vuelven mas complejos y difíciles de implementar, ...
Por todo ello posiblemente el medio mas seguro de garantizar la seguridad se apoya en el uso de criptografía en la mayoría de niveles de las redes de ordenadores actuales.
Pero para poder entender los mecanismos de seguridad que se expondrán en los siguientes apartados es necesario recordar que las redes informáticas se asientan sobre el TCP/IP (Transmisión Control Protocol / Internet Protocol). Dicho protocolo se compone de los siguientesniveles:
La información se empaqueta en paquetes ( compuestos por una cabecera y unos datos) que en el emisor se transfieren desde las capas superiores a las inferiores, posteriormente circulan a través de la red física y en el receptor se transfieren de niveles inferiores a superiores. Al transferirse entre los distintos niveles en el emisor, cada capa puede añadir su propia cabecera a cada uno de ellos.
Llegados a este punto ya estamos en condiciones de establecer los dos métodos de cifrado de red mas comunes.

 

1.1.Cifrado de enlace
 

Aquí el cifrado se realiza en el nivel 1 de la jerarquía TCP/IP y se cifra tanto la información del mensaje incluida en cada paquete, como las cabeceras añadidas por todos los niveles superiores. 

Tiene la ventaja de que toda la información de cada paquete esta cifrada, pero el inconveniente de que los paquetes únicamente van cifrados mientras se encuentran en el nivel de red, posteriormente, cuando llegan a niveles superiores de la jerarquía la información esta en claro, con lo que cualquiera podría hacerse con ella. también tiene el inconveniente de que para poder llevarse a cabo con éxito es necesarios que los dispositivos físicos (tarjetas ethernet, módems, ...) sean capaces de cifrar / descifrar la información antes de enviarla.

A este tipo de cifrado pertenece el IPSEC


 

1.2.Cifrado extremo a extremo (TLS)
 

Este tipo de criptografía de red se aplica a nivel de aplicación, es decir, es la propia aplicación la que cifra los datos que posteriormente se mandarán a través de la red.

Tiene como ventaja que el usuario puede cifrar sólo parte de la información que transmite, y puede hacerlo usando un método de cifrado a su gusto, los datos se encuentran cifrados desde el origen al destino de la transmisión, la red no necesita disponer de ninguna característica específica de cifrado.

Y como inconveniente el hecho de que se transmite parte de la información en claro yque el emisor y el receptor deben ponerse de acuerdo para realizar el mismo tipo de cifrado e intercambiar la clave o claves correspondientes previamente.

A este tipo de cifrado pertenecen el SSL, TLS, SMIME y el PGP. Los dos primeros son los que se utilizan para las comunicaciones con sesión, es decir, telnet, ftp, web, ... y los dos restantes se usan para el correo electrónico.

El SSL permite garantizar 3 propósitos: confidencialidad, autentificación del servidor y la autentificación del cliente. La idea del método es poder comunicar una serie de clientes según un esquema cliente-servidor pero de forma confidencial y además poder saber si el servidor es quien dice ser. Opcionalmente el servidor podrá querer autentificar al cliente.

Para que el SSL funcione se necesitan 2 llaves (k, p). Al conectar el cliente y el servidor se pondrán de acuerdo en la forma del cifrado ( mediante DES, RC4, ...), posteriormente el servidor manda su certificado al cliente, éste verifica dicho certificado ( comprobando la firma mediante la clave publica de la autoridad certificadora) y obtiene la clave publica que hay dentro del certificado. El cliente cifra una llave de sesión aleatoria usando la llave publica del certificado y lo manda al servidor. Éste obtiene la llave de sesión y posteriormente ambos se comunicancon criptografía privada y esa llave de sesión. 

Llegados a este punto es posible que el servidor requiera la autentificación del cliente, con lo que hay que repetir el proceso.


 

1.3.Seguridad del correo electrónico (SMIME)
 

Originariamente el formato con el que se enviaba correo electrónico, que a partir de ahora pasaremos a llamar mail o e-mail, era el formato ASCII o bien el formato PEM. En el primero cada mail se componía a partir de los caracteres contenidos en la tabla ASCII, ya que se pensaba que a través del correo únicamente era necesario poder enviar texto. Posteriormente apareció el formato PEM que tenia la siguiente estructura:

----------------------- Begin lo_que_sea -------------------

Información codificada en base64

----------------------- End lo_que_sea ---------------------

De este nuevo formato en la actualidad únicamente se utiliza la estructura. El base64 es un subconjunto del ASCII pero compuesto únicamente por letras, números y signos de puntuación.

Actualmente todos los mail se componen de una cabeza y un cuerpo separados por una línea en blanco. En la cabeza hay una serie de campos con la estructura:campo: valor [, otra cosa = algo ].

Se dice que una mail es MIME si existe un campo como el siguiente:

MIMEVersion: 1.0

Content-type: tipo / subtipo

Content-transfer-encoding: 7 bits, 8 bits, base64 o quoted-printable

Línea en blanco

Contenido del mail.

Por ejemplo, la siguiente cabecera corresponde a un mail MIME:

MIMEVersion: 1.0

Content-type: application/X-shockwave-flash-preview; name=”bird”

Content-transfer-encoding: base64

Pld2djjdskasjdjlkasdsdkjasdjajkd

Ksdjfksldjfsdkjfskdjflskjdfskljdf

KflñskflskdfñlskdfñdkfklfñkSLF

.kdñslkd;SDFJSDF::;dksjfs

también es posible encontrar dentro del campo Content-type el tipo Multipart/ (signed, mixed). Este tipo especial indica que el mail se compone de una colección de entidades MIME y que tienen esta forma:

MIMEVersion: 1.0

Content-type: multipart/mixed ; boundary = ------ churrito -----

-- churro

Content-type: text/plain

Hola

-- churro

Content-type: image/png

Content-transfer-encoding: base64

Fskfjskfjlsdfjlskjfklsfjlksjdfsjfklsdjfskldfjlskjflskjfdskjdfskjdflksjflksjfdksjfkljflkjsfkldfhskkfñaskdoweirofopweiroewifdslkfjsdklfjsdfjslkdfjlskdfjlksldklkflñskdflñskdflñkdsfñlksdlñfkfllñskfsdlfkjskldfjklsfjlksdjflks

-- churro --

Llegados a este punto podemos introducir ya el SMIME. El SMIME no es mas que el tipo MIME expandido con unos cuantos objetos mas para seguridad. Estos objetos son los tipo application/X-PKCS7-mime.

Así, un mail cifrado tiene la siguiente estructura:

From: ….

To: …..

MIMEVersion: 1.0

Content-type: application/X-PKCS7-mime

Content-transfer-encoding : base64

Fjfjsfksjflksjdfklsjfkljsfljsfkj

Y el mail firmado, cuya característica es que se puede leer y además comprobar la firma,tiene esta otra:

From: ….

To: …..

MIMEVersion: 1.0

Content-type: multipart/signed; protocol=”application/x-pkcs”-mime2 ;

boundary= “churro”;mialg=SHA-1

--churro

Content-type: text/plain

Hola

--churro 

Content-type: application/x-pkcs7-signature

Content-trans-encoding : base64

Fjfjsfksjflksjdfklsjfkljsfljsfkj

--churro –

Los tipos de datos que puede contener un objeto PKCS7 son:

  1. Vulnerabilidades
Las principales vulnerabilidades de una red son:
Estos dos último problemas están muy relacionados con los fallos del software.
  1. Firewalls
Para proteger una red local de los ataques la mejor medida es poseer un software de calidad actualizado, pero otra opción es el uso de un cortafuegos ( firewall) que establezca una barrera entre la red local e Internet.
3.1.Componentes
En los firewalls podemos encontrar básicamente dos tipos de componentes:
3.2.Técnicas
La principal técnica que se utiliza en los firewalls es el filtrado de paquetes, y consiste en controlar selectivamente qué paquetes circulan entre la red local e Internet, y viceversa, mediante el uso de unas reglas que especifican que tipos de paquetes pueden circular y cuales deben bloquearse. Estas reglas se basan en estudiar la Ip de origen, la IP de destino, el puerto de origen y de destino, ...

Tema 4: Seguridad en Sistemas Operativos.

  1. Identificación y autentificación. Passwords
En UNIX el acceso al sistema se realiza en base a un mecanismo de login y password. En primer lugar el sistema pregunta el login ( o nombre de usuario) para comprobar si dicho login pertenece a los usuarios del sistema, en caso afirmativo pide un password ( o palabra de acceso), lo busca en el fichero /etc/passwd y si ambos coinciden da acceso al usuario. En caso negativo deniega el acceso.
Antiguamente el fichero /etc/passwd tenia el siguiente formato:
User:password:uid:gid:nus:dir:shell
Pero como salta a primera vista no era muy apropiado ya que cualquiera que consiguiera una copia del fichero tendría los logins y passwords de todos los usuarios de la maquina.
Actualmente el fichero se descompone en /etc/passwd y en /etc/shadow donde los datos se organizan de la siguiente forma:
/etc/passwd -> user:x:uid:....
/etc/shadow –> user :passwd :x :x :x :x....

La diferencia radica en que el fichero /etc/shadow esta cifrado y nadie puede descifrarlo, ni tan siquiera el root. Para poder validar al usuario lo que se hace es coger el password y cifrarlo con el mismo mecanismo con el que se halla cifrado el fichero /etc/shadow. Si ambos cifrados coinciden se da acceso y sino no.

  1. Seguridad en UNIX.
2.1Acceso a ficheros y directorios
El UNIX estándar utiliza un mecanismo de control de accesos en el que cada usuario tiene la posibilidad de otorgar y denegar los derechos de acceso sobre los sus objetos (ficheros de datos, directorios, programas, etc). El mecanismo de seguridad clásico de UNIX para el control de accesos se basa en la definición de tres clases de usuarios. Cada una incluye un usuario o grupo de usuarios del sistema a los que les puede conferir una serie de derechos de acceso sobre los objetos. Las tres clases se corresponden con los siguientes usuarios
u: usuario propietario de la cuenta
g: resto de usuarios de su grupo
o: resto de usuarios de otros grupos
Todo objeto accesible en UNIX tiene asociados 9 bits indicando que derechos de acceso tienen los distintos usuarios sobre el mismo. Estos bits se distribuyen en 3 grupos de 3 bits y definen los permisos de acceso al objeto para las tres clases de usuarios anteriores. En cada grupo de bits, cada bit representa la presencia o ausencia de uno de los tres tipos de acceso al objeto

r: permiso de lectura

w: permiso de escritura

x: permiso de ejecución

El usuario poseedor de un objeto puede cambiar los permisos de acceso mediante el uso de la orden chmod y, modificando sus parámetros de entrada, establecer los nuevos permisos. Por ejemplo: la orden chmod 700 daría permisos de rwx al usuario propietario de la cuenta, pero se los denegaría al resto de usuarios de la máquina.


 

2.2Bit suid
 

Aunque los permisos de acceso más usuales son rwx, existe el permiso s. Dicho permiso esta pensado para aquellas ocasiones en las que usuarios o procesos sin privilegios especiales necesitan llevar a cabo tareas que requieren permisos de los que no disponen normalmente. Por ejemplo, un usuario quiere cambiar su password de acceso, pero la orden passwd es propiedad del root, por tanto no puede usarla. En estos casos UNIX proporciona un medio de conceder temporalmente una serie de privilegios mediante el uso del programa setuid, que es aquel que asume un UID efectivo distinto al UID real mientras se ejecuta. En concreto el UID efectivo pasa a ser el del propietario del fichero en lugar del UID del usuario que lo ejecuta. Así, el usuario que lo llama adquiere los privilegios del propietario mientras dura la ejecución del programa. En el caso del ejemplo anterior, al ejecutar la orden passwd las variables asociadas al proceso quedan como sigue:
                                            Usuario    501,100
                                    Antes                                Después
                    UID        501                                    501
                    GID        100                                    100
                    EUID      501                                    0
                    EGID      100                                    0

De esta forma se puede cambiar el password de acceso sin problemas.

La existencia del setuid conlleva unos riesgos de seguridad evidentes, ¿ que pasaría si un usuario consigue una copia del shell propiedad del root que sea SUID? Al ejecutarla adquirirá todos los privilegios del root y podrá ejecutar cualquier orden y acceder a todo el sistema sin restricciones.


 

2.3Passwords
 

Este apartado coincide con el punto primero de este tema.

Tema 5: Amenazas programadas (virus).

  1. Clasificación de amenazas
Una de las amenazas fundamentales a la seguridad informática son las amenazas programadas o también conocidas como virus, se trata de código específicamente diseñado para atacar intencionadamente las medidas de seguridad del sistema.
Existen varios tipos de amenazas programadas:
  1. Virus en MSDOS
En el sistema operativo MSDOS podemos distinguir 2 tipos de virus:
-Residentes: toman el control de la máquina de modo permanente hasta que se apaga o se reinicia por software. Para ello se cargan como residentes en memoria tras la ejecución del programa infectado. Desde la memoria pueden interceptar ciertos servicios de interrupción e infectar cualquier programa que sea ejecutado a continuación. Para eliminar este tipo de virus no basta con borrar o reparar los ficheros infectados, el virus podrá seguir infectando otros programas desde memoria. La única solución en este caso es apagar el ordenador y arrancar desde un disco del sistema limpio y protegido contra escritura.
-De acción directa: éstos no permanecen en memoria después de ser ejecutado el programa infectado, sino que proceden directamente a desarrollar la rutina de ataque.
  1. Virus en macro
Este tipo de virus es de los aparecidos mas recientemente, se basa en la posibilidad de ejecutar tareas automatizadas que el propio usuario es capaz de programar en aplicaciones comerciales tales como Microsoft Word, Excel. Son capaces de auto-enviarse por correo electrónico a todas las direcciones existentes en nuestra libreta de direcciones, asegurando así su supervivencia. Los virus Melisa, o I love you pertenecen a este tipo.