Segundo encuentro, zona hacklab autonoma interdimensional [ZHAI]
#2 ~
tiempo ~ 5hs | ~ 20 piratas
Encuentro interdimensional <3
Nos juntamos varias piratas del pip en el jitsi pirata con una serie de encuentros piratas donde nos compartimos saberes, hackatoneamos y liberamos cosas. Esta vez vamos a compartir una serie de talleres y charlas sobre un conjunto de saberes que consideramos importantes en nuestras actividades piratas interbarcas y que nos parece, pueden ser interesante compartir con nuestres aliades. Horarios
15:10 - Intro sobre ZHAI y PIP 15:15 - Git Doc
Git es un software para manejar versiones de nuestros archivos. Vamos a repasar los conceptos esenciales que maneja git (repositorios, ramas, commits) y usar esta herramienta sobre github para publicar algo en internet.
16:30 - 0net Doc
ZeroNet es una red de pares que se pueden conectar sin compartir sus direcciones IPs entre sí. Hay blogs, foros, mail y muchas sorpresas!! (xddd)
corte 17:45 - 18:00
18:00 - cifrado de mails con enigmail && thunderbird Doc
Aprender a cifrar correos con el gestor thunderbird + enigmail, dinámica de creación de llaves para cifrar con amigxs
Taller de git
bloque by @gahen
Requisitos / Recomendaciones:
Instalar git: https://duckduckgo.com/?q=instalar+git&t=ffsb&ia=web
Glosario
- to stage: preparar los cambios para versionar.
- to commit: versionar, crear una versión nueva. Versionado.
- to push: empujar los cambios a un repositorio remoto asociado.
- to pull: traer los cambios a un repositorio remoto asociado.
- to merge: mezclar los cambios de distintas ramas.
- to checkout: “ir a” o “cambiar” la rama activa.
- branch: rama, una parte de la historia, un conjunto de versiones relacionadas.
- history: historia, un conjunto de ramas.
- hash: firma compuesta de de letras y números que representa los cambios del commit.
Introducción
Git es un software que nos permite controlar cambios sobre nuestros archivos y es especialmente útil para los que se basan en archivos de texto.
En general daremos traducciones de las palabras en inglés a usar, sin embargo usaremos más los términos en inglés para las acciones que ya se conocen así en el campo de la tecnología.
Taller
Crear un nuevo repositorio
Un repositorio es la parte mínima de una implementación de git, tiene una relación 1 a 1 con nuestros proyectos y dispositivos, es decir que tendremos 1 repositorio por cada proyecto y dispositivo (notebook, pc de escritorio, etc.). Solo tendremos un repositorio activo cuando estemos trabajando, no podemos cambiar de repositorio.
git init [carpeta] # crea un repositorio nuevo, opcionalmente en la carpeta pasada como parámetro, sino en la que estamos paradas.
Gestión de branches (ramas)
Representan líneas distintas de desarrollo del proyecto. Se pueden tener varias en paralelo en un mismo repositorio
git branch <rama> # Crea una nueva rama llamda <rama>
git branch # Lista todas las ramas que tenemos
git checkout master # Se para en la rama master
git merge <rama> # Combina los cambios de la rama <rama> hacia la rama actual, solo modifica a esta rama.
git branch -d <rama> # Borra la rama <rama>. Ya fue unida a master así que no hace falta tenerla activa
Nota: es importante entender que borrar una rama no modifica la historia, los commits de esa rama siguen estando. Lo único que cambia es que ya no podemos hacer un checkout al commit último de la rama usando el nombre que tenía (sí podemos hacerlo usando el hash del commit). Borrar ramas entonces es más un tema de organización que de gestión del código versionado.
Stage y Commit
stage
es un estado intermedio, previo al commit (versionado), que podría describirse como “cambios listos para ser versionados (commiteados)”
git add <archivo.ext> [otro.otraext] ... # coloca en staged todos los archivos que pasamos como parámetro
Para corroborar que el comando anterior funcionó bien y estamos por versionar exactamente lo que queremos podemos usar el comando status
que nos muestra el estado actual de nuestro repositorio.
git status # nos mostrará lo que hicimos
commit
es el comando que nos permite efectivamente versionar un cambio. Una vez que hacemos commit
nuestro cambio va a quedar guardado en nuestro repositorio. Git nos da la seguridad de que siempre podremos volver a esta versión en el futuro.
git commit # Abre un editor de texto donde pondremos el mensaje de commit y visualizaremos los cambios que estaban en staged, ellos serán los que se guarden.
git commit -m 'mensaje de commit' # Hace un commit con el mensaje que le pasamos entre comillas
git commit -am 'mensaje de commit' # Hace un add de todos los cambios actuales y comitea con el mensaje. La versión simple y por eso también la más 'sucia' de usar, ya que es muy fácil versionar cambios que no nos interesaban
Uso distribuído: Repositorios centralizados y github.
Hay varias maneras de trabajar de manera distribuida con varias personas aportando a un mismo repositorio usando git. Cada uno hace un commit a su propio branch y luego van mergeando sus cambios con los de los demás. Hablamos de “repositorio centralizado” cuando hay 1 repositorio que tiene la versión posta y los demás tienen que mergear con él. Con git pueden armarse otros flujos de trabajo no centralizados.
Entre los proveedor de repositorios en la nube podemos mencionar a 0xacab, Bitbucket y Github. Una vez creado nuestro repositorio remoto y podemos asociarlo con nuestro repositorio local con el comando git add
y luego enviar nuestros cambios usando git push
.
git remote add origin git@github.com:User/reponame.git # Añade una referencia a un nuevo repositorio remoto, usa el nombre por defecto *origin* y tiene la url remota al repositorio.
git push -u origin master # Envía nuestros cambios comiteados a la rama master del repositorio remoto. Esta rama ya existe, se crea sola con el repo, sino el comando fallaría.
Cuando otra persona sube cambios al repositorio y queremos obtenerlos (o más probablemente cuando queremos hacer push y git se queje de que tenemos que actualizar nuestro repo antes) podemo usar…
git pull origin master # puede ser solo "git pull" si ya le dijimos a git cual es el repositorio y branch del que debe actualizarse
Usando checkout -b
podemos crear una rama local y remota a la vez, que luego pueda hacer push al repositorio remoto
git checkout -b nueva-rama # Crea una nueva rama que estará en el mismo estado que la rama donde estábamos parados.
# git add, commit, etc ....
git push origin nueva-rama # Publica los cambios a la nueva rama.
Referencias, movernos en la historia y deshacer cambios
Introduzcamos el concepto de “copia de trabajo”: esta es la estructura de archivos que vemos, fuera de git. Cada vez que modificamos, añadimos o borramos un archivo estamos tocando la copia de trabajo, el repositorio solo se modifica al usar algún comando de git.
Para movernos a distintos momentos de la historia, entre commits, necesitamos saber su hash. Para esto podemos usar el commando git log
, que nos muestra el historial de la rama donde estamos parados, o el comando git reflog
que nos muestra todo lo que hemos hecho en el repositorio hasta ahora. Luego podemos usar el comando git reset --soft *hash*
que moverá la referencia actual del branch hacia otro momento de la historia, el del commit cuyo hash pasamos como parámetro. git reset --hard *hash*
además de hacer eso reemplazará nuestra copia de trabajo por que estaba en ese momento de la historia.
:::danger Las siguientes instrucciones pueden generar pérdida de archivos, tengan todo commiteado antes de probarlas. :::
git log # Buscamos el hash del commit al que queremos volver, por ejemplo *1234abcd*. Supongamos que estamos en el commit *5678abcd*
git reset --soft 1234abcd
git status # Como hicimos un reset "suave" nos mostrará un montón de archivos cambiados, porque volvió a un estado anterior de la historia pero no cambió los archivos
git reset --hard 1234abcd
git status # Ahora vemos que ya no hay nada para comitear, todos los cambios que habíamos hecho se perdieron y estamos 100% en el estado del commit 1234abcd.
git reflog # Acá podemos ver el commit donde estábamos parados inicialmente, supuestamente *5678abcd*
git reset --hard *5678abcd* # Con esto volvimos al estado incial, como si nada hubiera cambiado.
Deshacer cambios
Para deshacer un commit simplemente usamos git revert <hash>
y se nos añadirá un commit más especificando que el commit identificado por **
Conflictos
Muchas veces,cuando estemos trabajando entre varios, git no podrá mezclar los cambios, y nos pedirá nuestra intervención. Luego se crea un commit donde se deja constancia de ese merge y qué hicimos:
# Tenemos cambios locales commiteados que queremos subir
git push origin master # Git se queja de que tenemos que actualizar nuestro repo y rama antes de hacer push
git pull origin master # Intentamos traer cambios remotos pero git nos dice que hay conflictos que debemos resolver, por ejemplo en el archivo README.md
# editamos el archivo README.md, reemplazamos lo que está marcado como conflictivo y nos aseguramos de que el resultado final está OK
git add README.md # Le decimos a git que el archivo conflictivo ya está OK
git commit # Git nos pone un mensaje por defecto, cerramos y guardamos y listo
git push origin master # Funciona =)
Publicar contenido online usando git
Github
Github provee un servicio que nos publica en internet cualquiera cosa que publiquemos al repositorio llamado
Documentación: https://pages.github.com/
0xACAB (gitlab)
0xacab usa gitlab como software para gestionar repositorios remotos, también soporta algo similar: https://0xacab.org/help/user/project/pages/index.md
ZeroNet
bloque by @anzo y @alf
Teoría
-
¿qué es unx “piratx informáticx”? ¿qué es
p2p
? Napster, Gnutella, Ares, Kazaa, Soulseek y otros actuales…- ¿qué es BitTorrent (
*.torrent
, magnets, semillas y trackers)? Ver copiona.
Un hash criptográfico es una huella que se obtiene de (por ejemplo) el contenido de un archivo a partir de procesarlo matemágicamente con un algoritmo.
- ¿qué es BitTorrent (
-
https://zeronet.io/es: Es una red de pares (ó red
p2p
) donde las URL son billeteras de bitcoins (“hashes” ó direcciones*.bit
). Veamos: ¿kómo funka?…ver tmb. la presentación (ppt@gdocs<!>)- ¿qué es un sitio web (estático y dinámico)?
Los zites son torrents que comparten archivos (
SQL
,HTML
,JS
, etcétera) de un sitio web que dialoga (mediante reglas) con el software que descargaremos y ejecutaremos cada une.-
0net no es anónimo per se. Permite usar tor y en un futuro, incorporará i2p.
-
¿qué es el cifrado asimétrico? ¿qué son las mixnets? ¿qué es tor y cómo funciona?
Práctica
En ZeroNet seremos nodos, pares y semillas (simultáneamente) de los contenidos que prosumiremos; es decir de los contenidos que consumimos y producimos al navegar y comunicarnos.
- Opcional: podés participar de la charla/ taller sin la necesidad de instalar nada. ZeroNet es accesible desde algunos sitios proxy que andan dando vueltas en la
clearnet
… pero la experiencia es mucho mas limitada y no siempre están online.
Instalaciones
- Descargar y descomprimir:
- m$ windows
- apple macos
google android(en desarrollo)- gnu linux
Vamos a tener una carpeta con todo los archivos de la aplicación, pero en primer orden nos interesará uno: el ejecutable. En win es un
.exe
, en mac un.app
(?) y en lignux un.sh
. -
Instalar Tor Browser Bundle. Ejecutarlo. Apretar “connect” (¿qué son los bridges?). Navegar a un sitio oculto, por ejemplo: RiseUp.net ó Ahmia.fi.
-
Instalar el addon uMatrix en el navegador.
- Probar y conocer porque usamos uMatrix. Cargamos un video. (Requiere activar el archivo de video q viene desde un dominio de googlevideo).
ZeroNet
-
Sólo Mac y Linux: En la carpeta de ZeroNet que descomprimiste hay que crear un archivo llamado
zeronet.conf
con este contenido:[global] fileserver_port = 10753 trackers_proxy = tor tor = always tor_proxy = 127.0.0.1:9150 tor_controller = 127.0.0.1:9151
-
(Con el Tor Browser Bundle ya corriendo), Doble-click en archivo ejecutable de tu sistema. Deberia aparecer algo asi en una terminal:
- Starting ZeroNet...
[xx:xx:xx] - Libsecpk256k1 loaded: CompiledLib in 0.024s
[xx:xx:xx] - Patching sockets to tor socks proxy: 127.0.0.1:9150
[xx:xx:xx] - Version: 0.7.1 r4206, Python 3.7.8 | packaged by conda-forge | (default, Jul 23 2020, 03:54:19)
[GCC 7.5.0], Gevent: 20.6.2
[xx:xx:xx] - Creating FileServer....
[xx:xx:xx] - Creating UiServer....
[xx:xx:xx] - Removing old SSL certs...
[xx:xx:xx] - Starting servers....
[xx:xx:xx] Ui.UiServer --------------------------------------
[xx:xx:xx] Ui.UiServer Web interface: http://127.0.0.1:43110/
[xx:xx:xx] Ui.UiServer --------------------------------------
[xx:xx:xx] PeerPortchecker Checking port 15441 (ipv4) using checkCanyouseeme result: {'ip': 'xx.xx.xxx.xxx', 'opened': False} in 2.928s
[xx:xx:xx] PeerPortchecker Checking port 15441 (ipv6) using checkMyaddr result: {'ip': 'xxxx:xxxx:xxx:xx::x', 'opened': False} in 13.463s
[xx:xx:xx] ConnServer Server port opened ipv4: False, ipv6: False
[xx:xx:xx] Ui.UiServer Added 127.0.0.1:43110 as allowed host
-
Abrir en TorBrowserBundle el URL de la dashboard “Hello ZeroNet”… ¡No carga!
-
Ir a
about:config
a configurar el campo “no_proxies_on” con el valor “127.0.0.1”. -
Entrar en el menú customize, desde el sanguche o desde click derecho en la barra. Arrastrar el botón del addon “NoScript”.
-
Desde la pestaña del dashboard, clickear el botón del addon NoScript. Activar el “override” y luego dar permiso total a tu ip local (127.0.01) poniéndola como “Trusted”.
-
-
Navegar a Play. ¿Es la TPB antes de ser vendida?… solo hay tapas, magnets y links “clearnet” <!>.
-
Mostrar el buscador de kaffie, registrar una ID y entrar en su hub.
-
Navegar un poco activando los demo: blogs, foros, chats, giftime, mail, etc. Ver que hay muchos zites: wiki, index… los contenidos los tenemos q poner nosotres armando nuestros nodos entre ameguites…
-
Ver la carpeta
data/
con todos los zites y sus archivos correspondientes que estan listados en cadadata/**/contents.json
(docs). -
Clonar un blog, foro, chat o wiki. Al clonar un zite, 0net genera un par de llaves asimétricas que nos hacen dueñes, desarrolladorxs y moderadorxs de la copia que hay ahora en
data/
. -
http://127.0.0.1:43110/1N6zp6jCXPBktNMPfe7UJBpQGyfCq7k2M8/?Post:2:ZeroNet+Beginner%E2%80%99s+Package … ¿Es un buen momento para una pausa?
-
Ver el archivo
data/users.json
. -
Una red resistente a la censura, ¡polémica! no sólo hay contenidos ilegales, tmb. hay contenidos q son horripilantes.
-
Debatir.
-
La mitad vacia del vaso: requiere moderación. La mitad llena del vaso: provee posibilidades de moderación comunitaria.
-
-
Ver menú sanguche “
...
” para acceder a: Config, Plugins, Stats, y:- Ver los mute y las listas de bloqueo(s) (MOAB).
Fin.
Para profundizar luego, quizás en otra ocasión:
-
Traer archivos de un sitio estático (https://sutty.nl) y ponerlo como espejo en 0net.
- Obtener una direccion “.bit” con Namecoins.
-
Activar el plugin de multiuser.
- Sacar una id en kxonet.
-
Crear zite con un user compartido
-
Gracias al
local peer discovery
se podrian hacer redes libres/ autónomas/ MESH: Usemos los cables del capitalismo de vigilancia pero no seamos usades por sus servidores!- Probar cjdns.
-
Desarrollar un sitio con la ZeroFrame API.
Aprendiendo a enviar mails cifrados con thunderbird!
bloque by @librenauta
thunderbird es un cliente de correos electrónicos, donde podemos ingresar diferentes cuentas de diferentes servidores de correos, para poder gestionarlos todos en un mismo lugar.
para instalar thunderbird >->
Lo podés buscar desde el centro de software de tu sistema operativo linux, o via terminal:
Debian sudo apt-get install thunderbird
fuente
Fedora sudo apt-get install thunderbird
fuente
Windows descargar la última version desde aquí en español o elegir el idioma aquí
al iniciar thunderbird nos pedirá ingresar una cuenta de mail
Cifrado
El objetivo de cifrar información es poder transformar un mensaje/archivo en un lenguaje que no se pude comprender a menos que tengas una “llave” (como un candado) para descifrarla o hacer legible nuevamente.
un ejemplo muy simple es el cifrado ROT
donde la llave sería hacer corresponder una letra con la siguiente en el abecedario, ejemplo A=D
Una llave pública es un archivo que usted puede dar a cualquiera o publicar públicamente. Cuando alguien quiera enviarle un mensaje cifrado de extremo a extremo, necesitará su clave pública para hacerlo.
Su llave privada le permite descifrar este mensaje cifrado. Debido a que su llave privada le permite leer mensajes cifrados, es muy importante que usted la proteja. Además, su llave privada puede ser usada para firmar documentos para que otros puedan verificar que realmente proceden de usted.
Enigmail
El complemento que nos permite generar y subir nuestras llaves de cifrado
- En el menu de thunderbird podemos ver la opcion de “enigmail” que nos abrirá la siguiente pestaña, donde podemos crear nuestro par de llaves y ver todas las llaves públicas de nuestr_s amig_s
en esta ventana tambien podemos subir nuestra llave pública, para que otras la encuentren al poner nuestro mail en algun servidor de llaves.
autocript
by @fauno
autocrypt es una forma (protocolo, extensión) de facilitar el intercambio de llaves gpg sin intervención de les usuaries y activa cifrado oportunista.
sin autocrypt hay que:
-
enviar la llave a un servidor de llaves, con el problema que la llave queda para siempre (con dox y todo) y que puede haber un monton de llaves para la misma identidad, queda la duda sobre cual se puede usar
-
adjuntar la llave en todos los correos. es como autocrypt, pero la otra persona tiene que importar la llave manualmente. gente sin gpg recibe un adjunto (y a veces preguntan qué es)
autocrypt agrega la llave pública en los metadatos de cada correo y detecta automáticamente cuando recibimos correos con autocrypt. también lleva una cuenta de las llaves más nuevas y utiliza siempre la última. esto permite que les usuaries cambien de llave sin tener que avisarle a todo el mundo o renovarla (openpgp espera que una llave sea como un documento de identidad y la tengas para siempre, por eso los servidores no borran nada, pero en la practica todo el mundo la pierde y vuelve a crear otra).
el cifrado es oportunista porque si enviamos un correo a una persona sin saber una llave, pero ambas tenemos autocrypt, la respuesta va a llegar cifrada, con lo que es necesario un solo correo sin cifrar. no responde a problemar de verificación de identidad.
#enigmail ya soporta autocrypt, no tengo claro si el nuevo #thunderbird lo soporta, pero hay un plugin que lo hace por su cuenta asi que quizas haya que instalar ese