miércoles, 22 de noviembre de 2017

RMI

RMI

Introducción

Existen varias herramientas para la invocación remota entre servidores, tales como los sockets (orientados y no orientados a conexión), los procedimientos remotos (RPC) y la invocación remota de métodos (RMI).

Los sockets y RPC presentan una gran desventaja: el rendimiento, esta razón motivó el diseño de RMI, cuyo principal objetivo era soportar llamadas a procedimientos remotos entre objetos que se ejecutan sobre Máquinas Virtuales Java (JVM).

Al ser RMI la herramienta más útil para la comunicación entre servidores remotos, sus características y el proceso que se lleva a cabo al implementarla son el tema a tratar en esta ocasión.

RMI

El mecanismo RMI (Remote Method Invocation) permite que una aplicación o applet se comunique con objetos que residen en programas que se ejecutan en máquinas remotas.

En RMI, un servidor de objeto exporta un objeto remoto y lo registra en un servicio de directorios. El objeto proporciona métodos remotos, que pueden invocar los programas clientes.

Sintácticamente, un objeto remoto se declara como una interfaz remota una extensión de la interfaz Java. El servidor de objeto implementa la interfaz remota. Un cliente de objeto accede al objeto mediante la invocación de sus métodos, utilizando una sintaxis similar a las invocaciones de los métodos locales.

Componentes
  • Cliente: Conduce el flujo de la aplicación. Localiza e invocamétodos ofertados como remotos por los servidores.
  • Servidor: Conjunto de objetos que ofrecen interfaces remotas públicas cuyos métodos pueden ser invocados clientes de cualquier procesador de la plataforma.
  • Registro: Servicio estático que se establece en cada nudo, en el que se registran los servidores con un nombre, y donde los clientes los localizan por él.
Proceso

Conclusiones

