miércoles, 18 de noviembre de 2015

Medidas de seguridad preventivas y correctivas aplicables a un firewall 

Generalmente, los firewalls son configurados para proteger contra accesos desde el mundo exterior. Esto ayuda a prevenir a los accesos no autorizados a máquinas de tu red. Firewalls más sofisticados bloquean tráfico del exterior al interior, pero se permite a los usuarios del interior comunicarse con el exterior de una forma más flexible. 

La primera de ellas, la más importante, hace referencia a la política de seguridad de la organización propietaria del firewall: evidentemente, la configuración y el nivel de seguridad potencial será distinto en una empresa que utilice un firewall para bloquear todo el tráfico externo hacia el dominio de su propiedad (excepto, quizás, las consultas a su página web) frente a otra donde sólo se intente evitar que los usuarios internos pierdan el tiempo en la red, bloqueando por ejemplo todos los servicios de salida al exterior excepto el correo electrónico. Sobre esta decisión influyen, aparte de motivos de seguridad, motivos administrativos de cada organismo. 

La segunda decisión de diseño a tener en cuenta es el nivel de monitorización, redundancia y control deseado en la organización; una vez definida la política a seguir, hay que definir cómo implementarla en el firewall indicando básicamente qué se va a permitir y qué se va a denegar. Para esto existen dos aproximaciones generales: o bien se adopta una postura restrictiva (denegamos todo lo que explícitamente no se permita) o bien una permisiva (permitimos todo excepto lo explícitamente negado).

Por último, la tercera decisión a la hora de instalar un firewall es meramente económica: en función del valor estimado de lo que deseemos proteger, debemos gastar más o menos dinero, o no gastar nada. Un firewall puede no entrañar gastos extras para la organización, o suponer un desembolso de varios de miles de pesos: seguramente un departamento o laboratorio con pocos equipos en su interior puede utilizar un PC con Linux, Solaris o FreeBSD a modo de firewall. 



Números de puertos Los números de puertos son divididos en 3 rangos:
  • - Puertos bien conocidos (0 al 1023) 
  • - Puertos registrados (1024 al 49151) 
  • - Puertos dinámicos o privados (49152 al 65535)


Algunos Protocolos TCP/UDP y Puertos de servicio 

TCP y UDP poseen campos de 16 bits (2 bytes) en su respectivo encabezado para almacenar el número de puerto. Esto significa que pueden tener hasta 65.536 diferentes puertos o servicios, los cuales se numeran desde 0 a 65.535. 

Es importante tener en cuenta que a pesar de que un servicio está normalmente asignado a su número de puerto, nada garantiza que esto se cumpla. Telnet, por ejemplo, se encuentra normalmente en el puerto 23 de TCP. Nada lo detiene de ofrecerse en el puerto 31337.Cualquier servicio se puede ejecutar en cualquier puerto. Pero si desea trabajar en red con otros hosts, lo mejor es seguir las normas.  

Los puertos y servicios mas comunes se encuentran en el archivo /etc/services de los hosts basados en UNIX (Como Linux y MAC), este es un excelente recurso para hacer coincidir servicios TCP y UDP con los números de puertos mas comunes. (Ver la lista de los puertos de servicio en este Enlace)

El siguiente es un extracto con algunos de los servicios y sus puertos asociados mas comunes, Algunos de estos son ofrecidos en protocolos TCP y UDP simultaneamente. Esto es normal pero inusual, la mayoría de servicios se ofrecen en TCP o UDP.

 


DMZ (Zona desmilitarizada)
El concepto de Aislamiento
Los sistemas Firewall permiten definir las reglas de acceso entre dos redes. Sin embargo, en la práctica, las compañías cuentan generalmente con varias subredes con diferentes políticas de seguridad. Por esta razón, es necesario configurar arquitecturas de firewall que aíslen las diferentes redes de una compañía. Esto se denomina "aislamiento de la red".



