Podcast Z #6: Proyecto X - DNS como base de datos distribuida mundial
JAN 22, 201229 MIN
Podcast Z #6: Proyecto X - DNS como base de datos distribuida mundial
JAN 22, 201229 MIN
Description
Usar el DNS como un sistema de cacheo mundial. <a href="https://podcast.jcea.es/podcastz/6">https://podcast.jcea.es/podcastz/6</a>
<p><p>Notas:
<ul>
<p><li><b>00:30:</b> El proyecto es confidencial, pero quiero exponer algunas técnicas que pueden
ser útiles para otros programadores.
<p><li><b>02:50:</b> El programa requiere actualizarse constantemente de forma automática.
<p><li><b>04:30:</b> El usuario solo instala manualmente un "descargador".
<p><li><b>05:50:</b> Descripción del proceso de actualización.
<p><li><b>06:30:</b> Firma digital, imprescindible cuando hay actualizaciones constantes a través de
redes no confiables.
<p><li><b>08:00:</b> En la primera versión del proyecto, el programa se descargaba en cada ejecución (20KBytes).
<p><li><b>09:00:</b> Pero esto no escala cuando el número de usuarios crece, o el tamaño del fichero crece.
<p><li><b>13:30:</b> Usar el DNS para comprobar las versiones, utilizándolo de caché. A nivel mundial
y de forma simple.
<p><li><b>15:20:</b> Cuando un ordenador pide a su ISP que haga una petición de DNS, dicho ISP cachea
el resultado y está disponible para otros clientes. Y el tiempo de cacheo es configurable en el servidor
origen.
<p><li><b>17:30:</b> Problema: sin instalar librerías adicionales, Python tiene una capacidad de interacción
con el DNS muy limitada. Hay que buscarse la vida.
<p><li><b>19:30:</b> En vez de decir a través del DNS qué versión es la más moderna, lo que hacemos es
permitir que el cliente confirme si su versión es la última o no. Comprobamos si el registro
"HASH_MD5.md5.DOMINIO" existe o no.
<p><li><b>22:40:</b> Ojo con los ISPs puñeteros que resuelven a sus propias IPs las resoluciones DNS inexistentes.
Solución: Comprobamos que la IP resuelta sea la esperada.
<p><li><b>25:00:</b> Firma digital por <a href="https://en.wikipedia.org/wiki/ElGamal_signature_scheme">El Gamal</a>.
<p><li><b>27:20:</b> El actualizador no hace más descargar la versión actual (con todas las verificaciones)
y luego le pasa el control. Actualizar el actualizador es "complicado" :).
</ul>