Referencias

  • Liu, M. L. (2004). Computación Distribuida: Fundamentos y Aplicaciones. Madrid: PEARSON EDUCACIÓN, S.A.
  • domingo, 19 de noviembre de 2017

    Funciones hash

    Funciones hash

    Introducción

    La tecnología se ha desarrollado tan rápidamente en la mayoría de las áreas de informática que es fácil pasar por alto las áreas que no se han desarrollado en las últimas décadas. La autenticación basada en contraseña es probablemente una de las funciones técnicas más importantes que todos usamos todos los días, sin embargo, no ha evolucionado mucho desde los primeros sistemas informáticos de usuarios múltiples.

    El término autenticación (o autentificación) se refiere al servicio que trata de asegurar que una comunicación sea auténtica, es decir, verificar que el origen de los datos es el correcto, quién los envió y cuándo fueron enviados y recibidos también sean correctos.

    Anteriormente se había tratado el tema de la autenticación con el uso de Kerberos, esta vez el método a abordar son las funciones hash.

    Hash

    Una función Hash es un algoritmo matemático que, con una entrada A, nos da una salida B. Son también llamadas funciones de resumen y se emplean en el área de la criptografía para asegurar la autenticidad de un documento (como firma digital), para proteger contraseñas o para asegurar la integridad de la información.

    Puede ser cualquier algoritmo matemático pero tiene que cumplir una serie de propiedades:

    1. Para una misma función hash, sea cual sea la longitud de la entrada A la salida B tiene que ser de un tamaño fijo
    2. Para cada A, B tiene que ser única.
    3. Tiene que ser rápido y fácil de calcular.
    4. No se puede volver a A desde B.
    5. No puede presentar colisiones. Esto quiere decir que para dos A diferentes no se puede dar un mismo B. Esto como tal es imposible, pero es muy importante que las colisiones sean mínimas y que encontrarlas sea muy difícil.
    • Se requiere de forma adicional que sean uniformes (para una A elegida aleatoriamente todos los valores hash son equiprobables) y con efecto avalancha (un cambio de un único bit en A supone una B completamente diferente).
    SHA-1 (Secure Hash Algorithm)

    Este algoritmo fue desarrollado por el NIST y publicado como estándar federal para el procesamiento de la información; en 1995 se publicó una versión revisada conocida como SHA-1.

    El algoritmo toma como entrada mensajes de longitud máxima de 264 bits que son procesados en bloques de 512 bits; el resultado que produce es de 160 bits.

    Proceso:

    1. Se incorporan bits de relleno al mensaje de entrada de tal modo que cumpla: longitud=448mod512. 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.
    2. Se le añade un bloque de 64 bits que represente la longitud del mensaje original antes de ser rellenado.
    3. 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):
      1. 67452301
      2. EFCDAB89
      3. 98BADCFE
      4. 10325476
      5. 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).
      • La entrada a cada ronda consta del bloque de 512 bits que se esté procesando (Yq) y los 160 bits de la memoria MD, cada bloque de 512 bits actualizará el valor de la memoria temporal. Cada ronda también hace uso de la constante aditiva Kt, donde t indica uno de los 80 pasos a lo largo de las cuatro rondas.
    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.

    Esquema:
    MD5

    El algoritmo MD5 fue desarrollado por Ron Rivest en 1992 en el MIT con la finalidad de robustecer el MD4 y a la fecha se trata del algoritmo hash más seguro y de mayor uso en el mundo.

    MD5 procesa mensajes de cualquier longitud y procesa bloques uniformes de 512 bits a la vez, hasta concluir con el mensaje total a fin de entregar a la salida un bloque "resumen" de 128 bits.

    Proceso:

    1. En principio, para que el mensaje sea procesado en bloques de tamaño fijo se requiere que su longitud en bits sea: longitud=448mod512, de manera que su longitud sea de no menos de 64 bits de diferencia para completar un múltiplo de 512, así, de ser necesario se aplica un relleno, el cual varía en longitud en cada caso, esto es, el número de bits adicionados está en un rango de 1 a 512 bits con el formato 10000…0.
    2. Una representación de 64 bits de la longitud del mensaje original (antes de aplicar el relleno) se añade al resultado del paso 1.
    3. Da inicio el proceso de reducción, para ello se utiliza un registro de 128 bits que permite almacenar y mantener los resultados intermedios y final de la función hash. El registro se divide en cuatro secciones de 32 bits cada una, las cuales corresponden a las variables A, B, C, y D que son inicializadas con los valores hexadecimales:
      1. 67452301
      2. EFCDAB89
      3. 98BADCFE
      4. 10325476
      Estas variables son llamadas variables de concatenación o variables de encadenamiento y se almacenan en formato little-endian de manera que aparecen:
      1. 01 23 45 67
      2. 89 AB CD EF
      3. FE DC BA 98
      4. 76 54 32 10
    4. El mensaje se procesa en bloques de 512 bits a la vez a través de 16 bloques de 32 bits cada uno, para lo cual las cuatro variables de concatenación se copian en variables distintas: a = A, b = B, c = C, d = D.
      La parte medular del algoritmo es una función de compresión que consta de cuatro rondas, las cuales tienen una estructura similar; pero cada una utiliza operaciones distintas durante 16 iteraciones; cada operación realiza una función no lineal sobre tres de las variables a, b, c y d, y el resultado es sumado a la cuarta variable que no fue elegida, un sub-bloque del texto y una constante.
      A ese resultado se le aplica una rotación circular a la izquierda un número variable de bits y se suma el resultado a una de las variables a, b, c o d. Finalmente el resultado reemplaza a una de las variables a, b, c o d. La salida de la cuarta ronda se suma a la entrada de la primera en una operación modular 232.
      Hay cuatro operaciones no lineales utilizadas, una para cada ronda:
      Estas funciones son designadas de forma que si los bits que corresponden a, b, c y d son independientes y no perjudiciales, cada bit del resultado también será independiente y no perjudicial. La función F es una función condicional: If b then c else d, de manera similar G: If d then b else c, en tanto la función H genera un bit de paridad.
    5. Al final de todos los ciclos, a, b, c y d son sumados a A, B, C y D respectivamente y el algoritmo continúa con el siguiente bloque de datos. Y después de que todos los bloques de 512 bits (cada uno) han sido procesados se obtiene la salida final, esto es, la concatenación de A, B, C y D que produce un bloque de 128 bits.

    Conclusiones

    Las funciones hash tienen varias ventajas además de la facilidad de implementación, son versátiles y muy útiles para cualquiera de sus posibles aplicaciones, por estas razones son altamente utilizadas para proporcionar servicios de seguridad. A pesar de que fueron creadas hace más de dos décadas, su uso sigue vigente y muy probablemente seguirá así, ya que son confiables y díficiles de vulnerar.

    Referencias

  • Facultad de Ingeniería. (2012). Fundamentos de Criptografía. Noviembre 19, 2017, de UNAM Sitio web: http://redyseguridad.fi-p.unam.mx/proyectos/criptografia/criptografia/
  • Corrales, H., Cilleruelo, C. & Cuevas, A. (2014). Criptografía y Métodos de Cifrado. Noviembre 19, 2017, de Universidad de Alcalá Sitio web: http://www3.uah.es/libretics/concurso2014/files2014/Trabajos/Criptografia%20y%20Metodos%20de%20Cifrado.pdf
  • Stallings, W. (2004). Fundamentos de Seguridad en Redes, Aplicaciones y Estándares. España: PEARSON EDUCACIÓN, S.A.
  • lunes, 13 de noviembre de 2017

    Socket Stream

    Socket Stream

    Introducción

    Un socket es una interfaz de entrada­-salida de datos que permite la intercomunicación entre procesos. Anteriormente se trató el tema de sockets datagrama (no orientados a conexión), sin embargo los sockets stream son los más utilizados y es el tema que se tratará en esta entrada.

    Mientras que el API de sockets datagrama permite el intercambio de unidades discretas de datos (es decir, datagramas), el API de sockets en modo stream proporciona un modelo de transferencia de datos basado en la E/S en modo stream de los sistemas operativos Unix. Por definición, un socket en modo stream proporciona sólo comunicaciones orientadas a conexión.

    Socket Stream

    Los sockets son mecanismos de comunicación entre procesos que permiten que un proceso hable ( emita o reciba información ) con otro proceso incluso estando en distintas máquinas.

    Propiedades

    Fiabilidad de la Transmisión. No se pierden los datos transmitidos.

    Conservación del Orden de los Datos. Los datos llegan en el orden en que se emitieron.

    No Duplicación de los Datos. El Dato sólo llega una vez.

    Comunicación en modo conectado. La conexión está establecida antes de iniciar la comunicación. De este modo, la emisión desde un extremo va destinada al otro (implícitamente).

    Componentes de la Arquitectura

    Servidor: es el programa que permanece pasivo a la espera de que alguien solicite conexión con él.

    • Está ejecutándose y esperando a que otro quiera conectarse a él.
    • Sirve la información que se le pida.

    Cliente: es el programa que solicita la conexión para pedir datos al servidor

    • En el momento de ejecutarlo o cuando lo necesite, intenta conectarse al servidor.
    • Solicita información al servidor.

    Proceso

    El servidor creará un socket, utilizando ServerSocket, le asignará un puerto y una dirección, una vez haga el accept para esperar llamadas, se quedará bloqueado a la espera de las mismas. Una vez llegue una llamada el accept creará un Socket para procesarla.

    A su vez, cuando un cliente desee establecer una conexión, creará un socket y establecerá una conexión al puerto establecido. Sólo es en este momento, cuando se da una conexión real y se mantendrá hasta su liberación mediante close().

    Para poder leer y escribir datos, los sockets disponen de unos stream asociados, uno de entrada (InputStream) y otro de salida (OutputStream) respectivamente. Para obtener estos streams a partir del socket se utiliza:

    • ObjetoDeTipoSocket.getInputStream ()
      Devuelve un objeto de tipo InputStream.
    • ObjetoDeTipoSocket.getOutputStream ()
      Devuelve un objeto de tipo OutputStream.

    Para leer los datos se necesita un BufferedReader y para escribirlos un PrintWriter.

    Al momento de enviarlos debe invocarse el método objPrintWriter.flush()

    Conclusiones

    Los sockets stream presentan muchas ventajas frente a los socket datagrama, por esta razón son el tipo de sockets más utilizado. Además, su funcionamiento es fácil de entender y sencillo de implementar, por lo tanto, a pesar de que existen otras herramientas como RMI o web socket siguen siendo utilizados.

    Referencias

  • Martin Santana, A. & Martínez Santana, L. (2008). Diseño de Sistemas Operativos. Noviembre 11, 2017, de Universidad de las Palmas de Gran Canaria Sitio web: http://sopa.dis.ulpgc.es/ii-dso/leclinux/ipc/sockets/sockets.pdf
  • Liu, M. L. (2004). Computación Distribuida: Fundamentos y Aplicaciones. Madrid: PEARSON EDUCACIÓN, S.A.
  • Arias, J. ( 2000). Programación de aplicaciones distribuidas usando sockets. Noviembre 10, 2017, de Universidad de Oviedo Sitio web: http://www.atc.uniovi.es/inf_superior/atc/DISTRIBUIDAS/prog_ap_dist_sock.pdf
  • domingo, 12 de noviembre de 2017

    Kerberos

    Kerberos

    Introducción

    La autenticación de clientes de acceso remoto es una cuestión de gran importancia para la seguridad de un sistema.

    Cuando se tenía un sólo ordenador compartido entre varias personas, para ayudar a mantener los archivos individuales privados, se desarrolló el concepto de contraseña, para que los usuarios solo pudieran acceder a sus propios contenidos. Fue Fernando Corbató quien introdujo la idea mientras trabajaba en el Massachusetts Institute of Technology (MIT) en 1960.

    En aquellos tiempos, el uso de contraseñas con este fin era bastante limitado, principalmente reducido a personas como Corbató y su equipo, que estaban entre los primeros que realmente exploraron el poder de las computadoras, por lo que no era importante o preocupante el hecho de que las contraseñas fueran simples y por lo tanto vulnerables.

    En la actualidad, en un entorno de computación de red abierta, una estación de trabajo no es confiable para identificar correctamente a sus usuarios en los servicios de red. Kerberos proporciona un enfoque alternativo por el que se utiliza un servicio confiable de autenticación de terceros para verificar las identidades de los usuarios.

    Kerberos

    Kerberos es un servicio de autentificación que se desarrolló como parte del Proyecto Athena en el MIT. Fue diseñado para abordar el problema que plantea el hecho de que en un entorno abierto distribuido, los usuarios de las estaciones de trabajo quieran acceder a servicios de servidores distribuidos por toda la red.

    El objetivo de éste es evitar solicitudes/respuestas fraudulentas entre servidores y usuarios que deben tener índole confidencial y en grupos de al menos un usuario y un servicio.

    ¿Cómo funcionan?

    En el sistema Kerberos, el cliente que desea contactar con un servidor para que le dé un servicio, debe pedir primero un ticket de una tercera parte de mutua confianza, el KAS("Kerberos Authentication Server"). Este ticket se obtiene como una función en la que uno de los componentes es una llave privada conocida sólo por el servicio y el KAS, de modo que el servicio puede estar seguro de que el ticket procede sólo de Kerberos. El KAS conoce al cliente por su nombre principal(c). La llave privada(K(c)) es la llave de autentificación conocida sólo por el usuario y el KAS.

    Proceso detallado:
    1. Cliente -> KAS: El cliente envía un mensaje {c, tgs, n}, al KAS, que contiene su identidad(c), una palabra temporal o "nonce"(un sello de tiempo u otro forma de identificar su solicitud), y solicita un ticket para usarlo con el servidor de tickets(TGS).
    2. KAS -> Cliente: El servidor de autentificación busca el nombre del cliente(c) y el nombre del servicio(TGS, el servidor de tickets) en la base de datos de Kerberos, y obtiene una llave de encriptación para cada uno de ellos K(c) y K(TGS).

      El KAS crea a continuación una respuesta para enviársela al cliente.

      Esta respuesta contiene un ticket inicial T(c,TGS) que garantiza al cliente acceso al servidor solicitado(el TGS). T(c, TGS) contiene k(c,TGS), c, TGS, el "nonce", el tiempo de vida y otra información.

      El KAS también genera una llave aleatoria de encriptación K(c, TGS), llamada llave de sesión. Luego encripta este ticket usando la llave de encriptación del TGS(K(TGS)). Este procedimiento es lo que se denomina un ticket sellado {T( c,tgs)}K( tgs).

      Inmediatamente se crea un mensaje consistente en el ticket sellado y la llave de sesión de TGS K(c, TGS).
    3. Cliente -> TGS: A la recepción del mensaje, el cliente lo desencripta usando su llave secreta K(c) que es la única que él y el KAS conocen. Comprueba que el "nonce" (n) coincide con la solicitud específica, y entonces guarda la llave de sesión K (c,tgs) para futuras comunicaciones con el TGS.

      El cliente envía a continuación un mensaje al TGS. Este mensaje contiene el ticket inicial {T(c,tgs)}K(tgs), el nombre del servidor(s), un "nonce", y un nuevo autentificador A(c) que lleva un sello de tiempo. A(c) es {c, nonce}.

      El mensaje es: {A(c)}K(c,tgs), {T(c,TGS)}K(TGS), s, n
    4. TGS -> Cliente: El TGS recibe el mensaje anterior del cliente(c), y descifra primero el ticket sellado usando su llave de encriptación TGS(este ticket fue sellado originalmente por el KAS usando la misma llave). El TGS obtiene la llave de sesión para TGS de del ticket descifrado, y la emplea a su vez para descifrar el autentificador sellado (la validez se chequea comparando el nombre del cliente tanto en el ticket como en el autentificador, el nombre del servidor TGS que figura en el ticket, la dirección de red que debe ser igual en el ticket, en el autentificador y en el mensaje recibido).

      Finalmente, chequea la hora actual en el autentificador para cerciorarse de que el mensaje es reciente. Esto requiere que todos los clientes y servidores mantengan sus relojes dentro de cierto margen prescrito de tolerancia. Ahora el TGS busca el nombre del servidor que aparece en el mensaje en la base de datos de Kerberos, y obtiene la llave de encriptación(K(s)) para el servicio especificado.

      El TGS crea una nueva llave aleatoria de sesión K(c,s) para el cliente(c) y el servidor, para generar a continuación un nuevo ticket. T(c,s) que contiene: K(c,s), n, "nonce", tiempo de vida.

      Luego ensambla un mensaje y lo envía al cliente.
    5. Cliente -> Servidor: El cliente recibe este mensaje y lo descifra usando la llave de sesión para el TGS que sólo comparten él y el TGS.

      De este mensaje calcula una nueva llave de sesión K( c,s) que comparte con el servidor(s) y un ticket sellado que no puede descifrar porque está cifrado con la llave secreta del servidor K(s).

      El cliente construye un autentificador y lo sella con la nueva llave de sesión K(c,s). Por último, envía un mensaje que contiene el ticket sellado y el autentificador al servidor(s) para solicitar su servicio.

      El servidor(s) recibe este mensaje y descifra primero el ticket sellado con su llave de encriptación, conocida sólo por él y el KAS. Luego usa la nueva llave de sesión contenida en el ticket para descifrar el autentificador y realiza el mismo proceso de validación que el descrito en el paso 4.

      Una vez que el servidor ha validado a un cliente, el cliente tiene la opción de validar a su vez al servidor. Esto evita que un intruso suplante al servidor.

      El cliente requiere que el servidor le devuelva un mensaje con el sello de tiempo(procedente del autentificador del cliente, incrementado en uno). Este mensaje se cifra con la llave de sesión que pasó del cliente al servidor.
    Especificaciones:
    • Con el fin de que la estación de trabajo emplee cualquier servidor, se requiere un ticket. Todos los tickets, a excepción del primero(también llamado ticket inicial) se obtienen del TGS. El primer ticket es especial: es un ticket para el propio TGS y se obtiene del KAS.
    • Cada ticket está asociado con una llave de sesión que se asigna cada vez que se concede un ticket.
    • Los tickets son reutilizables. Cada ticket tiene un tiempo de vida, típicamente de ocho horas. Después de que un ticket ha expirado, el usuario ha de identificarse de nuevo al Kerberos, introduciendo el nombre de usuario y el password.
    • A diferencia de un ticket, que puede ser reutilizado, hace falta un nuevo autentificador cada vez que el cliente inicia una conexión con el servidor. El autentificador contiene un sello de tiempo que expira a los pocos minutos de haber sido expedido(esta es la razón por la que los relojes de clientes y servidores deben estar sincronizados).

      Un servidor debería mantener un seguimiento de las solicitudes anteriores de los clientes para las que el sello de tiempo en el identificador es aún válido. De este modo el servidor puede rechazar solicitudes duplicadas que podrían surgir de un ticket y un identificador robados.

    Conclusiones

    Los kerberos ofrecen muchas ventajas, como es, por ejemplo, que en vez de crear protocolos elaborados de autentificación en cada servidor, proporciona un servidor centralizado de autentificación cuya función es la de autentificar los usuarios al servidor y los servidores a los usuarios, por esta razón es un método muy utilizado.

    Sin embargo, existen otras opciones de autenticación que probablemente seguirán mejorando, por lo que es recomendable probar todas las consideradas confiables para saber manejar alternativas.

    Referencias

  • MIT. (12 de 11 de 2017). MIT. Recuperado el 12 de 11 de 2017, de Kerberos: http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/ch-kerberos.html
  • Oracle. (12 de 11 de 2017). Oracle. Recuperado el 12 de 11 de 2017, de Cómo funciona el servicio Kerberos: https://docs.oracle.com/cd/E24842_01/html/E23286/intro-25.html
  • Stallings, W. (2004). Fundamentos de Seguridad en Redes, Aplicaciones y Estándares. España: PEARSON EDUCACIÓN, S.A.
  • domingo, 22 de octubre de 2017

    Cifrado asimétrco

    Introducción

    Anteriormente se había hablado de Criptografía y algoritmos de cifrado simétrico. En esta ocasión el tema son los principales algoritmos de cifrado asimétrico.

    En 1998 la Electronic Frontier Foundation (EFF) anunció que había roto un cifrado DES utilizando una máquina especializada "DES cracker". Poco después aparecieron otros algoritmos de clave privada como AES, triple DES e IDEA, sin embargo, la mayoría eran vulnerables y poco seguros.

    Ante el problema de mantener en secreto el intercambio de claves secretas, aparecieron los cifrados de clave pública (asimétricos), que están basados en funciones matemáticas y no en simples operaciones sobre los patrones de bits.

    Cifrado asimétrico


    La criptografía asimétrica (también conocida como de clave pública) es un sistema que emplea una pareja de claves. Esta pareja de claves pertenecen a la misma persona. Una es de dominio público y cualquiera puede tenerla y la otra es privada.

    El funcionamiento de este sistema es el siguiente: El remitente usa la clave pública del destinatario y sólo con la clave privada se podrá descifrar el mensaje. De esta forma se consigue que sólo el destinatario pueda acceder a la información. De la misma forma si el propietario usa su clave privada para cifrar un mensaje sólo se podrá descifrar con la clave pública. Usando la clave privada el propietario demuestra su identidad.

    Sin embargo este sistema tiene varias desventajas:
    • Mayor tiempo de proceso en mismas condiciones respecto a clave simétrica.
    • Claves más grandes en en sistemas simétricos.
    • El mensaje cifrado es más grande que el original.

    Por estas razones el principal uso del cifrado asimétrico es solventar los problemas a la hora de intercambiar las claves del cifrado simétrico.

    Diffie - Hellman

    En 1976 W. Diffie y M. Hellman publican el artículo New Directions in Cryptography donde establecen las bases de la criptografía pública. Introducen tres primitivas de clave pública:
    1.- Esquemas de cifrado de clave pública.
    2.- Esquemas de firma digital.
    3.- Protocolos de intercambio de claves.

    El protocolo de cifrado Diffie-Hellman es un sistema de intercambio de claves entre partes, que no han contactado previamente, a través de un canal inseguro y sin autenticación. Este protocolo se utiliza principalmente para intercambiar claves simétricas de forma segura para posteriormente pasar a utilizar un cifrado simétrico, menos costoso que el asimétrico. Se parte de la idea de que dos interlocutores pueden generar de forma conjunta una clave sin que esta sea comprometida.
    1. Se escoge un número primo p y un generador g que será coprimo de p. Estos 2 números son públicos.
    2. Escogemos un número a menor que p y calculamos A = g^a mod p. Enviamos A, p y g al otro interlocutor.
    3. El otro interlocutor escoge un número b menor que p y calcula B = g^b mod p. Nos envia B. 
    Ahora, ambos podemos calcular K= g^(a-b) mod p. Para nosotros B^a mod p = K y para nuestro interlocutor A^b mod p =K. Usamos K como clave. 

    Al ser p y g públicos cualquier atacante puede conocerlos. Esto no supone una vulnerabilidad. Aunque el atacante conociera estos dos número y capturase A y B, le resultaría computacionalmente imposible obtener a y/o b y consecuentemente K.


    RSA

    RSA (Rivest, Shamir y Adleman) es un algoritmo de cifrado asimétrico desarrollado en el año 1977.

    Este algoritmo se basa en escoger 2 números primos grandes elegidos de forma aleatoria y mantenidos en secreto. 

    La principal ventaja de este algoritmo desde el punto de vista de seguridad radica en la dificultad a la hora de factorizar números grandes. RSA es seguro hasta la fecha. 

    El algoritmo funciona de la siguiente manera:

    Tenemos un mensaje M. 
    Empleando un protocolo reversible conocido como patrón de relleno convertimos el mensaje M en un número m menor que otro número dado n. 
    Se genera el mensaje cifrado c:
    c = m^e (mod n)
    Se obtiene m descifrando el mensaje cifrado c:
    m = c^d (mod n)

    DSS

    Diseñado para utilizar el algoritmo de firma SHA. DSS modifica el esquema de ElGamal para que mensajes de 160 bits puedan firmarse con 320 bits, pero realizando la computación módulo 512. DSS trabaja con un subgrupo de Z ∗ p de talla 2160. 

    La seguridad se fundamenta en la creencia de que el problema del logaritmo discreto conserva sus propiedades en dicho subgrupo 

    Funciona de la siguiente manera:

    1. Seleccionar q primo tal que 2^159 < q < 2^160.
    2. Sea 0 ≤ t ≤ 8, escoger p primo ( 2^(511+64t) < p < 2^(512+64t) ) tal que q divide (p − 1).
    3. Seleccionar α, generador del único grupo de orden q en Z∗p.
    4. Denotamos el resumen del mensaje con x′.
    5. Sea a un número aleatorio y β = α^a (mod p)
              k = (p, q, α, β, a); kpb = (p, q, α, β); kpr = (a)
    • Generar aleatoriamente h tal que 0 < h < q 
            sigk (x′ , h) = (γ, δ) 
            donde:

      • γ = (α h mod p) mod q 
      • δ = (x ′ − aγ)h −1 mod q
    • verk (γ, δ) = cierto si y sólo si α^h mod p ≡ α^((δ ^−1)(x′)) β^((δ^−1)(γ)) mod p (mod q)

    Curva Elíptica


    La teoría de curvas elípticas sobre cuerpos finitos encuentra aplicaciones en diversas disciplinas, como por ejemplo la teoría de números o la criptografía. 

    En el campo de la criptografía, la aplicación de estas curvas la podemos encontrar en la descomposición de un número en factores, en los sistemas criptográficos y en los tests de primalidad, estos últimos desarrollados por Bosma, Goldwasser-Killian, Atkin y Lenstra entre otros.

    Los criptosistemas de curva elíptica (ECC) fueron inventados por Neal Koblitz y Victor Miller in 1985.

    Funcionan de la siguiente manera:
    • Generación de claves:

      1. Se establece un primo p y una curva elíptica y^2 = x^3 + ax + b sobre Zp. 
      2. Se establece un elemento G de la curva, de orden primo q de longitud similar a p. 
      3. Se elige aleatoriamente un entero d ∈ [0, q − 1] y se calcula P = dG. 
      4. La clave pública es P y los valores (a, b, q, G) son todos públicos. 
      5. La clave privada es d. 
    Nótese que sobre el entero d no hay más restricción que el rango [0,q-1], al contrario que en RSA, que debía de ser primo. Este es principalmente el motivo por el cual la generación de claves es más rápida en curvas elípticas.

    • Intercambio de claves (ECDH): Elliptic curve Diffie–Hellman es un protocolo de intercambio de claves que permite a dos individuos que disponen de una clave pública y otra privada, establecer un secreto compartido. Este secreto puede ser directamente usado como clave o para derivar una clave. En particular, es una variante del protocolo Diffie–Hellman (DH) usando curvas elípticas. Los pasos son: 
      1. Tanto el emisor A como el receptor B acuerdan una curva elíptica E sobre un cuerpo finito Zp suficientemente segura y acuerdan un punto G ∈ E(Zp) tal que el subgrupo generado por G sea de un orden grande. 
      2. A elige un entero aleatorio a y envía PA = aG. 
      3. B elige un entero aleatorio b y envía PB = bG
      4. A calcula aPB = abG
      5. B calcula bPA = abG.
      6. Finalmente se tiene que la coordenada x de abG es el secreto compartido.
    La seguridad de este secreto radica en la dificultad de resolver el problema del logaritmo discreto, es decir, conociendo G, aG y bG ∈ E(Zp), calcular abG. Para ello, p debe ser suficientemente grande.
    •  Cifrado y descifrado:
    ECIES (Elliptic curve integration scheme) fue creado por Bellare y Rogaway y propuesto como estándar por Victor Shoup en el año 2001. ECIES combina un mecanismo de encapsulación de la clave (KEM) con un mecanismo de encapsulación de los datos (DEM). El sistema saca por separado una clave para cifrar y una clave MAC a partir de un secreto compartido. Primero, los datos se encriptan sim´etricamente, y después el texto cifrado se autentica con el MAC. Por último, el secreto común se encripta usando el par de claves pública/privada. La salida de la función de cifrado es la tupla {K, C, T}, donde K es el secreto compartido cifrado, C es el texto cifrado y T es la etiqueta de autenticaci´on. 

    Por tanto, ECIES necesita dos funciones hash H1, H2 y una función de cifrado simétrico Ek (dependiente de la clave k).

    Funciona de la siguiente manera:
    1. A elige un entero aleatorio k, 1 ≤ k ≤ N − 1, donde N es el orden del punto G que mencionamos anteriormente.
    2. A calcula R = kG y Z = kKpubB. 
    3. A escribe la salida de H1(R, Z) como dos cadenas k1, k2 concatenadas de longitudes espeíıficas. 
    4. A calcula C = Ek1 (m) y t = H2(C, k2). 
    5. A envía el texto cifrado (R, C, t) a B. 
    Y para descifrar, B deberá hacer: 
    1. B calcula Z = KprivBR. 
    2. B calcula H1(R, Z) y escribe la salida como k1||k2. 
    3. B calcula H2(C, k2). Si no es igual a t, B para y rechaza el descifrado. Y si es igual a t, continúa. 
    4. B calcula m = Dk1 (C), donde Dk1 es la función de descifrado para Ek1. 

    Conclusiones

    Hoy en día, es imposible asegurar la invulnerabilidad de cualquier algoritmo, pero mediante la implementación de más de uno es posible mantener nuestros sistemas libres de ataques y por tanto lograr el mayor grado de seguridad.
    Lo ideal, como ya se mencionó, es utilizar un algoritmo de clave pública para el intercambio de la clave privada de un algoritmo simétrico, de esta manera el sistema de cifrado será eficiente y el intercambio de la clave estará protegido.
    Como sea, es importante recalcar que a cada momento se dan avances en el campo de la criptografía y el criptoanálisis y por esto mismo hay que estar actualizados en cuanto a los mecanismos de cifrado que se consideran seguros en la actualidad.

    Referencias
    • UNAM. (Octubre 22, 2017). Definiciones e historia de la seguridad informática . Obtenido de http://www.ptolomeo.unam.mx:8080/jspui/bitstream/132.248.52.100/217/4/A4.pdf
    • Stallings, W. (2004). Fundamentos de Seguridad en Redes: Aplicaciones y Estándares. España: PEARSON EDUCACIÓN, S.A.
    • Luna, C. y Morrillo, P. (2009) Aplicaciones de las curvas elípticas a la criptografía. (Octubre 22, 2017). Obtenido de: http://divulgamat2.ehu.es/divulgamat15/index.php?option=com_content&task=view&id=9874&Itemid=67&showall=1
    • Matheu, S. (2015). Trabajo de fin de grado. Octubre 22, 2017, de Universidad de Murcia. Sitio web: http://www.um.es/documents/118351/1884002/TFG_MATHEU+GARCIA.pdf/0f3f6eb9-5ef7-4483-b41f-525bf7ef1160

    viernes, 13 de octubre de 2017

    Sockets

    Sockets

    Introducción

    En 1977 la Organización Internacional de Estandarización (Internacional Standards Organization, ISO) estableció un subcomité encargado de diseñar una arquitectura de comunicación y el resultado fue el modelo de referencia para la Interconexión de Sistemas Abiertos OSI (Open Systems Interconection), el cual define una arquitectura de comunicación estructurada en siete niveles.

    Existen dos protocolos fundamentales en el nivel de transporte de la arquitectura de red: el protocolo de datagrama de usuario (UDP, User Datagram Protocol) y el protocolo de control de transmisión (TCP, Transmission Control Protocol).

    TCP está orientado a conexión y transporta un flujo de datos sobre una conexión lógica establecida entre el emisor y el receptor, mientras que UDP permite que un paquete se transporte utilizando comunicaciones sin conexión.

    La Interfaz Socket es una API para redes TCP/IP que se compone de funciones o rutinas. Originalmente se construyó a principios de los 80 para el sistema operativo UNIX , aunque hoy en día también la utilizan otros sistemas operativos como Microsoft Windows, Mac, OS2, etc.

    El API de sockets de Java, como el resto de interfaces de programación de sockets, proporciona construcciones de programación de sockets que hacen uso tanto del protocolo UDP como TCP.

    Sockets

    Los sockets son la interfaz más difundida que hay para la comunicación de procesos. Socket designa un concepto abstracto por el cual dos programas pueden intercambiarse cualquier flujo de datos, el socket no es más que un "canal de comunicación" entre dos programas que corren sobre ordenadores distintos o incluso en el mismo ordenador.

    Un socket se caracteriza por tres atributos:

  • Dominio: Especifica el medio de comunicación de la red que el socket utilizará.
  • Protocolo: Especifica qué protocolo se va a usar.
  • Tipo: Los protocolos de internet proveen dos niveles distintos de servicio : flujo y datagramas.
  • ¿Qué define a un socket?

    Para que dos programas puedan comunicarse entre sí es necesario que un programa sea capaz de localizar al otro, y además, que ambos programas sean capaces de intercambiarse cualquier secuencia de octetos, para ello son necesarios los tres recursos que originan el concepto de socket, y gracias a los cuales éste queda definido:

  • Un protocolo de comunicaciones, que permite el intercambio de octetos.
  • Una dirección del Protocolo de Red, que identifica una computadora.
  • Un número de puerto, que identifica a un programa dentro de una computadora.
  • Tipos de Sockets

    Sockets Stream: Son los más utilizados, hacen uso del protocolo TCP, el cual nos provee un flujo de datos bidireccional, secuenciado, sin duplicación de paquetes y libre de errores.

    Sockets Datagram: Hacen uso del protocolo UDP, el cual nos provee un flujo de datos bidireccional, pero los paquetes pueden llegar fuera de secuencia, pueden no llegar o contener errores. Por lo tanto el proceso que recibe los datos debe comprobar la secuencia, eliminar duplicados y asegurar la integridad. Se llaman también “sockets sin conexión”, porque no hay que mantener una conexión activa, como en el caso de sockets stream. Son utilizados para transferencia de información paquete por paquete.

    ¿Cómo se da la comunicación?

    Las aplicaciones desarrolladas en Sockets están basadas en la arquitectura Cliente-Servidor.

    Normalmente, un servidor se ejecuta en una máquina específica y tiene un socket asociado a un número de puerto específico. El servidor simplemente espera a la escucha en el socket a que un cliente se conecte con una petición. El cliente conoce el nombre de la máquina sobre la que está ejecutándose el servidor y el número de puerto al que está conectado. Solicitar una conexión consiste en intentar establecer una cita con el servidor en el puerto de la máquina servidora.

    Si todo va bien, el servidor acepta la conexión, pero antes crea un nuevo socket en un puerto diferente. Es necesario crear un nuevo socket (y consecuentemente un número de puerto diferente) de forma que en el socket original se continúe a la escucha de las peticiones de nuevos clientes mientras se atiende a las necesidades del cliente conectado.

    En el cliente, si se acepta la conexión, el socket se crea satisfactoriamente y se puede utilizar para comunicarse con el servidor.

    ¿Cómo se utilizan los sockets?

    En Java, el API de sockets datagrama proporciona dos clases:

    1. La clase DatagramSocket para los sockets.
    2. La clase DatagramPacket para los datagramas intercambiados.

    Proceso emisor:

    Un proceso que quiera mandar o recibir datos utilizando esta API debe instanciar un objeto DatagramSocket, o un socket para abreviar.

    Para mandar un datagrama a otro proceso, un proceso debe crear un objeto que representa el datagrama en sí mismo. Este objeto puede crearse instanciando un objeto DatagramPacket que englobe (1) una referencia a un vector de octetos que contenga los datos de la carga, y (2) la dirección de destino (el ID de la máquina y el número de puerto al que el socket del receptor está enlazado). Una vez que se crea el objeto DatagramPacket y en él se incluyen los datos de la carga y del destino, el proceso emisor realiza una llamada al método send del objeto DatagramSocket, especificando una referencia al objeto DatagramPacket como argumento.


    Proceso receptor:

    En el proceso receptor, también se debe instanciar un objeto DatagramSocket y enlazarlo a un puerto local; el número de puerto debe coincidir con el especificado en el paquete datagrama del emisor. Para recibir los datagramas enviados al socket, el proceso crea un objeto DatagramPacket que hace referencia a un vector de octetos y llama a un método receive de su objeto DatagramSocket, especificando como argumento una referencia al objeto DatagramPacket

    DatagramSocket

    Se trata de un servicio de transporte sin conexión. Son más eficientes que TCP, pero no está garantizada la fiabilidad: los datos se envían y reciben en paquetes, cuya entrega no está garantizada; los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envió.

    El protocolo de comunicaciones con datagramas UDP, es un protocolo sin conexión, es decir, cada vez que se envíen datagramas es necesario enviar el descriptor del socket local y la dirección del socket que debe recibir el datagrama. Como se puede ver, hay que enviar datos adicionales cada vez que se realice una comunicación.

    public class java.net.DatagramSocket extends java.lang.Object
    1. Constructores:
      • public DatagramSocket () throws SocketException.
        Se encarga de construir un socket para datagramas y de conectarlo al primer puerto disponible.
      • public DatagramSocket (int port) throws SocketException.
        Ídem, pero con la salvedad de que permite especificar el número de puerto asociado.
      • public DatagramSocket (int port, InetAddress ip) throws SocketException.
        Permite especificar, además del puerto, la dirección local a la que se va a asociar el socket.
    2. Métodos:
      • public void close().
        Cierra el socket.
      • protected void finalize().
        Asegura el cierre del socket si no existen más referencias al mismo.
      • public int getLocalPort().
        Retorna el número de puerto en el host local al que está conectado el socket.
      • public void receive (DatagramPacket p) throws IOException.
        Recibe un DatagramPacket del socket, y llena el búfer con los datos que recibe.
      • public void send (DatagramPacket p) throws IOException.
        Envía un DatagramPacket a través del socket.

    DatagramPacket

    Un DatagramSocket envía y recibe los paquetes y un DatagramPacket contiene la información relevante. Cuando se desea recibir un datagrama, éste deberá almacenarse bien en un búfer o un array de bytes. Y cuando preparamos un datagrama para ser enviado, el DatagramPacket no sólo debe tener la información, sino que además debe tener la dirección IP y el puerto de destino, que puede coincidir con un puerto TCP.

    public final class java.net.DatagramPacket extends java.lang.Object
    1. Constructores:
      • public DatagramPacket(byte ibuf[], int ilength).
        Implementa un DatagramPacket para la recepción de paquetes de longitud ilength, siendo el valor de este parámetro menor o igual que ibuf.length.
      • public DatagramPacket(byte ibuf[], int ilength, InetAddress iaddr, int iport).
        Implementa un DatagramPacket para el envío de paquetes de longitud ilength al número de puerto especificado en el parámetro iport, del host especificado en la dirección de destino que se le pasa por medio del parámetro iaddr.
    2. Métodos:
      • public InetAddress getAddress ().
        Retorna la dirección IP del host al cual se le envía el datagrama o del que el datagrama se recibió.
      • public byte[] getData().
        Retorna los datos a recibir o a enviar.
      • public int getLength().
        Retorna la longitud de los datos a enviar o a recibir.
      • public int getPort().
        Retorna el número de puerto de la máquina remota a la que se le va a enviar el datagrama o del que se recibió.

    Conclusión

    Los sockets constituyen una herramienta extremadamente útil para la comunicación en un sistema distribuido, ya que su implementación es sencilla y eficiente. Sin embargo, el tipo de socket más utilizado actualmente es el orientado a conexión, ya que presenta mayores ventajas de seguridad e integridad de la información.

    En el futuro, la manera de comunicar un sistema distribuido probablemente se volverá cada vez más eficiente y sencilla, dejando a los sockets no orientados a conexión obsoletos.

    Referencias

  • Hoyo, J. L. (2017). TELECONTROL DE CÁMARA IP MEDIANTE SENSORES INALÁMBRICOS BLUETOOTH. Octubre 15, 2017, de Universidad de Sevilla Sitio web: http://bibing.us.es/proyectos/abreproy/11823/direccion/Volumen+I%252F
  • Liu, M. L. (2004). Computación Distribuida: Fundamentos y Aplicaciones. Madrid: PEARSON EDUCACIÓN, S.A.
  • Coulouris, G. (2001). Sistemas Distribuidos: conceptos y diseño. España: Pearson Educación.
  • sábado, 9 de septiembre de 2017

    Cifrado

    Cifrado

    Introducción

    Desde el siglo V a.C. ha existido la criptografía, dada la necesidad de proteger datos de suma importancia, normalmente con fines militares, sin embargo, en la antigüedad los métodos de cifrado iban desde enrollar un papel al escribir en él para hacerlo ilegible hasta la sustitución monoalfabética.
    Hoy en día los métodos son diferentes, y es que durante la Segunda Guerra Mundial la criptografía tuvo un avance inimaginable, tanto en la parte del cifrado como en el descifrado de mensajes.
    La criptografía es importante, ya no sólo para usos militares, sino que actualmente, gracias al avance en las tecnologías, debido a que existe un inmenso intercambio de datos muchas veces importantes, es necesario que haya algo para protegerlos, para eso se han desarrollado diversos algoritmos de cifrado, todos con el fin de garantizar la seguridad de la información que viaja de un lugar a otro.

    Cifrado

    Cifrar o encriptar datos significa alterarlos, generalmente mediante el uso de una clave, de modo que no sean legibles para quienes no posean dicha clave. Luego, a través del proceso de descifrado, aquellos que sí poseen la clave podrán utilizarla para obtener la información original.

    Cifrado Simétrico

  • Emplea la misma clave para cifrar y descifrar.
  • La clave debe permanecer secreta (privada).
  • Hay que transmitir la clave de forma segura.
  • Hay que transmitir la clave de forma segura.
  • Cifrado Asimétrico

    Este tipo de criptografía conocida también como la criptografía de clave pública es un método que usa dos claves para el envío de datos.
  • Una persona genera dos claves relacionadas, una pública y otra privada. La clave publica esta a disposición de todo el mundo, sin embargo la clave privada es la que sólo tiene que tener la persona en cuestión y nadie más tiene que tener acceso a ella.
  • El remitente usa la clave pública del destinatario para cifrar el mensaje, y una vez cifrado, sólo la clave privada del destinatario podrá des cifrar tal mensaje.
  • Cifrado DES

    El algoritmo DES (Data Encryption Standard) es un algoritmo de cifrado desarrollado por la NSA a petición del gobierno de Estados Unidos bajo la presión de las empresas por la necesidad de un método para proteger sus comunicaciones.
    DES es un algoritmo de cifrado por bloques. Se toma un bloque de una longitud fija de bits y lo transforma mediante una serie de operaciones básicas en otro bloque cifrado de la misma longitud. En el caso de DES el tamaño del bloque es de 64 bits. La clave también tiene 64 bits pero 8 de estos bits se emplean para comprobar la paridad, haciendo que la longitud efectiva de la clave sea de 56 bits.
    DES se compone de 16 fases o rondas idénticas. Al comienzo y al final se realiza una permutación. Estas permutaciones no son significativas a nivel criptográfico, pues se incluyeron para facilitar la carga y descarga de los bloques en el hardware de los años 70. Antes de cada ronda el bloque se divide en dos mitades de 32 bits y se procesan alternativamente. Este proceso es conocido como esquema Feistel.
    DES fue escogido como FIPS (Federal Information Processing Standard) en el año 1976 y su uso se extendió por todo el mundo. Hoy en día DES es considerado inseguro dada su clave de 56 bits, insuficiente frente al poder computacional actual. En su variante Triple DES el algoritmo se cree seguro.

    Conclusión

    Actualmente la información es lo más importante, y se busca protegerla a toda costa, por esa razón existen tantos y tan complicados algoritmos de cifrado, sin embargo no existe ni existirá uno que sea totalmente infalible, ya que la criptografía seguirá avanzando. A pesar de eso, es importante proteger los datos de la mejor manera posible, incluso sabiendo que siempre habrá una forma de vulnerar la seguridad.

    Referencias

  • Redes

    Redes

    Introducción

    Hacia 1960 sólo se contaba con computadores aislados y el reto era lograr conectar dos equipos remotos para que pudieran compartir información, ésto con propósitos militares en el Departamento de Defensa de Estados Unidos, por esta razón las redes tuvieron un gran impulso durante el desarrollo del proyecto ARPAnet.

    Redes Informáticas

    Una red de computadoras es un conjunto equipos, conectados por medio de cables, señales, ondas o cualquier otro método de transporte de datos, para compartir información, recursos y servicios.

    Tipos de Redes según su cobertura

    PAN (Red de Área Personal): Es una red de ordenadores usada para la comunicación entre los dispositivos cerca de una persona. El alcance de una PAN es de sólo algunos metros.

    LAN (Red de Área Local): Permite conectar ordenadores, impresoras, escáneres, fotocopiadoras y otros muchos periféricos entre sí para poder intercambiar datos y órdenes. Pueden abarcar desde los 200 metros hasta 1 kilómetro de cobertura. Su conexión se suele realizar mediante cables.

    MAN (Red de Área Metropolitana): Esta red conecta las redes de dos o más locales pero no se extiende más allá de los límites de la una ciudad.

    WAN (Red de Área Amplia): Una red de este tipo engloba grupos de redes distribuidas desde un país hasta un continente. Dado que soporta un número muy elevado de usuarios y servicios, necesitan las conexiones más potentes, como las de fibra óptica y las de radio.

    Topologías

    Bus

    Todos los ordenadores se unen a un mismo cable y a todos les llega la misma información al compartir el mismo canal de comunicación (bus).

    Son redes fáciles de instalar, pero tienen como inconveniente que en el caso de que se rompa el conductor o canal por cualquier punto, la red queda fuera de servicio y, por tanto, la información.

    Permite que todos los dispositivos de la red puedan ver todas las señales de todos los demás dispositivos. Esto puede representar una desventaja, ya que es común que se produzcan problemas de tráfico y colisiones.

    Es la topología más común en pequeñas LAN, con hub o switch final en uno de los extremos.

    Anillo

    Topología de red en la que las estaciones se conectan formando un anillo. Cada estación está conectada a la siguiente y la última está conectada a la primera, además cada estación tiene un receptor y un transmisor que hace la función de repetidor, pasando la señal a la siguiente estación del anillo.

    Estrella

    En este caso todos los ordenadores se conectan en un punto común denominado hub. Este sistema implica que todas las transmisiones deben pasar a través del nodo, por lo que esta topología suele ser más lenta al ser el nodo el que se encarga de gestionar toda la red, y es su punto más débil.

    La ventaja que presenta el sistema es que en el caso de que un conductor se rompa, sólo se ve afectado un terminal.

    Malla

    La Red en malla es una topología de red en la que cada nodo está conectado a uno o más de los otros nodos. De esta manera es posible llevar los mensajes de un nodo a otro por diferentes caminos

    Si la red de malla está completamente conectada no puede existir ninguna interrupción en las comunicaciones. Cada servidor tiene sus propias conexiones con todos los demás servidores.

    Componentes de Red

    Tarjeta de Red

    Permiten conectar el cableado entre servidores y estaciones de trabajo.

    Las placas contienen los protocolos y órdenes necesarios para soportar el tipo de red al que está destinada. Muchas tienen memoria adicional para almacenar temporalmente los paquetes de datos enviados y recibidos, mejorando el rendimiento de la red.

    Servidor

    Es una computadora utilizada para gestionar el sistema de archivos de la red, da servicio a las impresoras, controla las comunicaciones y realiza otras funciones.

    Sistema Operativo de Red

    Es un sistema operativo de computadora que está diseñado principalmente para soportar estaciones de trabajo, computadoras personales y, en algunos casos, terminales más antiguas que están conectadas en una red de área local (LAN).

    Cableado

    Los tipos de cableado de red más populares son: par trenzado, cable coaxial y fibra óptica. Además se pueden realizar conexiones a través de radio o microondas.

    Cada tipo de cable o método tiene sus ventajas. y desventajas. Algunos son propensos a interferencias, mientras otros no pueden usarse por razones de seguridad.

    Conclusión

    El desarrollo de las redes de comunicación se volvió muy necesario a partir de que comenzaron a surgir los ordenadores, pues la existencia de las éstas potencia enormemente las capacidades y utilidades de un ordenador.

    Incluso antes, cuando se crearon con fines militares, surgió la idea de que dos equipos podían comunicarse para trabajar en conjunto y no sólo para compartir información. De esta manera vemos cómo todo está relacionado, ya que anteriormente hablábamos de sistemas distribuidos y estos no serían posibles sin la existencia de las redes informáticas, las que a su vez no serían compatibles sin la existencia de protocolos.

    Referencias

  • Schwartz, M. (1994). Redes de telecomunicaciones: Protocolos, modelado y análisis. Wilmington, Delaware, E.U.A: McGraw-Hill.
  • Tanenbaum, Andrew S. (1994). Redes de ordenadores. México : Prentice-Hall Hispanoamericana.
  • Sandoval Castelán, E. (2011). Topologías de Red. Septiembre 9, 2017, de Universidad Autónoma del Estado de Hidalgo Sitio web: https://www.uaeh.edu.mx/docencia/P_Presentaciones/huejutla/sistemas/redes/topologias.pdf
  • Modelo OSI y TCP/IP

    Modelo OSI y TCP/IP

    Introducción

    El modelo OSI surgió en 1984 como una medida de normalización necesaria para la comunicación entre distintas redes. Debido a las diferencias de hardware y software de cada red, la interoperabilidad entre ellas se hacía imposible y la Organización Internacional para la Estandarización (ISO) se dio a la tarea de desarrollar un modelo de red que sirviera como marco para los desarrolladores de redes.

    Por otro lado, el Protocolo de Internet (IP) y el Protocolo de Transmisión (TCP), fueron desarrollados en 1973 como parte de un proyecto del Departamento Estadounidense de Defensa y a mediados de los 90 TCP/IP se convirtió en el protocolo universal, puesto que en éste está basado Internet.

    Modelo OSI

    La propuesta de ISO define las diferentes fases por las que deben pasar los datos para viajar de un dispositivo a otro sobre una red de comunicaciones en 7 "capas".

    7. Aplicación

    Esta capa proporciona la interfaz y servicios que soportan las aplicaciones de usuario, también se ocupa de ofrecer acceso general a la red.

    Es la capa más cercana al usuario y se caracteriza porque no proporciona servicios a ninguna otra capa, solamente a aplicaciones que se encuentran fuera del modelo. Esta capa establece la disponibilidad de los potenciales socios de comunicación, sincroniza y establece acuerdos sobre los procedimientos de recuperación de errores y control de la integridad de los datos.

    6. Presentación

    El objetivo es encargarse de la representación de la información, de manera que aunque distintos equipos puedan tener diferentes representaciones internas de caracteres los datos lleguen de manera reconocible.

    En ella se tratan aspectos tales como la semántica y la sintaxis de los datos transmitidos, también permite cifrar los datos y comprimirlos. De ser necesario, traduce entre varios formatos de datos utilizando un formato común.

    5. Sesión

    La capa de sesión proporciona sus servicios a la capa de presentación. El servicio provisto es la capacidad de asegurar que, dada una sesión establecida entre dos máquinas, la misma se pueda efectuar para las operaciones definidas de principio a fin, reanudándolas en caso de interrupción, es decir sincroniza el diálogo entre las capas de presentación de los dos hosts y administra su intercambio de datos. Además de regular la sesión, la capa de sesión ofrece disposiciones para una eficiente transferencia de datos, clase de servicio y un registro de excepciones acerca de los problemas de la capa de sesión, presentación y aplicación.

    4. Transporte

    La capa de transporte segmenta los datos originados en el host emisor y los reensambla en una corriente de datos dentro del sistema del host receptor. También se encarga de controlar el flujo de datos entre los nodos que establecen la comunicación.

    3. Red

    El objetivo de la capa de red es hacer que los datos lleguen desde el origen al destino, por lo tanto se encarga del enrutamiento y direccionamiento lógico de los paquetes. Los dispositivos que facilitan tal tarea se denominan encaminadores o routers. Los firewalls también actúan sobre esta capa, principalmente para descartar direcciones de máquinas.

    2. Enlace de datos

    La capa de enlace de datos proporciona tránsito de datos confiable a través de un enlace físico. Al hacerlo, la capa de enlace de datos se ocupa del direccionamiento físico, la topología de red, el acceso a la red, la notificación de errores, entrega ordenada de tramas y control de flujo. El dispositivo que usa la capa de enlace es el Switch, que se encarga de recibir los datos del router y enviar cada uno de estos a sus respectivos destinatarios

    1. Física

    Comunica directamente con el medio de comunicación; se ocupa de enviar y recibir bits, para ello define las especificaciones eléctricas, mecánicas, de procedimiento y funcionales para activar, mantener y desactivar el enlace físico entre sistemas finales. Las características tales como niveles de voltaje, temporización de cambios de voltaje, velocidad de datos físicos, distancias de transmisión máximas, conectores físicos y otros atributos similares son definidos por las especificaciones de la capa física.

    Modelo TCP/IP

    Aunque el modelo de referencia OSI sea universalmente reconocido, el estándar abierto de Internet desde el punto de vista histórico y técnico es el Protocolo de control de transmisión/Protocolo Internet (TCP/IP). El modelo de referencia TCP/IP hace que sea posible la comunicación entre dos computadores desde cualquier parte del mundo.

    La propuesta del Departamento de Defensa contiene sólo 4 capas:

    4. Aplicación

    La capa de aplicación define las aplicaciones de red y los servicios de Internet estándar que puede utilizar un usuario. En ésta se condensan las funciones de las capas de aplicación, presentación y sesión del modelo OSI.

    3. Transporte

    La capa de transporte se refiere a los aspectos de calidad del servicio con respecto a la confiabilidad, el control de flujo y la corrección de errores. Uno de sus protocolos, el protocolo para el control de la transmisión (TCP), ofrece maneras flexibles y de alta calidad para crear comunicaciones de red confiables, sin problemas de flujo y con un nivel de error bajo.

    TCP es un protocolo orientado a la conexión. Mantiene un diálogo entre el origen y el destino mientras empaqueta la información de la capa de aplicación en unidades denominadas segmentos. Orientado a la conexión significa que los segmentos de Capa 4 viajan de un lado a otro entre dos hosts para comprobar que la conexión exista lógicamente para un determinado período, lo cual se conoce como conmutación de paquetes.

    Los protocolos de capa de transporte de este nivel son el Protocolo de control de transmisión (TCP), el Protocolo de datagramas de usuario (UDP) y el Protocolo de transmisión para el control de flujo (SCTP).

    2. Internet

    También conocida como capa de red o capa IP, acepta y transfiere paquetes para la red, su propósito de esta capa es enviar paquetes origen desde cualquier red en la internetwork y que estos paquetes lleguen a su destino independientemente de la ruta y de las redes que recorrieron para llegar hasta allí. El protocolo específico que rige esta capa se denomina Protocolo Internet (IP). En esta capa se produce la determinación de la mejor ruta y la conmutación de paquetes.

    1. Acceso a la red

    También se denomina capa de host a red. Es la capa que se ocupa de todos los aspectos que requiere un paquete IP para realizar realmente un enlace físico y luego realizar otro enlace físico. Esta capa incluye los detalles de tecnología LAN y WAN y todos los detalles de las capas física y de enlace de datos del modelo OSI. Dentro de la capa de acceso a red opera el protocolo ARP (Address Resolution Protocol), que se encarga de asociar direcciones IP con direcciones físicas Ethernet.

    Conclusión

    A pesar de que es el modelo TCP/IP el que se usa actualmente, el modelo OSI sigue siendo un estándar mundial y su importancia radica en lo detallado de su diseño, además es muy útil en el diagnóstico de fallas y para el aprendizaje de la dinámica de la comunicación entre redes, ya que es el modelo teórico aceptado. Por lo tanto, incluso ahora no existe una opinión general sobre el modelo que debe usarse y ambos son útiles en distintas situaciones.

    Referencias

  • Estrada, A. (2004, septiembre 10). Protocolos TCP/IP de Internet. Revista Digital Universitaria, 4, -.
  • Rigotti, G. (2017). El modelo OSI. septiembre 09, 2017, de Universidad Nacional del Centro de la Provincia de Buenos Aires Sitio web: http://www.exa.unicen.edu.ar/catedras/comdat1/material/ElmodeloOSI.pdf
  • CCM. (septiembre de 2017). Obtenido de TCP/IP: http://es.ccm.net/contents/282-tcp-ipel-modelo-tcp-ip
  • sábado, 19 de agosto de 2017

    Esquema Cliente - Servidor

    Esquema Cliente-Servidor

    Introducción

    El principal motivo de la evolución tecnológica que se ha dado en las últimas décadas es la necesidad de realizar los procesos de manera más ágil y eficiente, debido a la creciente presión y competencia entre los desarrolladores. En el contexto de la infraestructura de procesamiento de la información, las organizaciones requerían de una que pudiera proveer información adecuada, exacta y oportuna y proporcionar un mejor servicio a los clientes.

    El modelo Cliente/Servidor reúne las características necesarias para proveer esta infraestructura, independientemente del tamaño y complejidad de las operaciones de las organizaciones y, consecuentemente desempeña un papel importante en este proceso de evolución.

    Esquema Cliente-Servidor

    Este modelo empezó a ser aceptado a finales de los 80’s. Su funcionamiento se basa en que se tiene una máquina cliente, que requiere un servicio de una máquina servidor, y éste realiza la función para la que está programado. Una computadora por sí sola puede ser ambos, cliente y servidor, dependiendo del software de configuración; sin embargo, desde el punto de vista lógico, el cliente y el servidor son dos objetos separados que se comunican a través de una red de comunicaciones.

    Características

    Protocolos asimétricos: se refiere a que hay una relación muchos a uno entre los clientes y un servidor. Los Clientes siempre inician un diálogo mediante la solicitud de un servicio y los Servidores esperan pasivamente por las solicitudes de los clientes.

    Encapsulación de servicios: El servidor es un especialista, cuando se le entrega un mensaje solicitando un servicio, él determina cómo conseguir hacer el trabajo. Los servidores se pueden actualizar sin afectar a los clientes en tanto que la interfaz pública de mensajes que se utilice por ambos lados, permanezca sin cambiar.

    Integridad: El código y los datos de un servidor se mantienen centralizados, lo que origina que el mantenimiento sea más barato y la protección de la integridad de datos compartidos. Al mismo tiempo, los clientes mantienen su independencia

    Transparencia de localización: El software cliente/servidor (midleware) habitualmente oculta la localización de un servidor a los clientes mediante la redirección de servicios. Un programa puede actuar tanto como cliente, como servidor o como cliente y servidor simultáneamente.

    Intercambios basados en mensajes: Los clientes y servidores son procesos débilmente acoplados que pueden intercambiar solicitudes de servicios y respuestas utilizando mensajes.

    Modularidad: Diseño extensible: el diseño modular de una aplicación cliente/servidor permite que la aplicación sea tolerante a fallos.

    Independencia de la plataforma: El software cliente/servidor “ideal” es independiente del hardware o sistemas operativos, permitiendo al programador mezclar plataformas de clientes y servidores.

    Código reutilizable: La implementación de un servicio puede utilizarse en varios servidores.

    Recusos compartidos: Un servidor puede proporcionar servicios a muchos clientes al mismo tiempo, y regular el acceso de éstos a un conjunto de recursos compartidos

    Arquitectura

    La arquitectura C/S es una forma de dividir y especializar programas y equipos de cómputo de forma que la tarea que cada uno de ellos realiza se efectúa con la mayor eficiencia posible y permita simplificar las actualizaciones y mantenimiento del sistema, lo que en computación distribuida afecta directamente el tráfico de la red, reduciéndolo grandemente.

    2 niveles

    Cliente: El cliente es el proceso que permite al usuario formular los requerimientos y pasarlos al servidor, se le conoce con el término front-end. Normalmente maneja todas las funciones relacionadas con la manipulación y despliegue de datos, por lo que están desarrollados sobre plataformas que permiten construir interfaces gráficas de usuario, además de acceder a los servicios distribuidos en cualquier parte de una red.

    Servidor: Es el proceso encargado de atender a múltiples clientes que hacen peticiones de algún recurso administrado por él. Al proceso servidor se le conoce con el término back-end. Normalmente maneja todas las funciones relacionadas con los recursos de datos.

  • Lógica de la aplicación integrada.
  • 3 niveles

    Cliente.

    Servidor (servidor de datos).

    Middleware (servidor de aplicaciones): Es el módulo intermedio que actúa como conductor entre sistemas permitiendo a cualquier usuario comunicarse con varias fuentes de información que se encuentran conectadas en una red; es el intermediario entre el cliente y servidor que se ejecuta en ambas partes.

  • Lógica de la aplicación localizada en el nivel del medio, separada.
  • Las aplicaciones al nivel del servidor son descentralizadas de uno a otro, es decir, cada servidor se especializa en una determinada tarea.
  • Permite mayor grado de flexibilidad, mayor seguridad y mejor rendimiento con respecto a la arquitectura en 2 niveles.
  • Multinivel

  • El nivel medio se divide en distintos niveles.
  • Permite mayor flexibilidad y presenta escalabilidad con respecto a los otros modelos.
  • Conclusiones

    El modelo Cliente/Servidor presenta muchas ventajas, sobre todo en la arquitectura multinivel; mientras que sus desventajas se reducen a un costo elevado y la aparente debilidad del servidor, cosa que se contrarresta gracias a la tolerancia a fallas del modelo. Por estas razones, la arquitectura C/S ha adquirido popularidad, siendo ahora la nueva tendencia y superando a los modelos centralizados.

    Referencias

  • Kioskea. (2014). Redes - Arquitectura Cliente/Servidor en 3 niveles. Agosto 20, 2017, de CCM Benchmark Group Sitio web: http://es.ccm.net/contents/147-redes-arquitectura-cliente-servidor-en-3-niveles
  • Díaz, F. (2005). Sistemas Distribuidos. Agosto 20, 2017, de Universidad de Valladolid Sitio web: https://www.infor.uva.es/~fdiaz/sd/2005_06/index20060501.html
  • Márquez, B. & Zulaica J. (2004). Implementación de un reconocedor de voz gratuito a el sistema de ayuda a invidentes Dos-Vox en español. Agosto 20, 2017, de Universidad de las Américas Puebla Sitio web: http://catarina.udlap.mx/u_dl_a/tales/documentos/lis/marquez_a_bm/
  • martes, 15 de agosto de 2017

    Seguridad Informática

    Seguridad informática

    Introducción

    A partir de los años 80 el uso del ordenador personal comienza a hacerse común, iniciando también la preocupación por la integridad de los datos almacenados. En los años 90s comienzan a aparecer los virus y gusanos y se toma conciencia del peligro, para finales de esta década, las amenazas empiezan a generalizarse. Y a partir del año 2000 los a acontecimientos fuerzan a que se tome muy en serio el tema de la seguridad informática.

    En la actualidad la información es el objeto de mayor valor para las empresas. El progreso de la informática y de las redes de comunicación ha derivado en que los objetos del mundo real estén representados por bits y bytes, que no por ser virtuales pierden su valor, e incluso en muchos casos, llegan a tener un valor superior. Por ello la seguridad informática es muy importante ya que afecta directamente a gobiernos, institutos, empresas e individuos.

    Definición de seguridad: “Viene del latín seguritas, se refiere a la cualidad de seguro, es decir, aquello que está exento de peligro, daño o riesgo. Algo seguro es algo cierto. La seguridad por lo tanto es una certeza”.

    Definición de informática: “Es el conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento automático de la información por medio de ordenadores”

    Seguridad informática

    "Conjunto de medidas de prevención, detección y corrección, orientadas a proteger la confidencialidad, la integridad y la disponibilidad de los recursos informáticos"(Pacheco, 2011).

    Amenazas

    Una amenaza representa la acción que tiende a causar un daño a los dispositivos o sistemas en donde se encuentra almacenada la información, atentando contra su confidencialidad, integridad y disponibilidad.

    Servicios de Seguridad

    Servicio de procesamiento o de comunicación proporcionado por un sistema para dar un tipo especial de protección a los recursos del sistema; los servicios de seguridad implementan políticas de seguridad y son implementados, a su vez, por mecanismos de seguridad.

    Clasificación

    Autentificación. La seguridad de que la entidad que se comunica es quien dice ser.

    Control de acceso. Prevención del uso no autorizado de una fuente.

    Confidencialidad de los datos. Capacidad del sistema para evitar que personas no autorizadas puedan acceder a la información almacenada en él.

    Integridad de los datos. Servicio de seguridad que garantiza que la información sea modificada, incluyendo su creación y borrado, sólo por el personal autorizado.

    No repudio. Sirve a los emisores o a los receptores para negar un mensaje transmitido. Por lo que cuando un mensaje es enviado, el receptor puede probar que el mensaje fue enviado por el presunto emisor. De manera similar, cuando un mensaje es recibido, el remitente puede probar que el mensaje fue recibido por el presunto receptor.

    Ataques y Mecanismos de Seguridad

    Mecanismos de Seguridad

    Mecanismo de Seguridad: Es una herramienta que se utiliza para fortalecer la confidencialidad, la integridad y/o la disponibilidad de un sistema informático. Existen muchos y variados. Su selección depende del tipo de sistema, de su función y de los factores de riesgo que lo amenazan.

    Clasificación

    Mecanismos preventivos: Actúan antes de que un hecho ocurra y su función es detener agentes no deseados.

    Mecanismos detectores: Actúan antes de que un hecho ocurra y su función es revelar la presencia de agentes no deseados en algún componente del sistema. Se caracterizan por enviar un aviso y registrar la incidencia.

    Mecanismos correctivos: Actúan luego de ocurrido el hecho y su función es corregir las consecuencias.

    Mecanismos específicos de seguridad

    Pueden ser incorporados en la capa de protocolo adecuada para proporcionar algunos de los servicios de seguridad OSI.

    Cifrado: uso de algoritmos matemáticos para transformar datos de una forma inteligible. La transformación y la posterior recuperación de los datos depende de un algoritmo y cero o más claves de cifrado.

    Firma digital: datos añadidos a, o una transformación criptográfica de, una unidad de datos que permite al receptor verificar la fuente y la integridad de la unidad de datos y protegerla de falsificación por parte del receptor.

    Control de acceso: una serie de mecanismos que refuerzan los derechos de acceso a los recursos.

    Integridad de los datos: una serie de mecanismos empleados para verificar la integridad de una unidad de datos o del flujo de unidades de datos.

    Intercambio de autenticación: mecanismo diseñado para comprobar la identidad de una entidad por medio del intercambio de información.

    Relleno del tráfico: la inserción de bits en espacios en un flujo de datos para frustrar los intentos de análisis de datos.

    Control de enrutamiento: selección de rutas físicamente seguras para determinados datos y cambios de enrutamiento.

    Notorización: uso de una tercera parte confiable para asegurar determinadas propiedades de un intercambio de datos.

    Mecanismos generales de seguridad

    Mecanimos que no son específicos de ninguna capa de protocolo o sistema de seguridad OSI en particular.

    Funcionalidad fiable. La que se considera correcta respecto a algunos criterios.

    Etiquetas de seguridad. La marca asociada a un recurso que designa los atributos de seguridad de ese recurso.

    Detección de acciones. Detección de acciones relacionadas con la seguridad.

    Informe para la auditoría de seguridad. Recopilación de datos para facilitar una auditoría de seguridad, que consiste en una revisión y un examen independientes de los informes y actividades del sistema.

    Recuperación de la seguridad. Maneja las peticiones de los mecanismos y lleva acabo acciones de recuperación.

    Ataques

    Ataque informático: Un asalto a la seguridad del sistema derivado de una amenaza inteligente.

    Clasificación

    Ataques Pasivos: Se dan en forma de escucha o de observación no autorizadas de las transmisiones. El objetivo es obtener información que se esté transmitiendo.

  • Obtención de contenido de mensajes: Se da al vulnerar la seguridad del sistema para obtener información importante
  • Análisis de tráfico: Estos ataques persiguen observar los datos y el tipo de tráfico transmitido a través de redes informáticas, utilizando para ello herramientas como los “sniffers”. Así, se conoce como “eavesdropping” a la interceptación del tráfico que circula por una red de forma pasiva, sin modificar su contenido.
  • Ataques Activos: Estos implican alguna modificación del flujo de datos o la creación de un flujo falso y se pueden dividir en cuatro categorías: suplantación de identidad, repetición, modificación de mensajes e interrupción de servicio.

    1. Suplantación de identidad: se produce cuando una entidad finge ser otra.
      • IP Spoofing (“enmascaramiento de la dirección IP”): en este un atacante consigue modificar la cabecera de los paquetes enviados a un determinado sistema informático para simular que proceden de un equipo distinto al que verdaderamente los ha originado.
      • DNS Spoofing: pretenden provocar un direccionamiento erróneo en los equipos afectados, debido a una traducción errónea de los nombres de dominio a direcciones IP, facilitando de este modo la redirección de los usuarios de los sistemas afectados hacia páginas Web falsas o bien la interceptación de sus mensajes de correo electrónico.
      • SMTP Spoofing: envío de mensajes con remitentes falsos (“masquerading”).
      • Captura de cuentas de usuario y contraseñas.
    2. Repetición: implica la captura pasiva de una unidad de datos y su retransmisión posterior para producir un efecto no autorizado.
    3. Modificación de mensajes: significa que una parte de un mensaje original es alterada, o que los mensajes se han retrasado o reordenado, para producir un efecto no autorizado
    4. Interrupción de servicio: impide el uso o la gestión normal de las utilidades de comunicación
    Ataque Mecanismo
    Obtención de contenido de mensajes
  • Cifrado
  • Integridad de los datos
  • Control de enrutamiento
  • Notorización
  • Análisis de tráfico
  • Relleno de tráfico
  • Suplantación de identidad
  • Firma digital
  • Intercambio de autenticación
  • Repetición de mensajes
  • Cifrado
  • Control de acceso
  • Control de enrutamiento
  • Notorización
  • Modificación de mensajes
  • Cifrado
  • Control de acceso
  • Integridad de los datos
  • Intercambio de autenticación
  • Control de enrutamiento
  • Notorización
  • Interrupción de servicio
  • Control de acceso
  • Conclusión

    A pesar de que no hay ninguna medida que pueda garantizar un ambiente libre de amenazas a la información y a quienes la requieren, es fundamental aplicar todas las medidas de seguridad y adoptar algún modelo de gestión adecuado que permita lograr niveles efectivos de protección.

    Con el desarrollo de la tecnología, siempre habrá una nueva manera de vulnerar los sistemas, por lo que es necesario prevenir tal situación protegiendo la información de la mejor manera posible con los recursos con los que se cuenta actualmente y, posteriormente, desarrollar más.

    Referencias

  • Pacheco, F. & Jara, H. (2011). Hacking desde Cero. Buenos Aires: USERS.
  • Portillo, S. (2012). Historia de la seguridad informatica. agosto 20, 2017, de Prezi Sitio web: https://prezi.com/vnbaj88nuq0p/historia-de-la-seguridad-informatica/
  • Reyes, M. (2011). Propuestas para impulsar la seguridad informática en materia de educación. Agosto 20, 2017, de UNAM Sitio web: http://www.ptolomeo.unam.mx:8080/xmlui/handle/132.248.52.100/217
  • Stallings, W. (2004). Fundamentos de Seguridad en Redes, Aplicaciones y Estándares. España: PEARSON EDUCACIÓN, S.A.
  • miércoles, 9 de agosto de 2017

    Sistemas Distribuidos

    Sistemas Distribuidos

    Introducción

    Los sistemas distribuidos suponen un paso más en la evolución de los sistemas informáticos, entendidos desde el punto de vista de las necesidades que las aplicaciones plantean y las posibilidades que la tecnología ofrece.
    Desde una perspectiva histórica se puede hablar de diferentes modelos que determinan la funcionalidad y la estructura de un sistema de cómputo (Lafuente, 2017), algunos destacables son:
    • Sistemas de lotes: Fueron los primeros sistemas operativos. Permitían procesar en diferido y secuencialmente datos suministrados en paquetes de tarjetas perforadas.
    • Sistemas centralizados de tiempo compartido. Se desarrollaron a mediados de los 60, con el objetivo de incrementar la eficiencia en el uso de la CPU y disminuir los tiempos de respuesta de los usuarios, que ya operaban interactivamente. Los recursos estaban centralizados y se accedía al sistema desde terminales.
    • Sistemas de teleproceso. El sistema central monopoliza la gestión de los recursos y terminales remotos acceden a un sistema central utilizando una infraestructura de red y un protocolo de comunicaciones normalmente de tipo propietario.
    • Sistemas personales. El objetivo de este tipo de sistemas era proporcionar un sistema dedicado para un único usuario, lo que fue posible gracias al desarrollo del microprocesador a comienzos de los 80.
    • Sistemas en red. Cuando el concepto de computador central desaparece, se habla ahora de un conjunto de computadores que se conectan entre sí utilizando una infraestructura de red. Una máquina que proporciona el acceso a un determinado recurso es el servidor de ese recurso. Los clientes, que pueden disponer de recursos locales, acceden a un recurso remoto mediante solicitud al servidor correspondiente. Gracias al desarrollo de protocolos comunes, como TCP/IP, es posible interconectar las máquinas independientemente de sus características y sistema operativo (interoperatividad), extendiendo el ámbito de estos sistemas a redes de área amplia y posibilitando el surgimiento de Internet.

    Sistemas Distribuidos

    La computación distribuida

    Antes de definir lo que es un Sistema Distribuido, debe tenerse una noción de lo que es la computación distribuida.
    El término se utiliza para referirse a cualquier sistema en el que múltiples agentes autónomos, cada uno con capacidades de cómputo individual, se comunican entre sí y afectan mutuamente su comportamiento. Los agentes, usualmente llamados procesadores, procesos o nodos, pueden ser desde computadoras completas hasta autómatas celulares con capacidad de cómputo y memoria muy limitados que se pueden comunicar mediante mensajes. Podemos decir entonces, que la Computación Distribuida se refiere a los servicios que provee un Sistema de Computación Distribuido(Turpo Aroquipa, 2017).

    Definición de Sistema Distribuido

    Para Coulouris un sistema distribuido es aquél que está compuesto por varias computadoras autónomas conectadas mediante una red de comunicaciones y equipadas con programas que les permitan coordinar sus actividades y compartir recursos (Coulouris,2001). Bal ofrece una definición muy similar: "Un sistema de computación distribuida está compuesto por varios procesadores autónomos que no comparten memoria principal, pero cooperan mediante el paso de mensajes sobre una red de comunicaciones".

    Características básicas de los sistemas distribuidos

    Una de las primeras caracterizaciones de un Sistema Distribuido fue realizada por Enslow, en 1978, quien le atribuye las siguientes propiedades:

    1. Está compuesto por varios recursos informáticos de propósito general, tanto físicos como lógicos, que pueden asignarse dinámicamente a tareas concretas.
    2. Estos recursos están distribuidos físicamente, y funcionan gracias a una red de comunicaciones.
    3. Hay un sistema operativo de alto nivel, que unifica e integra el control de los componentes.
    4. El hecho de la distribución es transparente, permitiendo que los servicios puedan ser solicitados especificando simplemente su nombre (no su localización).
    5. El funcionamiento de los recursos físicos y lógicos está caracterizado por una autonomía coordinada.

    A pesar de que la definición de Philip Enslow sigue siendo válida, Jochen Schröder les atribuyó, en 2003, sólo tres características básicas:

  • Existencia de varias computadoras. En general, cada una con su propio procesador, memoria local, subsistema de entrada/salida y quizás incluso memoria persistente.
  • Interconexión. Existen vías que permiten la comunicación entre las computadoras, a través de las cuales pueden transmitir información.
  • Estado compartido. Las computadoras cooperan para mantener algún tipo de estado compartido. El funcionamiento correcto del sistema se describirse como el mantenimiento de una serie de invariantes globales que requiere la coordinación de varias computadoras.
  • Sin embargo, un sistema distribuido cuenta con otras tres características fundamentales que veremos a continuación.

    Ausencia de reloj global

    La sincronización es un punto clave para los sistemas operativos distribuidos. En éstos, hay un reloj por cada ordenador del sistema, con lo que es fundamental una coordinación entre todos los relojes para mostrar una hora única. Los osciladores de cada ordenador son ligeramente diferentes, y como consecuencia todo los relojes sufren un desfase y deben ser sincronizados continuamente. La sincronización no es trivial, porque se realiza a través de mensajes por la red. Cuyo tiempo de envío puede ser variable y depender de muchos factores como la distancia, la velocidad de transmisión y la propia estructura de la red.
    La ausencia de reloj global se refiere a que las coordinaciones para la transferencia de mensajes entre los diferentes componentes para la realización de una tarea, no tienen una temporización general, esta más bien distribuida a los componentes.

    Concurrencia de procesos

    Esta característica de los sistemas distribuidos permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por los usuarios y/o agentes que interactúan en la red.

    Fallos independientes

    Cada componente del sistema puede fallar independientemente, con lo cual los demás pueden continuar ejecutando a sus acciones. Esto permite el logro de las tareas con mayor efectividad, pues el sistema en su conjunto continua trabajando.

    Ejemplos

  • Skype. Un ejemplo de sistema distribuido podría ser esta plataforma de llamadas, ya que permite que más de dos personas se conecten en una videoconferencia, o que distintos usuarios realicen llamadas sin que esto afecte la estabilidad del servidor (concurrencia); los usuarios además pueden estar situados en cualquier ubicación geográfica y contactar con otros en tiempo real, sin necesidad de que las ubicaciones coincidan (ausencia de reloj global); por último, si la conexión de uno de los usuarios falla, esto no repercute en las actividades de ningún otro usuario (fallos independientes).
  • Conclusiones

    En conclusión, a pesar de todas las ventajas que tienen los sistemas distribuidos, implementarlos requiere un mayor conocimiento, ya que son más complejos y se utilizan más herramientas. Sin embargo, con el desarrollo de la tecnología, pronto será más fácil hacer uso de este tipo de sistema. Pero incluso ahora, su correcta implementación representa más ventajas que desventajas y es el sistema más viable en el caso de sistemas comerciales, comunicaciones, juegos multi usuario y otros sistemas que requieran de velocidad y regularidad de transferencia de una gran cantidad de datos.

    Referencias:

  • Alberto Lafuente. (2017). Introducción a los sistemas distribuidos . Agosto, 2017, de Universidad del País Vasco Sitio web: http://www.sc.ehu.es/acwlaroa/SDI/Apuntes/Cap1.pdf
  • Einar Turpo Aroquipa. (2017). Sistemas Distribuidos. Agosto, 2017, de Universidad Nacional del Altiplano Sitio web: http://www.unap.edu.pe/cidiomas/licing/pdf/sd.pdf
  • George Coulouris, Jean Dollimore, Tim Kindberg. (2001). Sistemas Distribuidos: conceptos y diseño. España: Pearson Educación.
  • Sistemas Heredados

    Conclusiones Los sistemas heredados pueden llegar a representar la base de la funcionalidad de una empresa, además de contener informa...