Cuando algunas máquinas de la red interna deben ser accesibles desde una red externa (servidores web, servidores de correo electrónico, servidores FTP), a veces es necesario crear una nueva interfaz hacia una red separada a la que se pueda acceder tanto desde la red interna como por vía externa sin correr el riesgo de comprometer la seguridad de la compañía. El término "zona desmilitarizada" o DMZ hace referencia a esta zona aislada que posee aplicaciones disponibles para el público. La DMZ actúa como una "zona de búfer" entre la red que necesita protección y la red hostil.

Los servidores en la DMZ se denominan "anfitriones bastión" ya que actúan como un puesto de avanzada en la red de la compañía.
Por lo general, la política de seguridad para la DMZ es la siguiente:
  • El tráfico de la red externa a la DMZ está autorizado
  • El tráfico de la red externa a la red interna está prohibido
  • El tráfico de la red interna a la DMZ está autorizado
  • El tráfico de la red interna a la red externa está autorizado
  • El tráfico de la DMZ a la red interna está prohibido
  • El tráfico de la DMZ a la red externa está denegado




Protocolos y control de acceso ala red

La siguiente entrada es para compartir información acerca de 4 protocolos que pueden brindarnos dicha seguridad en la redes. AAA, KERBEROS,TACACS Y RADIUS

AAA

La sigla AAA puede traducirse en español como Autenticación, Autorización y Auditoría (originalmente, Authentication, Authorization y Accounting). Cuando hablamos de AAA (triple A), no nos estamos basando en un solo protocolo o en algunos en especial, sino en una familia de protocolos que proveen los servicios anteriormente mencionados. Si le adicionamos el concepto de Auditoría, tendríamos lo que a veces se conoce como AAAA, o cuádruple A. Para comprender mejor estos sistemas de autenticación, debemos recordar primero los conceptos que representan:

Autenticación 
La autenticación es el proceso por el que una entidad prueba su identidad ante otra. Normalmente la primera entidad es un cliente (usuario, ordenador, etc.) y la segunda un servidor (ordenador). La Autenticación se consigue mediante la presentación de una propuesta de identidad (vg. un nombre de usuario) y la demostración de estar en posesión de las credenciales que permiten comprobarla. Ejemplos posibles de estas credenciales son las contraseñas, los testigos de un sólo uso (one-time tokens), los Certificados Digitales, ó los números de teléfono en la identificación de llamadas. Viene al caso mencionar que los protocolos de autenticación digital modernos permiten demostrar la posesión de las credenciales requeridas sin necesidad de transmitirlas por la red (véanse por ejemplo los protocolos de desafío-respuesta).

Autorización 
Autorización se refiere a la concesión de privilegios específicos (incluyendo "ninguno") a una entidad o usuario basándose en su identidad (autenticada), los privilegios que solicita, y el estado actual del sistema. Las autorizaciones pueden también estar basadas en restricciones, tales como restricciones horarias, sobre la localización de la entidad solicitante, la prohibición de realizar logins múltiples simultáneos del mismo usuario, etc. La mayor parte de las veces el privilegio concedido consiste en el uso de un determinado tipo de servicio. Ejemplos de tipos de servicio son, pero sin estar limitado a: filtrado de direcciones IP, asignación de direcciones, asignación de rutas, asignación de parámetros de Calidad de Servicio, asignación de Ancho de banda, y Cifrado.

Contabilización 

La contabilización se refiere al seguimiento del consumo de los recursos de red por los usuarios. Esta información puede usarse posteriormente para la administración, planificación, facturación, u otros propósitos. La contabilización en tiempo real es aquella en la que los datos generados se entregan al mismo tiempo que se produce el consumo de los recursos. En contraposición la contabilización por lotes (en inglés batch accounting) consiste en la grabación de los datos de consumo para su entrega en algún momento posterior. La información típica que un proceso de contabilización registra es la identidad del usuario, el tipo de servicio que se le proporciona, cuando comenzó a usarlo, y cuando terminó.

