Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Registro de Nicks

Última Actualización: 30 de Septiembre de 1.999 - Jueves

EN OBRAS!!!
Experimental. En pruebas


Registro y Modificación de Nicks

La política de ESNET de cara al registro de nicks es la siguiente:

  • Sólo pueden registrar nicks usuarios con email reconocido. No se admiten direcciones anónimas como "hotbot.com", "usa.net" y similares.

  • Sólo se puede registrar un nick por email.

  • Los nicks no pertenecen a nadie. El primero que lo registra se lo queda. ESNET no realizará tareas de arbitraje en ningún caso.

  • La red se reserva el derecho de registrar nicks por razones administrativas, y de dar de baja cualquier registro de forma unilateral.

  • ESNET comprueba los nicks utilizados. Los nicks registrados que no se usen en un mes se marcan como "en duda" y se le envía un mail automático al usuario. Si pasa otro mes sin usarse el nick, se da de baja.

Todo los registros y modificaciones de nicks se realizan a través de una interfaz web. En todos los casos el sistema enviará al usuario un mensaje electrónico a su buzón informándole de la operación efectuada. El mensaje contiene una cadena codificada que el usuario debe copiar en el formulario web para hacer efectivos los cambios.

  • Alta de un nuevo nick registrado:

    El usuario introduce el nick a registrar y su dirección de email. El sistema comprueba que el nick en cuestión no esté ya registrado y que el email pertenezca a un dominio reconocido como válido. Si es el caso, el sistema imprimirá en pantalla un mensaje de "registro en progreso".

    Unos minutos más tarde el usuario recibirá en su buzón un mensaje confirmándole el registro y proporcionándole una clave. Ese mensaje contendrá una cadena cifrada que el usuario debe introducir en la página web para confirmar el registro y hacerlo efectivo.

  • Cambio de clave:

    Si el usuario sospecha que su clave ha podido ser comprometida o quiere cambiarla con seguridad, lo puede solicitar introduciendo como datos su nick y su clave actual. El sistema valida esos datos. Si son correctos imprimirá en pantalla un mensaje de "Su clave nueva le será remitida por correo electrónico en unos minutos".

    En el mensaje se le indicará la nueva clave y una cadena cifrada que debe introducir en el web para hacer el cambio de forma efectiva.

  • Cambio de email:

    Si el usuario va a cambiar de dirección de correo debe indicarlo al sistema, para que éste pueda localizarlo. Para poder cambiar el email el sistema solicita el nick, la clave y la nueva dirección de correo.

    El sistema enviará un mensaje a la dirección antigua conteniendo una cadena que el usuario debe introducir en la página web para activar los cambios.

  • Baja de un nick:

    Los nicks pueden darse de baja por inactividad, pero si el usuario, por ejemplo, quiere registrar un nuevo nick, tendrá que dar de baja primero el antiguo. Para ello introduce su nick antiguo y su clave.

    El sistema enviará por correo un mensaje al usuario, conteniendo una cadena que debe introducir en el servidor web para procesar la baja definitivamente.

  • Información sobre el usuario:

    Un usuario puede solicitar al sistema toda la información que éste tenga sobre él. Para ello el usuario introduce su nick y su clave.

    El sistema enviará a la dirección de correo electrónico registrada para ese nick, al menos, la siguiente información:

    • Nick
    • E-mail
    • Fecha de alta
    • Fecha de la última conexión
    • IP desde la cual se realizó la última conexión

Para prevenir que una clave capturada sea utilizada para realizar "mailbombing", el sistema impondrá un retardo mínimo de 15 minutos entre peticiones, lo que supone un máximo de 96 mensajes cada 24horas, por cada nick.


Uso

