LibreVPN:Intercambio de llaves

De HackLab
Saltar a: navegación, buscar


Intercambio de llaves

Intercambio manual

El intercambio manual es bastante simple, envía el archivo de nodo por el medio que se te ocurra y guardá los que recibas en hosts/.

Tené en cuenta que el archivo tiene que llamarse exactamente como el nodo, de lo contrario tinc va a rechazar las conexiones.


Intercambiar nodos en una red local

Si estás usando Avahi, podés anunciar tu nodo y recibir los de los demás en una red local, por ejemplo, estando conectadxs a Libertatia, la red del Hacklab.

Anunciar el nodo

Para anunciar el nodo, hay que correr los siguientes comandos:

./lvpn announce tu_nodo

Para anunciarlo siempre, en cualquier red donde estés, agregá la opción -p (de permanente).

./lvpn announce -p tu_nodo

Para dejar de anunciarlo, usa -s (de stop):

./lvpn announce -s tu_nodo  # o -sp si el anuncio era permanente.


Ver los nodos anunciados

Para ver los nodos anunciados, la herramienta es lvpn discover.

# Ver los nodos anunciados
./lvpn discover

# Aceptar conexiones
./lvpn discover -a tu_nodo el_nodo_descubierto

# Conectarse al nodo
./lvpn discover -c tu_nodo el_nodo_descubierto


Intercambio de llaves por Internet

Dialog-warning-yellow.svg esto es una idea!



Problema:

  • Obtener llaves de forma segura antes de estar dentro de la vpn

Principios de intercambio de llaves:

  • Automático - que se haga con la menor intervención posible
  • Seguro - que se pueda verificar que las llaves pertenezcan realmente a los nodos
  • Distribuido - que no haya una autoridad central

Protocolo:

Basándose en las ideas de Perspectives, que cada nodo anuncie las llaves que conoce y otros nodos puedan verificar con ellos las llaves que quieran.

  • parabola, ponape y threepwood actúan como notarías, sirviendo todas las llaves de nodos conocidas
  • parabola, ponape y threepwood no intercambian estas llaves entre sí
  • lechuck quiere conectarse a fibonacci pero no tiene la llave correspondiente
  • lechuck le pregunta a ponape, parabola y threepwood por separado
  • ponape, parabola y threepwood responden con la llave de fibonacci
  • lechuck compara las llaves que recibe y se queda con la que coincide en la mayoría de los casos (consenso)
  • si la llave no alcanza un nivel de consenso, el proceso falla y lechuck no se conecta a fibonacci


Implementación:

  • lvpn init debería tener un flag para convertir un nodo en notaría durante la creación
  • una notaría es un servicio http hacia la vpn y hacia internet
  • cada notaría firma las llaves con gpg
  • lvpn viene con un listado de notarías disponibles pero configurables
  • luego acepta la llave con mayoría de coincidencias
  • todo este proceso debería ser disparado por lvpn connectto de forma transparente


Problemas y dudas:

  • los nodos notarías tienen que tener un servidor de llaves disponible en internet. en los nodos que están detrás de nats y firewalls la única forma simple de hacer esto es con .onion :)
  • qué nivel de diferencia es soportado? las llaves publicas tienen que coincidir si o si, las subnets anunciadas, y el resto se ignora? si vienen otras opciones cuales se aceptan?
  • cómo actualizan las llaves las notarías? mediante el mismo proceso?
  • si las notarías son servicios http, si se usa un puerto especial para esto los nodos detrás de firewalls pueden no llegar, pero si hay otro webserver andando en los puertos normales, va a haber conflicto o configurar la notaría a mano?

Usando DNS

Usar Owns o el DNS que estemos usando para anunciar la llave en un registro TXT de la misma forma que hace lvpn announce.

De esta forma la llave se puede tomar así:

   dig any _lvpn._udp.ponape.librevpn.org.ar

Donde el registro TXT es un base64 del archivo de host, SRV el valor de Address y Port y PTR el Address.