RADIUS
El Protocolo de servicio de usuario de acceso telefónico de autenticación remota (RADIUS) fue desarrollado por Livingston Enterprises, Inc., como un protocolo de autenticación del servidor de acceso y de contabilidad. La especificación RADIUS RFC 2865 sustituye a la RFC 2138. El estándar de contabilidad RADIUS RFC 2866 sustituye al RFC 2139
RADIUS surgió inicialmente con una solución para la administración en el control de acceso para usuarios que soportaban su conexión mediante enlaces seriales y módems, facilitando el control y supervisión de la seguridad, la autorización, la auditoria, verificación de nombres de usuarios y contraseñas, así como una detallada información de configuración sobre el tipo de servicio que se pretendía entregar al usuario.

-Flujo de mensajes en un proceso de autenticación/autorización Radius

RADIUS es un protocolo estándar de seguridad para Internet, desarrollado por Livingston Enterprises y que la IETF (Internet Engineering Task Force) ha recogido en los RFCs 2865 y 2866. Fue diseñado como un protocolo de servicio para TCP/IP con funcionalidad de autenticación de acceso a servidores para autentificar usuarios.

Los elementos característicos que posee RADIUS le han permitido guardar un alto grado de compatibilidad con la arquitectura dispuesta por las redes inalámbricas IEEE 802.11, una razón primordial por la cual es éste el servidor recomendado, según la norma, para prestar los servicios de autenticación en redes inalámbricas.
El servicio RADIUS comprende tres componentes:
  •  Protocolo: Sobre la base de la UDP, RFC 2865 y 2866 define el formato de trama RADIUS y el mecanismo de transferencia de mensajes, y usa 1812 como el puerto de autenticación y 1813 como el puerto de auditoria.
  • Servidor: El servidor RADIUS se ejecuta en el ordenador o estación de trabajo en el centro, y mantiene la información para la autenticación de usuarios y servicio de de acceso red.
  • Cliente: El cliente RADIUS se ejecuta en el NASS situado en toda la red.

TACACS
Abreviatura de erminal Access Controller Access Control System T ERMINAL A cceso C ontroller A cceso C ontrol Sistema, una autenticación de protocolo que se utiliza comúnmente en UNIX redes. TACACS permite a un servidor de acceso remoto para comunicarse con una autenticación del servidor con el fin de determinar si el usuario tiene acceso a la red.
TACACS está ahora un poco anticuado y no se utiliza con tanta frecuencia como lo era antes. Una versión posterior de TACACS fue llamado XTACACS (E x tendía). Estas dos versiones generalmente han sido sustituidos por TACACS + y RADIUS en las redes nuevas o actualizadas. TACACS + es un nuevo protocolo y, por tanto, no es compatible con TACACS o XTACACS.
TACACS se detalla en el RFC 1492.

KERBEROS
Es un protocolo de seguridad muy difundido en entornos Unix, aunque adoptado también por otros sistemas operativos como Windows 2000. Kerberos es un sistema de autentificación de usuarios, que posee un doble objetivo:
Impedir que las claves sean enviadas a través de la red, con el consiguiente riesgo de su divulgación. 
Centralizar la autentificación de usuarios, manteniendo una única base de datos de usuarios para toda la red.
Operación de Kerberos 

Kerberos, como protocolo de seguridad, usa una criptografía de claves simétricas, lo que significa que la clave utilizada para cifrar es la misma clave utilizada para descifrar o autenticar usuarios. Esto permite a dos computadores en una red insegura, demostrar su identidad mutuamente de manera segura.
Kerberos entonces restringe los accesos sólo a usuarios autorizados y autentica los requerimientos a servicios, asumiendo un entorno distribuido abierto, en el cual usuarios ubicados en estaciones de trabajo acceden a estos servicios en servidores distribuidos a través de una red.

jueves, 5 de noviembre de 2015

Historia

