LibreVPN:Intercambio de llaves
Contenido
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
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
ythreepwood
actúan como notarías, sirviendo todas las llaves de nodos conocidas
-
parabola
,ponape
ythreepwood
no intercambian estas llaves entre sí
-
lechuck
quiere conectarse afibonacci
pero no tiene la llave correspondiente
-
lechuck
le pregunta aponape
,parabola
ythreepwood
por separado
-
ponape
,parabola
ythreepwood
responden con la llave defibonacci
-
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 afibonacci
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
- el nodo que quiere averiguar una llave descarga
http://url_notaria/hosts/nombre_del_nodo
y calcula la diferencia
- 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?
- autoconfiguramos Ciboulette para notarías?
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.