Encriptar y decriptar


Encriptar y decriptar

He estado leyendo y tratando de aprender como encriptar y luego decriptar información de manera segura (y tal vez algún día pueda decir: en la manera correcta).

Sin entrar a detalles que podrían mandarme por un agujero de conejo, describo lo que quiero hacer y luego lo que he encontrado:

Contexto:

El proceso:

  1. La webapp hace un request a un primer endpoint (algo así como /knock)
  2. El servidor recibe el request y genera una frase de manera random, entonces cifra la frase con la llave pública, guarda un hash de la frase y envía el texto cifrado como respuesta
  3. La webapp recibe el challenge, lo decifra usando la llave privada y entonces genera un hash (usando el mismo proceso que el servidor para generar el hash) y manda al server el hash al siguiente endpoint (algo como /answer)
  4. El servidor recibe los datos y compara los hashes, si son iguales entonces sabemos que la webapp tiene la llave privada correspondiente a la llave pública usada para cifrar el challenge

Para facilidad saqué otros puntos del proceso, pero esto describe la parte núcleo a resolver.

Encontré varias librerías que pueden hacer esto, pero, hay un requisito extra: el par de llaves tienen que ser del tipo correspondiente a Ethereum: ECDSA.

Las librerías con las que estuve jugando son:

Por ahora tengo una implementación funcional que usa eth-crypto PERO (gran pero), solo puede encriptar/decriptar mensajes de menos de 16 letras :( Le dejé un issue acerca de esto y no me han respondido (capaz nunca lo hagan), así que sigo aprendiendo para ver como resolver esto de manera genérica.

Ya iré avisando.

Saludos,
Gorka


Random hypothesis: PI projection in 4D


De la misma manera que se pueden hacer proyecciones de circulos 3D a 2D lo mismo se puede hacer para “elementos” de 4D (y dimensiones superiores) a gráficos 3D.

La idea que tuve es graficar los digitos de PI en un espacio de 3 ejes (potencialmente no se verá nada), pero esta podría ser una proyección de algo más, algo “causal” en 4D y lo que entendemos en PI es sólamenta la proyección en 3D (y por eso no “vemos” nada).

Bueno, ya veré si en algún momento me pongo a jugar con esto.

Saludos,
Gorka


Who is John Galt?


I swear by my life, and my love of it, that I will never live for the sake of another man, nor ask another man to live for mine.

Saludos,
Gorka


Apps que uso: Duet


Duet

Ex-Apple Engineers turn your iPad into an extra display.
Duet

Una vez que usas un segundo monitor no hay manera de volver atrás y cuando no lo tienes lo extrañas - todo el tiempo.

En el mientras decido donde y como va a ser mi escritorio de trabajo, como me gustaría tenerlo para “ser más productivo” (o on realidad estar más cómodo). Estuve viendo opciones de usar un iPad como segunda pantalla.

Eventualmente descubrí Duet Display. Es una app que se instala en el iPad y en la computadora y (importante) usando cable (en la versión gratuita) se puede usar el iPad como un segundo moitor.

Tiene muy buen performance - hace unos años intenté con otra app y fue tan malo el performance que no volví a ver opciones de apps hasta ahora. No me sentí cómodo usando el touch en el iPad, pero la respuesta del mouse es muy buena.

Lo único que no me gusta es que no puedo usarlo de manera wireless - la versión de paga lo permite por $20 USD al año.

Es una buena opción para tener en cuenta, me gustaría un segundo monitor más grande pero “en el mientras” tengo uno tamaño iPad (mini).

Saludos,
Gorka


Códigos QR y conexiones WebRTC


WebRTC QR

El mes pasado publiqué uno más de mis experimentos. Era un viernes cualquiera y como otras veces decidí compartir en varios lugares el link para ver si conseguía algún tipo de feedback. Cual fue mi sorpresa cuando el post consiguió tracción en Hacker News y se quedó todo el día en la front page y luego fue trending en GitHub/JavaScript. Tremenda nerd-felicidad.

Les doy un poco de contexto:

Para hacer una conexión WebRTC se necesita intercambiar información de cada uno de los devices (entre otras cosas imagino que datos de IPs y similares) y hay diferentes maneras de hacer este intercambio. Lo más “normal” es un usar un servidor que se llama servidor de signalling. El dispositivo A se conecta al servidor y le dice soy A, luego llega el dispositivo B, que se conecta y hace lo mismo (me llamo B). B le pregunta al servidor: “¿conoces a A?” y el servidor le dice si, y se encarga de pedirle a cada dispositivo la info correspondiente, la intercambia entre ellos y así al final A se conecta directamente a B (y puede intercambiar datos directamente sin usar el servidor). Así se establece una conexión en tiempo real (Web Real Time Communication).

Mi problema es usar un servidor de signalling. Tiene demasiado “poder” ya que al final es quien decide que dispositivos se conectan entre sí. Si fuera “malicioso” podría hacer un ataque en el cual conecta a A <-> C <-> B, sin que A o B lo sepan y sus comunicaciones podrían ser escuchadas y hasta alteradas.

Mi experimento busca establecer una conexión WebRTC sin usar un servidor de signalling. Para eso busqué la manera de intercambiar los datos de signalling usando códigos QR. La información es más de lo que se puede transmitir en un sólo código QR por lo que tuve que hacer una secuencia de códigos (uno tras otro), donde cada uno transmite la parte que le toca y más información (el total de slides y el índice de si mismo para que el dispositivo que está leyendo sepa como va y cuanto falta).

El experimento funciona y se puede, de manera completamente descentralizada establecer una conexión WebRTC en una red ad hoc.

Ya tengo pensado otro tipo de usos para esta tecnología que iré contando después, por ahora les dejo el link al post en HN: Show HN: WebRTC signalling data using QR codes.

Saludos,
Gorka


Puppets en el JSDayEs 2018


JSDayEs 2018

Tuve la suerte de que aceptaron mi propuesta de charla en el JSDayEs 2018. Fue una experiencia fantástica.

Pude compartir con personas de la comunidad JS en España, hablar de temas importantes el día de hoy y escuchar charlas de personas que saben mucho y que ahora sigo para seguir aprendiendo de lo que comparten.

Yo hablé de Puppets, mis slides están aquí: 3D VIRTUAL PUPPET REMOTE-CONTROLLED WITH SMARTPHONE.

Pero mejor les dejo el video para que vean la charla:

Feedback

Entre las cosas que me preguntaron y que considero para el futuro: no hice un demo de la marioneta. He estado trabajando en un refactor donde cambio el motor de física que usa y no logré tenerlo listo para el día de la presentación - pero si logré publicar otro experimento que ya contaré después. Si puedo volver a dar la charla trataré de incluir un demo.

Saludos,
Gorka


Apple Watch


Apple Watch

Hace unos días me compré uno de estos. Le tenía ganas hace rato y había pensado que compraría el que tiene integrado red de celular (al final no fue así).

La correa es de silicona, así que es de buena calidad y se puede meter bajo el agua - sin confirmar si se puede bucear o no, el librito dice hasta 50 metros pero no confío. Fui a ver otras correas y salí corriendo, osea la que me gustó está en 160€ (más de un tercio de lo que cuesta el reloj en sí).

Hay varias cosas que disfruto:

Lo único que podría decir en contra es que las notificaciones se volvieron incómodas, osea, todo el tiempo te vibra el reloj y la respuesta automática es ver que pasó.

Así que eso, es un buen chiche y tiene muy buenas aplicaciones y espero que mientras pase el tiempo salgan más y mejores.

Saludos,
Gorka


Pagination