SSL fue diseñado e implementado por Netscape Communications en los noventas para proveer a sus productos (su navegador y sus servidores) con la capacidad de abrir conexiones seguras entre ellos.
Desde entonces SSL se ha convertido en el estándar internacional de comunicaciones seguras ya que ha sido adoptado por bancos, gobierno y empresas. 

Funcionamiento

SSL opera mediante el intercambio de llaves entre el cliente y el servidor para poder descifrar la información que ha sido codificada por un cipher simetrico. Lo que esto significa es que los datos encriptados solo pueden ser desencriptados por el poseedor de la llave correcta.
La informacion que viaja por SSL puede ser encriptada con diferentes algoritmos simetricos, tipicamente DES, Triple DES, Rijndael, o IDEA. El termino simétrico en este caso implica que los datos que han sido encriptados, pueden ser desencriptados después (a diferencia de hashes como SHA1 o MD5 que solo son "hacia un lado"). 

Problemas de SSL

SSL intenta resolver tres problemas principales:
  1. Seguridad de la Información: SSL garantiza que terceros no tengan acceso a la información mientras viaja por internet al encriptarla.
  2. Integridad de los datos: La información recibida desde un servidor por SSL puede ser "validada" para comprobar que no ha sido alterada en la trayectoria.
  3. Autenticidad de los Datos: Mediante los algoritmos de encriptación, es posible comprobar que los datos realmente han llegado del servidor que el cliente espera. Esto evita que alguien se haga pasar por un sitio para cometer fraudes. (evitando ataques como Phishing, Man in the Middle, etc).
    Mediante el uso de certificados digitales avalados por autoridades certificadoras SSL incorpora una eslabon más en la cadena de confianza. (Ver siguiente sección).

 Variantes de SSL

Protocolo de seguridad ampliamente difundido. Es usado en la mayoría de los navegadores y servidores web (https) y en transferencias de comercio electrónico. Fue diseñado originalmente por Netscape en 1993. Existen variantes como TLS: transport layer security [RFC 2246]. Provee de confidencialidad, integridad y autenticación. Los objetivos originales eran:
  • Permitir el comercio electrónico en la Web
  • Cifrado (especialmente de números de tarjetas de credito)
  • Autenticación de servidores Web
  • Opcionalmente autenticación de clientes
  • Minimizar riesgos al hacer negocios con nuevos clientes
  • Disponible para toda conexión TCP
  • Interfaz de socket segura
kk

Como herramientas de cifrado tenemos:
  • Algoritmos de clave pública.
  • Algoritmo de cifrado simétrico.
  • Algoritmos MAC (Message Authentication Code)
SSL permite varios mecanismos de cifrado. El cliente y el servidor deberán de acordar el mecanismo de cifrado en una negociación. El cliente ofrecerá diferentes opciones y el servidor será quien elija entre las ofrecidas.
El propósito del Handshaking será el de autenticar al servidor, acordar el algoritmo de cifrado en la negociación, establecer las claves y autenticar al cliente:
  1. El cliente envía una lista de algoritmos que soporta, junto con un número de unicidad del cliente (para evitar la replicación de mensajes)
  2. El servidor elige un algoritmo de la lista.
  3. El servidor envía su elección, el certificado y el número de unicidad del servidor.
  4. El cliente verifica el certificado, extrae la clave pública del servidor, genera el “pre-master secret”, lo cifra con la clave pública de servidor y lo envía al servidor.
  5. El cliente y el servidor calculan independientemente las claves de cifrado y MAC a partir del “pre-master secret” y los números de unicidad (ambos comparten estas cuatro claves).
  6. El cliente envía un MAC de todos los mensajes de handshake.
  7. El servidor envía un MAC de todos los mensajes de handshake.
kk3

¿En qué casos se debe usar un certificado SSL?