Dado que el Nick está protegido con una clave personal, es necesario indicar dicha clave cuando se desee utilizar. Para ello existen dos posibilidades:

  • Uso del comando "nick":

    El comando "nick", ahora, admite dos parámetros. El primero de ellos es el nick a utilizar, como siempre. El segundo parámetro, opcional, es la clave.

    Algunos clientes de IRC (por ejemplo,el mIRC) sólo transmiten al servidor el primero de los parámetros. Aunque pongamos la clave, entonces, no se nos permitirá utilizar ese nick porque el servidor no llega a verla nunca. Es preciso enviar al servidor el comando sin la manipulación previa de nuestro cliente. Dependiendo de nuestro programa o script, los pasos a seguir son diferentes:

    • mIRC:
      Opción "Tools" -> "Aliases". Escribir "/nick /raw nick *1". De esta forma el mIRC envía todos los parámetros que se indiquen en el "nick".

    • BitchX: (Iván González - igonzalez@inm.net)
      Una vez conectado al servidor de irc (bitchX <nick> <server>), no tendreis vuestro nick dado que no se ha autenticado con password. Una vez conectado hacer:
      /quote nick <tu_nick> <tu_passwd>

      Con esto el nick será autenticado por el server.

      También se puede crear y/o añadir al fichero $HOME/.bitchxrc el comando anterior para más comodidad, pero por cuestiones de seguridad y que nadie pueda leerse el fichero .bitchxrc, no se recomienda.

    • BitchX: (Albert Claret - DjAcE - djace@lnst.es)
      En las últimas versiones del BitchX, no se permite invocar al comando nick desde un quote. Pero el servidor tiene un parche trivial:
      --- BitchX/source/parse.c       Fri Feb 26 20:01:55 1999
      +++ BitchX-fixed/source/parse.c Tue May 25 18:27:32 1999
      @@ -1686,7 +1686,7 @@
       {      "LIST",         NULL,           NULL,           0,              0, 0},
       {      "MODE",         p_mode,         NULL,           0,              0, 0},
       {      "NAMES",        NULL,           NULL,           0,              0, 0},
      -{      "NICK",         p_nick,         NULL,           PROTO_NOQUOTE,  0, 0},
      +{      "NICK",         p_nick,         NULL,           0,              0, 0},
       {      "NOTICE",       parse_notice,   NULL,           0,              0, 0},
       {      "OPER",         NULL,           NULL,           0,              0, 0},
       {      "PART",         p_part,         NULL,           PROTO_DEPREC,   0, 0},
      

    • xchat: (Ignasi Cavero - glog - ignasi@lleida.net)
      #!/usr/bin/perl -w
      
      # Script de autentificación para el irc-hispano.org
      # Cliente IRC X-Chat versiones 0.X, 1.0.X, 1.1.X
      # Fichero: $HOME/.xchat/auth-hispano.pl
      
      
      $mi_nick = "minick";
      $mi_password = "mipassword";
      
      
      IRC::add_message_handler("433", "auth_handler");
      
      
      sub auth_handler
      {
         IRC::send_raw "NICK $mi_nick $mi_password\n";       
         return 1;
      }
      

  • Clave de Conexión:

    La mayoría de los clientes de IRC pemiten especificar una clave para cada una de nuestras conexiones habituales. Normalmente se trata de un campo poco utilizado, ya que hay pocas redes que exijan una clave de conexión. En ESNET se emplean estas claves para autentificar un NICK. Es decir, si ponemos la clave correcta en ese campo de configuración, no tendremos que poner ninguna clave al usar el comando "nick".

    Los pasos a seguir dependen de cada cliente:

    • mIRC:
      "File" -> "Setup" -> "IRC Servers" -> Elegimos nuestra conexión a ESNET -> "Edit". Ponemos la clave en el campo "Password".

    • BitchX: (Adria García - adrian.garcia@chi.es)
      Se puede conectar al servidor tecleando:
      /server <servidor> [puerto] [password]


Seguridad

El esquema propuesto de registro de nicks tiene las siguientes ventajas:

  • Si tu clave es incorrecta, el servidor no te deja ponerte el nick. Directamente. En otras redes, en cambio, existe un proceso que se encarga de comprobar que alguien se ponga un nick registrado, enviándole un mensaje solicitándole la clave, y desconectándolo si no la introduce en un tiempo prefijado.

  • Debido a ello, un usuario puede ponerse un nick registrado durante un tiempo, hasta que se acaba la ventana del proceso "vigilante". En nuestro caso, el propio servidor no te deja ponerte el nick.

  • En situaciones de lag se da el caso de que pueden usarse nicks registrados durante períodos prolongados de tiempo. Asimismo, las personas con nicks registrados de forma legal tendrán problemas para autentificarse, ya que cuando su clave llega al proceso de control, éste ya ha enviado la orden de desconexión.

  • Al tener que comunicarse con un bot o servidor externo, existe el riesgo de que se caiga o haya split, y que algún usuario malintencionado tome su lugar con el objeto de recopilar claves que le permitan ursurpar nicks ajenos. En ese caso no sólo se filtran claves, sino que no hay nada que asegure el uso registrado de los nicks.

  • Por la misma razón, las claves de los usuarios deben atravesar gran cantidad de líneas de datos y servidores hasta llegar al sistema de control. Cualquier vulnerabilidad a lo largo del camino permite que un atacante recopile claves ajenas.

