{"id":187,"date":"2004-08-10T21:03:51","date_gmt":"2004-08-10T19:03:51","guid":{"rendered":"http:\/\/www.marblestation.com\/blog\/?p=187"},"modified":"2012-04-26T18:57:53","modified_gmt":"2012-04-26T16:57:53","slug":"silc-protocolo-de-conferencias-seguro","status":"publish","type":"post","link":"https:\/\/www.marblestation.com\/?p=187","title":{"rendered":"SILC, protocolo de conferencias seguro"},"content":{"rendered":"<p><a href=\"http:\/\/www.silcnet.org\/\">SILC<\/a> es un protocolo libre (y en un futuro standard) que viene acompa\u00f1ado de su respectiva implementaci\u00f3n (servidor, clientes, librerias&#8230;) y tiene como objetivo permitir la comunicaci\u00f3n de forma segura. Su desarrollo se inici\u00f3 en 1997 aunque de forma discontinua, no tom\u00f3 fuerza hasta el 1999 saliendo la primera versi\u00f3n en el 2000. Su precursor fue el finlandes Pekka Riikonen, especialista inform\u00e1tico en el campo de la seguridad.<\/p>\n<p>Podriamos definir SILC como un h\u00edbrido entre IRC y la mensajer\u00eda instantanea ya que hereda funcionalidades de ambas ramas, sin embargo ha sido dise\u00f1ado desde el inicio pensando en la seguridad. SILC proporciona seguridad a unos niveles superiores a la seguridad que puede ofrecer la combinaci\u00f3n de cualquier protocolo no seguro (e.g. IRC, Jabber, MSN Messenger&#8230;) junto con tecnolog\u00edas como TLS\/SSL y GnuPG\/PGP. El principal motivo que dan en su web es que es muy dif\u00edcil hacer seguro un protocolo inseguro utilizando un a\u00f1adido (e.g. SSL) por encima, sin embargo se puede conseguir una seguridad superior si dise\u00f1amos desde 0 un protocolo con esas caracter\u00edsticas. Por ejemplo, SSL es ideal para comunicaciones entre 2 m\u00e1quinas, pero cuando han de intervenir m\u00e1s nodos como por ejemplo ocurriria en un canal (como los del IRC) su funcionamiento no es tan bueno (por ejemplo nadie te asegura que todas las personas han conectado con SSL al servidor).<br \/>\n<!--more--><br \/>\nEn todo caso no me puedo considerar un experto en el funcionamiento de SILC y por tanto donde mejor os podeis informar sobre el funcionamiento interno de los protocolos de seguridad es en su <a href=\"http:\/\/www.silcnet.org\/\">web<\/a>, tienen bastante documentaci\u00f3n y FAQs \u00fatiles.<\/p>\n<p>La red principal en la que se puede utilizar clientes SILC es silcnet, tambi\u00e9n es posible montar nuestros propios servidores para uso privado (e.g. Empresas). Como clientes disponemos de uno de consola basado en irssi (&#8220;emerge silc-client&#8221; en Gentoo), uno gr\u00e1fico llamado <a href=\"http:\/\/silky.sourceforge.net\/\">Silky<\/a> (emerge silky) y el mismisimo cliente de mensajer\u00eda instantanea multi-protocolo <a href=\"http:\/\/gaim.sourceforge.net\/\">Gaim<\/a>. En el momento de escribir este art\u00edculo utilizo la versi\u00f3n 0.81 de Gaim.<\/p>\n<p>He testeado los 3, el de consola va muy bien cuando no disponemos de entorno gr\u00e1fico, pero si no es ese nuestro caso el que m\u00e1s me ha gustado ha sido el propio Gaim. Para hacer que Gaim tenga soporte SILC en Gentoo solo teneis que activar la variable USE &#8220;silc&#8221; (podeis utilizar el programa &#8220;ufed&#8221; para ello) y recompilar Gaim.<\/p>\n<p>Para poder entrar en la red silcnet tendremos que crear una nueva cuenta en Gaim de tipo SILC, introducimos nuestro nick&#8230; con SILC los nicks no tienen porque ser \u00fanicos, pueden haber varias personas conectadas con el mismo nick, las diferenciaremos haciendoles un \/whois (o mediante menus de Gaim) lo que mostrar\u00e1 informaci\u00f3n extra como su clave p\u00fablica. Establecemos una contrase\u00f1a, esto no me ha quedado muy claro pero creo que esta se utiliza para proteger la clave privada que se generar\u00e1 autom\u00e1ticamente cuando creemos la cuenta.<\/p>\n<p>Si damos a &#8220;Mas opciones&#8221; vemos que por defecto se conecta a la red silcnet (silc.silcnet.org), SILC utiliza el puerto 706 ya que este es un puerto privilegiado y solo lo puede abrir root. Esto da una cierta garantia a la hora de acceder a otros servidores, sabes que el que lo ha creado es el administrador del sistema y no cualquier usuario malicioso. Por supuesto una vez se inicia el servidor SILC sus permisos se bajan a nivel de un usuario normal. En la web de SILC recomiendan no confiar nunca en servidores SILC que utilicen un puerto no privilegiado (superior a 1024).<\/p>\n<p>Tenemos diferentes opciones m\u00e1s, la primera de ellas (Autentificaci\u00f3n de clave p\u00fablica) no he conseguido averiguar para que sirve.<\/p>\n<p>La segunda opci\u00f3n, &#8220;Impedir que otros usuarios miren&#8221; sirve para evitar que otros usuarios nos introduzcan en su lista WATCH. Como he dicho antes, SILC tiene caracter\u00edsticas de IM&#8230; por ejemplo es posible a\u00f1adir un usuario a nuestra lista WATCH, que seria el equivalente a una lista de contactos. Si no queremos que nadie pueda ver que hemos entrado en silcnet hay que marcar esta opci\u00f3n, no es posible &#8220;bloquear&#8221; a personas individuales de la red tal y como sucede en Jabber o MSN Messenger, o se bloquea a todos o a nadie.<\/p>\n<p>La tercera opci\u00f3n, &#8220;Bloquear invitaciones&#8221; se utiliza para evitar que terceros puedan invitarnos a canales.<\/p>\n<p>La cuarta opci\u00f3n, &#8220;Bloquear MIs que no hagan intercambio de claves&#8221; esta relacionado con la forma de tener conversaciones privadas (entre 2 personas) en SILC.<\/p>\n<ul>\n<li>Es posible realizar una comunicaci\u00f3n normal entre 2 personas de forma que el texto viaja encriptado pero el servidor conoce las claves (llamadas claves de sesi\u00f3n), si el servidor fuese comprometido y el servicio SILC fuese reemplazado por otro malicioso, nuestra conversaci\u00f3n podria ser vista por los atacantes (es una situaci\u00f3n extrema, poco probable pero posible).<\/li>\n<li>Como alternativa al punto anterior se pueden realizar conversaciones entre 2 personas que utilicen sus claves privadas, es decir, cada usuario encripta con su clave privada que solo \u00e9l conoce y no con la clave de sesi\u00f3n que es conocida tambi\u00e9n por el servidor.\n<p>Para que esto sea posible estos 2 usuarios deben realizar el intercambio de sus claves p\u00fablicas, si este intercambio se realizase utilizando como intermediario el servidor, este (en caso de estar comprometido) podria efectuar el ataque man-in-the-middle y por tanto la seguridad de la comunicaci\u00f3n queda de la mano de los usuarios que deben comprobar el finger-print de las llaves p\u00fablicas antes de confiar. Para evitar esta situaci\u00f3n, el intercambio de claves se realiza de forma directa entre las 2 personas que quieren realizar la comunicaci\u00f3n. Esto implica que si ambas (si solo es 1 de los 2 o ninguno no pasa nada) se encuentran en redes locales distintas y utilizan NAT para acceder a internet, no van a poder realizar el intercambio de claves p\u00fablicas a no ser que redirijan el puerto necesario.<\/p>\n<p>Personalmente encuentro que el tener que establecer una conexi\u00f3n directa esto es una pega importante, de todas formas siempre es posible utilizar <a href=\"http:\/\/gaim-encryption.sourceforge.net\/\">Gaim-Encryption<\/a> que funciona sobre cualquier protocolo y realiza el intercambio de claves sin tener que establecer una conexi\u00f3n directa, por supuesto usa sus propias claves p\u00fablicas\/privada independientes de las de SILC y es necesario que ambas personas tengan el plugin para gaim.<\/li>\n<\/ul>\n<p>La cuesti\u00f3n es que, la cuarta opci\u00f3n del Gaim de la que hablabamos&#8230; &#8220;Bloquear MIs que no hagan un intercambio de claves&#8221; impide que podamos hacer conversaciones privadas tal y como explico en el primer punto.<\/p>\n<p>Finalmente tenemos la opci\u00f3n &#8220;Rechazar solicitudes de los atributos del estado en l\u00ednea&#8221;, cada usuario tiene un conjunto de informaci\u00f3n extensible por ejemplo que indiquen su estado actual (ausente, ocupado&#8230;). Es posible ocultar esta informaci\u00f3n para mostrar solo lo estrictamente necesario. Con todo y eso, en silcnet se mostrar\u00e1 el dominio o IP desde la que nos conectamos y por tanto, aunque se consigue seguridad, no somos an\u00f3nimos para el resto de usuarios. Por lo que he leido en su web, es posible configurar el servidor para que no se muestren las IPs pero en el caso de silcnet no es asi \ud83d\ude41<\/p>\n<p>Una vez conectados podemos listar los canales disponibles en la red, vamos a Herramientas -> Lista de salas, seleccionamos nuestra cuenta SILC y pulsamos &#8220;obtener la lista&#8221;. Podemos unirnos a cualquiera o incluso a\u00f1adirla a nuestra lista de contactos para facilitar el acceso futuro, Amigos -> A\u00f1adir un chat, seleccionamos nuestra cuenta SILC y rellenamos los datos. Si indicamos un canal que no existe, este sera creado al entrar en el y seremos los fundadores del mismo. Si queremos que el canal sea persistente deberemos establecer el modo +f (fundado) al canal con el comando \/cmode canal +f, seria algo similar a registrar un canal (por ejemplo yo he creado el canal gpltarragona). Es importante no perder nuestra clave publica\/privada ya que es con esta con la que el servidor nos identificar\u00e1 como fundadores de los canales que tengamos. El canal silc es el principal de la red, all\u00ed podemos realizar consultas. Cabe destacar que aqu\u00ed los canales no tienen que empezar con # como en el IRC, por tanto gpltarragona es diferente a #gpltarragona.<\/p>\n<p>Cuando estamos dentro de un canal que tenemos en la lista de contactos tambi\u00e9n y somos operadores, si hacemos click con el bot\u00f3n derecho sobre dicho canal en la lista de contactos, se mostrar\u00e1 una peque\u00f1a lista de opciones que nos ayudar\u00e1 a manejarlo&#8230; por ejemplo para establecer passwords, hacerlo privado (solo se puede entrar por invitaci\u00f3n), secreto (no se muestra en el listado de canales), etc&#8230; Tambi\u00e9n es posible crear un grupo privado asociado al canal y con un password, a este grupo se pueden unir cualquiera pero solo podr\u00e1 leer\/escribir mensajes si sabe el password. De esta forma pueden haber diversos sub-grupos dentro de un mismo canal y solo los de un grupo pueden ver el texto de ese grupo ya que solo ellos saben el password.<\/p>\n<p>En un canal normal es posible que un servidor comprometido pueda realizar el ataque man-in-the-middle al igual que ocurria en las conversaciones privadas, por eso es posible poner el canal en modo clave privada (+k) donde todos los usuarios podran establecer una clave privada que no conocer\u00e1 el servidor, de esta forma se evita el posible ataque nombrado. No he conseguido hacer esto con Gaim (le faltan comandos como el \/key), pero con el cliente de consola seguro que se puede. Cabe remarcar que SILC no implementa ningun sistema para el intercambio de claves en grupo, solo entre 2 personas, asi que en el caso de los grupos privados queda de la mano de los usuarios el m\u00e9todo para pasarse la clave privada. <\/p>\n<p>Aseguraros de tener activado la posibilidad de poner comandos mediante \/, Herramientas -> Preferencias -> Interfaz -> Conversaciones, marcar &#8220;Activar \u00f3rdenes barra&#8221;. De esta forma podremos ejecutar comandos desde el mismo canal, poned \/help para ver un listado de los mismos (el comando \/help del cliente de consola es mucho mas completo, os lo recomiendo cuando tengais dudas puntuales). Por ejemplo, si poneis un password al canal utilizando las opciones de Gaim vereis que despues no hay forma de quitar dicho password. Si vemos los modos del canal ejectuando &#8220;\/cmode canal&#8221; saldra [passphrase auth], para quitarlo debemos poner &#8220;\/cmode canal -a&#8221;.<\/p>\n<p>En Gaim tambi\u00e9n podremos enviar archivos usando SILC, esto implica que el fichero se enviar\u00e1 utilizando SFTP, es decir, la transmisi\u00f3n ser\u00e1 encriptada. Esta caracter\u00edstica no es posible conseguirla con ningun otro protocolo\/plugin, por tanto se perfila como una de las funcionalidades m\u00e1s llamativas.<\/p>\n<p>Finalmente quisiera destacar la posibilidad de utilizar SILC para la transmisi\u00f3n de informaci\u00f3n multimedia gracias al soporte de MIME. Es posible que en el futuro veamos clientes que implementen la posibilidad de realizar conexi\u00f3nes seguras de voz o im\u00e1gen utilizando SILC.<\/p>\n<p>Respecto al cliente SILC de Gaim su funcionamiento es bastante correcto, salvo algun fallo temporal y la falta de opciones\/comandos. Lo que ma&#347; fastidia es que no consigo hacer funcionar correctamente la posibilidad de a\u00f1adir gente a la lista de contactos procedentes de SILC, cuando reinicio la aplicaci\u00f3n falla pidiendome la clave p\u00fablica de los usuarios que a\u00f1adi&#8230; cuando esto deberia haberlo hecho el autom\u00e1ticamente. De todas formas es muy usable (sobretodo al estilo IRC con los canales) teniendo en cuenta que no hace mucho que ha sido incorporado a Gaim.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SILC es un protocolo libre (y en un futuro standard) que viene acompa\u00f1ado de su respectiva implementaci\u00f3n (servidor, clientes, librerias&#8230;) y tiene como objetivo permitir la comunicaci\u00f3n de forma segura. Su desarrollo se inici\u00f3 en 1997 aunque de forma discontinua, no tom\u00f3 fuerza hasta el 1999 saliendo la primera versi\u00f3n en el 2000. Su precursor &hellip; <a href=\"https:\/\/www.marblestation.com\/?p=187\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">SILC, protocolo de conferencias seguro<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-187","post","type-post","status-publish","format-standard","hentry","category-espanyol","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=187"}],"version-history":[{"count":1,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/187\/revisions"}],"predecessor-version":[{"id":1733,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=\/wp\/v2\/posts\/187\/revisions\/1733"}],"wp:attachment":[{"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marblestation.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}