Independientemente de la información que se esté transmitiendo (por ejemplo, desde un formulario alojado en su página web hasta su servidor), debería contar con un certificado SSL, ya que estos certificados no sirven simplemente para proteger transacciones de tarjetas de crédito. Cualquier tipo de información personal es confidencial y debe protegerse. Ya se trate de suscripciones a boletines de noticias o accesos a cuentas, debería contarse como mínimo con un certificado SSL para proteger los datos recogidos y enviados.

  • Para proteger las transacciones online con tarjetas de crédito.
  • Para ofrecer protección online para los accesos al sistema, la información confidencial transmitida a través de formularios web o determinadas áreas protegidas de páginas web.
  • Para proteger el correo web y las aplicaciones como el acceso web a Outlook o los servidores Exchange y Office Communications.
  • Para proteger los procesos de trabajo y la virtualización de aplicaciones como plataformas Citrix Delivery o las plataformas de cloud computing.
  • Para proteger la conexión entre un cliente de correo como Microsoft Outlook y un
    servidor de correo como Microsoft Exchange.
  • Para proteger la transferencia de archivos sobre https y servicios de FTP, como podrían ser las actualizaciones de nuevas páginas por parte de un propietario de una página web o la transmisión de archivos pesados.
  • Para proteger los accesos y la actividad en paneles de control como Parallels o cPanel entre otros.
  • Para proteger el tráfico en una intranet como es el caso de las redes internas, la función compartir archivos, las extranets o las conexiones a bases de datos.
  • Para proteger los accesos a redes y cualquier otro tráfico de red con VPNs de SSL como podrían ser los servidores de acceso VPN o las aplicaciones como Citrix Access Gateway

 

miércoles, 21 de octubre de 2015

Como trabajan los Algoritmos

SHA-1
NIST presentó en 1993 un algoritmo basado en las mismas técnicas que MD5 y denominado SHA (Secure Hash Algorithm).
El primer miembro de la familia fue publicado en 1993 es oficialmente llamado SHA. Sin embargo, hoy día, no oficialmente se le llama SHA‐0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor de SHA fue publicado con el nombre de SHA‐1.
Este algoritmo en 1995 la Agencia de Seguridad Nacional (NSA) lo sustituyó por una versión mejorada que actualmente se conoce como SHA-1 y que se considera más seguro que MD5. Produce un código hash de 160 bits para mensajes de longitud máxima 264 bits, aunque existen otras variantes poco utilizadas todavía que producen códigos de mayor longitud.
En general, SHA1 se considera el mejor algoritmo de la familia de Algoritmos HASH o de resumen y es el que se aplica en la mayoría de las aplicaciones de firma electrónica. Por lo tanto es muy habitual aplicar SHA1 seguido de RSA para realizar una firma electrónica de un documento, o bien el algoritmo DSA específico para firma  electrónica que también utiliza SHA1 internamente.
Ejemplo de hashes
Estos son ejemplos de SHA-1 digiere. ASCII codificación se utiliza para todos los mensajes.
SHA1 (” El rápido zorro marrón salta sobre el perro perezoso “) = 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12
Incluso un pequeño cambio en el mensaje, con una probabilidad abrumadora, resultando en un hash completamente diferente debido al efecto avalancha.
La codificación hash vacía para SHA‐1 corresponde a:
SHA1(“”) = da39a3ee5e6b4b0d3255bfef95601890afd80709
Es imposible encontrar un mensaje que se corresponde con un determinado mensaje.
Es imposible encontrar dos diferentes mensajes que producen el mismo mensaje.
Si un mensaje se cambia incluso de un solo carácter, el resultado será un mensaje totalmente diferente.
SHA‐0 y SHA‐1 producen una salida resumen de 160 bits (20 bytes) de un mensaje que puede tener un tamaño máximo de 264 bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensaje MD4 y MD5.

El procesamiento consta de cinco pasos los cuales se explican a continuación:

Se incorporan bits de relleno al mensaje de entrada de tal modo que cumpla:
El relleno consiste en un uno seguido de los ceros que sean necesarios. Aunque el mensaje ya tenga la longitud deseada, se debe efectuar el relleno, por lo que el número de bits de dicho relleno está en el rango de 1 a 512 bits.