Estos problemas fueron los que motivaron el diseño atípico de ESNET, perfilado en el Libro Blanco de IRC ESNET y definido en Fase 2: Despliegue de la Gestión Distribuída. El sistema de Base de Datos Distribuída implementada para el registro de nicks evita estos problemas asegurándose de que cada nodo verifica los nicks de forma local.

El hecho de difundir entre todos los nodos de la red una base de datos conteniendo nicks y claves supone, no obstante, un riesgo de seguridad importante. El sistema se ha diseñado teniendo en cuenta la posibilidad, en realidad certeza, de que la Base de Datos acabará siendo de dominio público. Se dan algunos principios en Fase 2: Despliegue de la Gestión Distribuída.

Los principios generales son:

  1. No debe ser posible violar el sistema AUNQUE la Base de Datos sea pública.

  2. Dado que los usuarios no son fiables, las claves de acceso deben ser elegidas por el propio sistema.

  3. El espacio de claves debe ser lo suficientemente amplio como para proteger al usuario de una búsqueda exhaustiva de su clave.

  4. Las posibilidades de encontrar una clave válida deben permanecer constantes sea cual sea el número de nicks registrados. Esto supone un avance importante respecto al cifrado de claves UNIX, ya que en ESNET una operación de cifrado sólo puede ser utilizada para verificar un nick, no varios en paralelo.

  5. El algoritmo elegido debe ser público, rápido, sencillo, consumir poca memoria y no tener vulnerabilidades conocidas.

Para cumplir "4", el modo de uso del algoritmo de cifrado será CBC (Cipher Block Chaining), usando como clave la clave del usuario, y como texto a cifrar su propio nick. De esta forma el atacante sólo dispone de un único ataque "known plaintext", y no puede comparar el texto cifrado simultaneamente con varios registros (eliminamos así uno de los problemas de las claves UNIX).

El modo CBC es como sigue:

ci=C(ci-1+pi)
pi=D(ci)+ci-1

ci: Bloque cifrado
pi: Bloque sin cifrar
C(): Algoritmo de cifrado
D(): Algoritmo de descifrado
"+": Operación XOR

Para poder cumplir "3" las claves deben tener, al menos, 64 bits de entropía.

Se ha elegido el algoritmo TEA (Tiny Encryption Algorithm) por cumplir las siguientes características:

  • Su tamaño de bloque de 64 bits es más que suficiente para evitar ataques "codebook" sencillos.

  • Su clave tiene una longitud de 128 bits.

  • No requiere de memoria temporal o tablas.

  • Es muy rápido y eficiente en CPUs de 32 bits. Más rápido que muchos algoritmos de hash.

  • El algoritmo no sufre cambios en máquinas "big-endian" y "little-endian".

  • Se trata de un algoritmo público, sin patente, y de uso no restringido.

  • No se le conocen ataques prácticos relevantes para nuestro uso concreto.


Implementación