A la salida del paso 1, se le añade un bloque de 64 bits que represente la longitud del mensaje original antes de ser rellenado.
Se inicializa la memoria temporal MD, la cual consta de 160 bits y su finalidad es almacenar los resultados intermedios y finales de la función de dispersión. La MD consta de 5 registros (A,B,C,D,E) de 32 bits cada uno, los valores con los que se inicializan son los siguientes (valores hexadecimales):
A=67452301
B=EFCDAB89
C=98BADCFE
D=10325476
E= C3D2E1F0

4.Se procesa el mensaje por bloques de 512 bits, cada uno pasa por un módulo que consta de 4 rondas de procesamiento de 20 pasos cada una. Las rondas tienen una estructura similar, con la excepción de que cada una ocupa una función lógica primitiva diferente (f1, f2, f3 y f4).
figure95
5.- Una vez que se procesan los L bloques de 512 bits, el resumen del mensaje son los 160 bits de salida del último bloque.
SHA‐1 tiene estas propiedades y, por tanto, a que se refiere como seguro. Está diseñado para trabajar con el Algoritmo de Firma Digital (DSA). SHA‐1 es una forma de función de hash.
Funciones en un solo sentido se caracterizan por dos propiedades. La primera es que son de sentido único. Esto significa que usted puede tomar un mensaje y calcular un valor de hash, pero no se puede tomar un valor hash y recrear el mensaje original. También es libre de colisión y, por tanto, no hay dos mensajes hash con el mismo valor.
Aplicaciones de SHA‐1

SHA‐1 puede ser usado en una variedad de aplicaciones:
1. Aplicaciones de seguridad que requieren autenticación
2. E‐mail
3. Transferencia electrónica de fondos
4. Distribución de software
5. Almacenamiento de datos

SHA‐1 ha sido examinado muy de cerca por la comunidad criptográfica pública, y no se ha encontrado ningún ataque efectivo. No obstante, en el año 2004, un número de ataques significativos fueron divulgados sobre funciones criptográficas de hash con una estructura similar a SHA‐1; lo que ha planteado dudas sobre la seguridad a largo plazo de SHA‐1.



RSA
El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario.

Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes.

Cuando se envía un mensaje, el emisor busca la clave pública de cifrado del receptor y una vez que dicho mensaje llega al receptor, éste se ocupa de descifrarlo usando su clave oculta.

Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado.

Emplea expresiones exponenciales en aritmética modular.

La seguridad de este algoritmo radica en que no hay maneras rápidas conocidas de factorizar un número grande en sus factores primos utilizando computadoras tradicionales.
La computación cuántica podría proveer una solución a este problema de factorización.

El algoritmo RSA es un algoritmo de clave pública desarrollado en 1977 en el MIT por Ronald Rivest, Adi Shamir y Leonard Adelman.

Fue registrado el 20 de Septiembre de 1983. El 20 de Septiembre del 2000, tras 17 años, expiró la patente RSA, pasando a ser un algoritmo de dominio público.

Este popular sistema se basa en el problema matemático de la factorización de numeros grandes.

El algoritmo RSA funciona de la siguiente manera:

Inicialmente es necesario generar aleatoriamente dos números primos grandes, a los que llamaremos p y q.
A continuación calcularemos n como producto de p y q: n = p * q
Se calcula fi: fi(n)=(p-1)(q-1)
Se calcula un número natural e de manera que MCD(e, fi(n))=1 , es decir e debe ser primo relativo de fi(n).
Es lo mismo que buscar un numero impar por el que dividir fi(n) que de cero como resto.
Mediante el algoritmo extendido de Euclides se calcula d: e.d mod fi(n)=1 Puede calcularse d=((Y*fi(n))+1)/e para Y=1,2,3,… hasta encontrar un d entero.
El par de números (e,n) son la clave pública.
El par de números (d,n) son la clave privada.
Cifrado: La función de cifrado es C = M^e mod n
Descifrado: La función de descifrado es M = C^d mod n
Ejemplo con números pequeños

Escogemos dos números primos, por ejemplo p=3 y q=11.
n = 3 * 11 = 33
fi(n) = (3-1) * (11-1) = 20
Buscamos e: 20/1=0, 20/3=6.67. e=3
Calculamos d como el inverso multiplicativo módulo z de e, por ejemplo, sustituyendo Y por 1,2,3,… hasta que se obtenga un valor entero en la expresión: d = ((Y * fi(n)) + 1) / e = ( Y * 20 + 1) / 3 = 21 / 3 = 7
e=3 y n=33 son la clave pública
d=7 y n=33 son la clave privada
Cifrado: Mensaje = 5, C = M^e mod n = 5^3 mod 33 = 26
Descifrado: M = C^d mod n = 26^7 mod 33 = 8031810176 mod 33 = 5
Ejemplo visual de RSA

Un ejemplo pedagógico trivial del algoritmo RSA se muestra en la siguiente animación. Para este ejemplo hemos seleccionado p=3 y q=11, dando n=11 y z=20. Un valor adecuado de d es d=7, puesto que 7 y 20 no tienen factores comunes.


Con estas selecciones, e puede encontrarse resolviendo la ecuación 7e=1(mod 20), que produce e=3.El texto cifrado, C, de un mensaje de texto normal, P, se da por la regla C=P3(mod 33). El texto cifrado lo descifra el receptor de acuerdo con la regla P= C7(mod 33). Observe la animación tanto en el emisor como en el receptor, donde se muestra el cifrado-descifrado del texto normal “CASA”.
Dado que los números primos escogidos para este ejemplo son tan pequeños, P debe ser menor que 33, por lo que cada bloque de texto normal puede contener sólo un carácter. El resultado es un cifrado por sustitución monoalfabética, no muy impresionante. En cambio si hubiéramos seleccionado p y q  10100, podríamos tener n  10200, para que cada bloque pueda ser de hasta 664 bits (s644 10200) u 83 caracteres de 8 bits, contra 8 caracteres para el DES.

 MD5
El algoritmo de hash más utilizado en estos momentos es el MD5 . Este algoritmo fue desarrollado por Ronald Rivest en 1995 y está basado en dos algoritmos anteriores MD2 y MD4. Todos estos protocolos producen un número de 128 bits a partir de un texto de cualquier longitud.

MD4 fue desarrollado para mejorar el rendimiento de MD2 , sin embargo, varios problemas fueron detectados y en 1996 fueron publicados elementos que hacen hoy en día inservible el algoritmo. MD5 sustituyó a MD4 y aunque no tiene el rendimiento de su antecesor, hasta el momento no han sido publicados elementos que comprometan su integridad y funcionamiento.


MD5 comienza rellenando el mensaje a una longitud congruente en módulo 448 mod 512. Es decir la longitud del mensaje es 64 bits menos que un entero múltiplo de 512. El relleno consiste en un bit en 1 seguido por cuentos bits en 0 sean necesarios. La longitud original del mensaje es almacenada en los últimos 64 bits del relleno.


Adicionalmente se inicializa, con un valor fijo, un buffer de 128 bits. Este buffer puede verse
como 4 registros de 32 bits (A,B,C,D) y son inicializados con los siguientes valores hexadecimales:
A=67452301; B=EFCDAB89; C=98BADCFE; D=10325476

Durante varias rondas de procesamiento el algoritmo toma bloques de 512 bits de la entrada y los mezcla con los 128 bits del buffer. Este proceso es repetido hasta que todos los bloques de entrada han sido consumidos. El valor resultante en el buffer es el hash del mensaje.


MD5 no es el único algoritmo de hash conocido. Existe otra función llamada Secure Hash Algorithm, (SHA), desarrollado por NSA.. A diferencia de MD5, SHA genera números hash de 160 bits.