La implementación concreta del registro de nicks es la siguiente:

  • Se utiliza el algoritmo de cifrado TEA. No se emplea el XTEA porque el ataque por "related-keys" no es un problema en los esquemas empleados, la longitud efectiva de la clave tampoco es un incoveniente en nuestro entorno, y XTEA es más complejo y lento que el TEA original.

  • Las claves que recibe el usuario son de 64 bits. La clave TEA correspondiente tiene 128 bits, poniendo los 64 bits de menor peso a cero. Las claves son generadas al azar por la red ESNET.

    64 bits son más que suficientes para los criterios de seguridad de una red de IRC (sale más barato secuestrarte y sacarte la clave a base de torturas y mutilaciones };-). La expansión interna 64->128 bits mediante ceros es sencilla y permite optimizar la rutina TEA sin comprometer la seguridad del esquema.

  • La clave de 64 bits del usuario está codificada en Base64, usando dos grupos de seis caracteres. La capacidad real de esa cadena es de 72 bits. Los cuatro bits superiores de cada segmento de la cadena son cero.

  • Para evitar que el filtrado de la Base de Datos comprometa la seguridad de las claves, no se almacenan directamente, sino que se sigue el siguiente proceso:

    1. Se toma el nick del usuario, se normaliza (mayúsculas y minúsculas son equivalentes, etc.) y se completa con ceros hasta una longitud de 16 bytes.

    2. Se cifra el nick con la clave especificada por el usuario, en modo CBC.

    3. El resultado, de 64 bits, se compara con el valor almacenado en la Base de Datos.

    4. Si ambos valores coinciden, la clave especificada es correcta y al usuario se le permite utilizar ese nick.

    Por tanto en la Base de Datos sólo se guarda una especie de Hash dependiente del nick y de la clave. El nick es conocido por un posible atacante, pero la clave no. El hacer que el Hash dependa tanto del nick como de la clave es para evitar poder verificar claves en paralelo, como ocurre con el esquema utilizado en la claves UNIX. De esta forma, aún usando la misma clave, dos nicks distintos tendrán Hashes distintos.

Enlaces de interés:


Preguntas Frecuentes

  1. ¿Un usuario malintencionado puede capturar mi clave?

    Al contrario que otras redes de IRC, en ESNET hablas directamente con tu servidor de IRC, no con un bot situado en un punto remoto y sujeto a caídas y splits. Por tanto nadie puede ponerse un nick equívoco para capturar claves. Tu clave está segura.

  2. ¿Por qué no puedo elegir mi propia clave?

    Aunque puede no ser tu caso, los usuarios suelen elegir sus claves con muy mal criterio, siendo muy previsibles. Haciendo que sea la red quien genere la clave de forma aleatoria evitamos que un atacante pueda averiguar una clave simplemente probando un diccionario.

  3. ¿Por qué tengo que recordar una clave tan larga?

    En realidad no necesitas recordarla; puedes hacerte un script que la utilice o introducir la clave en el campo "password" de tu cliente de IRC. Una clave de 12 caracteres hace imposible casi cualquier ataque. Resulta preferible tener apuntada tu clave en la cartera que utilizar claves más sencillas y previsibles.

  4. ¿Por qué ESNET me obliga a esperar unos minutos cada vez que realizo algún cambio en mi nick registrado, usando el web?

    Un usuario al que se le haya capturado la clave está sujeto a un "mailbombing" muy sencillo, ya que el atacante sólo debe introducir esos datos y solicitar, por ejemplo, un listado de datos. Los datos los recibe el propietario del nick en su buzón. Si no se impone ninguna restricción en cuanto a velocidad o tiempo entre operaciones, un usuario poco cuidadoso con su clave puede encontrarse un día con un buzón de correo enorme.

    Dado que la modificación de los datos de un nick, una vez registrado, es una operación muy infrecuente, nos ha parecido que limitar el número de operaciones que se pueden hacer por unidad de tiempo era la mejor opción.

  5. ¿Cómo sé si alguien está utilizando mi nick registrado?

    En principio sencillamente no es posible que alguien utilice tu nick, si mantienes tu clave a buen recaudo :-).

    Hay cuatro formas básicas de detectar la ursurpación de un nick:

    1. Te encuentras tu nick ocupado al intentar entrar en el IRC.

      Debes verificar, mediante whois, que no se trate de un clon tuyo que se ha quedado a la espera de descolgarse con un "ping timeout", debido a una caída por tu parte.

    2. Alguna persona de confianza te informa del hecho.

      Si esa persona habla con alguien que está usando tu nick, es conveniente que tome buena nota de su IP.

    3. Te encuentras que hay "cosas" hechas con tu nick que tú no has hecho.

      Registros en canales, por ejemplo.

    4. El enlace de solicitar información sobre tu nick te indica conexiones que no son tuyas.

      Sin duda la forma má sencilla y fiable.

    Recuerda que puede haber nicks similares al tuyo, de grafía ambigua. Por ejemplo, el CERO y la "O" son muy semejantes. Lo mismo para la "I" y la barra vertical "|". Pero, desde el punto de vista del IRC y de ESNET, son nicks diferentes.

    Dado que la única forma de que te puedan usar el nick es sabiendo tu clave, y que es tu responsabilidad es protegerla adecuadamente, NO NOS DES LA LATA. Cambia tu clave y protege la nueva mejor que la antigua :-).

  6. Alguien conoce mi clave, pero no sé cómo la ha obtenido

    Dada la forma en la que se distribuye la Base de Datos, aunque el fichero se haga público no se comprometen seriamente las claves (no se graban las claves, sino un Hash no inversible dependiente de tu nick y tu clave). Por tanto, si alguien tiene la tuya es porque la ha obtenido de algún otro sitio.

    La causa más normal de filtración es el empleo poco disciplinado de las claves desde máquinas multiusuario (universidades) o máquinas a las que tienen acceso mucha gente (cibercafés). Como regla general, no emplees nunca tu clave desde un sitio que no sea tu domicilio. Y si no tienes más remedio que hacerlo, haz gala de una sana paranoia y cambia tu clave cuando vuelvas a casa.

    La siguiente posibilidad es que estés compartiendo tu disco duro por internet. Si ese es el caso, que te cojan la clave es el menor de tus problemas. También puede ser que tu "script" tenga puertas traseras y te estén pinchando conversaciones, claves, etc. No instales nada que no conozcas al dedillo, y recuerda que en el IRC se puede sobrevivir perfectamente sin scripts. Las sorpresas en este aspecto nunca son agradables.

    La última posibilidad es "ingeniería social". La exnovia sabe tu clave, o se la has dicho a un amigo. O te la pregunta alguien en quien confías. Tal vez esas personas no hagan mal uso de ese conocimiento, pero tú no puedes saber si pondrán tanto celo como tú en proteger ese secreto. Recuerda, en definitiva, que tu clave es tuya y nadie más necesita conocerla. ¡¡Ni tu padre!!. Si alguien, incluso un IRCop, te solicita tu clave para poder hacer "pruebas", niégate en redondo. Si alguien te solicita que le envíes un fichero de tu disco duro, y no sabes exactamente qué puede contener, ¡¡Niégate!!.

  7. He perdido mi clave

    Pues tienes un problema. ESNET no guarda las claves de ningún usuario, sino sólo un hash no inversible. Osea, que sólo tú conoces tu clave. Si la pierdes...

    Protege tu clave como oro en paño, no sólo respecto a otros usuarios sino también contra su pérdida accidental. No te conformes con ponerla en tu programa y nada más, ya que si le pasa algo a tu disco duro y tienes que reinstalar el programa, la perderás.

    Pon la clave en el programa, y lleva una copia en tu cartera (por supuesto, no dejes tu cartera a nadie :-). Deja otra copia en un cajón de tu habitación y otra más en casa de tus padres. Si puede ser guarda una quinta copia en la caja de seguridad de algún banco.

    Si, a pesar de todo, pierdes la clave... Bueno. Los nicks se dan de baja automáticamente a los dos meses de no ser utilizados. Cuestión de sentarse y esperar...


Mejoras Futuras

  • Criptografía de 128 bits.
  • Codificación de claves en palabras tipo S/Key.
  • El usuario podrá especificar una clave PGP para que el servidor cifre los mensajes que tenga que remitirle.
  • El servicio de gestión de nicks será accesible vía correo electrónico.


Historia

  • 30/Sep/99: Añadido un script para xchat, cortesía de Ignasi Cavero.

  • 21/Jul/99: Añadidos datos de configuración para el nuevo BitchX, cortesía de Adria García.

  • 23/Jul/98: Añadidos datos de configuración para BitchX, cortesía de Iván González.

  • 01/Jul/98: Completada la sección sobre la algorítmica del registro de nicks, la política de ESNET al respecto y la FAQ.

  • 23/Jun/98: Añadida la sección sobre seguridad y los datos sobre el TEA.

  • 19/Jun/98: La primera implementación de la Base de Datos Distribuída se realizó para 2.10.04.



Python Zope ©1998-99 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS