Geronimo Patat, Escritor y editor de IOTA Hispano
Si te gusta lo que hacemos, colabora a que podamos seguir haciendolo!
Escrito originalmente por Eric Hop
El problema de las donaciones
Durante mucho tiempo uno de los problemas con IOTA ha sido la imposibilidad de tener una dirección de donación segura y fija reutilizable. Esto se debe enteramente a la naturaleza de firma única de las direcciones IOTA. Usted no puede simplemente publicar una dirección IOTA y hacer que la gente envíe fondos allí, porque una vez que usted gasta desde una dirección de este tipo, esa dirección ya no debe ser utilizada. Por supuesto, no se puede hacer cumplir el cierre de la dirección, ya que es posible que la gente la haya marcado como favorita y aún así puedan enviarle fondos después de que usted la haya gastado. En cuyo caso te abres a un ataque de fuerza bruta en el momento en que intentas gastar el siguiente lote de fondos.
La mayoría de las soluciones que se han propuesto requieren un servidor separado y/o la cooperación del software de la billetera. Por lo general, se trata de generar un montón de direcciones de recepción por adelantado que son distribuidas por el servidor a los remitentes, o -peor aún- el servidor recibirá los fondos por usted y (con suerte) se los entregará cuando usted lo solicite.
Obviamente hay todo tipo de problemas (potenciales) con estos enfoques.
La solucion propuesta
A menudo he descubierto que las soluciones a problemas potencialmente difíciles pueden lograrse poniendo el problema patas arriba. Y éste no era diferente.
¿Quién dice que el destinatario es el que necesita generar la dirección de la donación? ¿Por qué no hacer que el remitente genere una nueva dirección, envíe los fondos allí y, a continuación, se asegure de que el receptor puede acceder a esos fondos?
Resulta que hay una manera muy fácil de hacerlo con IOTA (o cualquier otra moneda criptográfica), simplemente envía la clave privada de la dirección de la donación que contiene los fondos al destinatario. Ahora puede acceder a estos fondos y enviarlos a su propia cartera. Esto resuelve simultáneamente el problema del doble gasto accidental.
El único problema que queda es el de enviar de forma segura la clave privada de la dirección de la donación al destinatario. Pero hemos tenido formas de hacer justamente eso durante mucho tiempo: usando criptografía clave asimétrica. Sólo tiene que firmar la clave privada de la dirección de la donación con una clave de firma pública que obtiene del destinatario y enviar el mensaje cifrado resultante al destinatario.
Ahora el destinatario puede decodificar el mensaje recibido utilizando su clave de firma privada, derivar la clave pública (dirección) de la clave privada de la dirección de la donación, y utilizar esas claves para enviar la donación desde esa dirección a su propio monedero. ¡Tadaa!
Tenga en cuenta que sólo el destinatario podrá descifrar el mensaje recibido, ya que es el único con la clave de firma privada correspondiente. Por lo tanto, el mensaje puede enviarse al descubierto sin que nadie pueda secuestrar los fondos.
Cheques de IOTA
Ahora que tenemos el concepto de la solución se convierte en una cuestión de tener una buena Experiencia de Usuario para que todo este proceso sea fácil de hacer para cualquier usuario. Para facilitar la comprensión del usuario, introduzcamos el concepto de cheque de IOTA. La mayoría de los usuarios pueden crear fácilmente un mapa mental correcto de cómo usar un cheque. Así que llamémoslo así para facilitar la comprensión.
Veremos que simplemente llamándolo así de repente abrimos nuevas maneras de ver esta solución. Porque ahora de repente nos damos cuenta de que podemos usar este concepto para mucho más que sólo donaciones. Escribir un cheque a cualquier persona para cualquier propósito y enviárselo es sólo un pequeño salto ahora. Incluso podemos introducir el concepto de talonario de cheques.
Tenga en cuenta que el remitente necesitará un espacio separado para generar las direcciones de los cheques de todos modos, para evitar el problema de que la billetera accidentalmente gaste los fondos en la dirección del cheque. La solución es simple: una semilla separada. Y como sólo usaremos esta semilla para los cheques, será conocida como nuestra semilla del talonario de cheques. Cada vez que queremos crear un cheque IOTA, generamos una nueva dirección de recepción en nuestro talonario de cheques, y enviamos fondos de la cartera a esa nueva dirección de cheque.
Ahora necesitamos una forma de obtener la clave de firma pública del destinatario. Bueno, ¿adivina qué? Ese es un problema que ha sido resuelto hace mucho tiempo. Usamos un tipo especial de url. Propongo utilizar para ello los enlaces profundos de IOTA. Esto nos permite hacer mucho más, como pronto se verá.
Enlaces profundos de IOTA
Entonces, ¿qué le parecería tener un enlace en el que los usuarios puedan hacer click, que invoque su billetera y luego cree automáticamente un cheque para usted, de modo que todo lo que necesiten hacer sea rellenar el importe y enviárselo a usted? Esto se puede hacer con enlaces profundos IOTA. Supongamos que la clave de firma privada del receptor es (al estilo IOTA) una cadena de trytes. Propongo no utilizar 81 o 90 trytes, para evitar confusiones con semillas y direcciones. Pero cualquier otro largo probablemente estará bien.
Entonces una url de solicitud de cheque IOTA se convertiría en algo así como:
http://iotalias.link/request/KMNQG9VDSCGH….KKIJU9HGFDSXVJK
Incluso sería posible añadir un importe predefinido:
http://iotalias.link/request/2.35Mi/KMNQG9VDSCGH….KKIJU9HGFDSXVJK
Las posibilidades son infinitas.
Apoyar esto con una billetera es bastante fácil. La billetera muestra una pantalla pidiendo el importe a enviar, a continuación crea una dirección de cheque en su talonario de cheques y envía el importe allí. Mientras los fondos están en marcha, la billetera cifra la clave privada de la dirección del cheque con la clave de firma pública del destinatario KMNQG9VDSCGH….KKIJU9HGFDSXVJK (decodificada primero de trytes a bytes), codifica los bytes de mensaje resultantes como trytes y envía los trytes al destinatario.
Ahora aquí es donde se vuelve interesante. Como en realidad no importa cómo recibe el destinatario el cheque IOTA, existen varias posibilidades:
- Enviar los trytes como una url de enlace profundo de IOTA en una dirección de correo electrónico o mensaje de chat, o incluso como SMS. Algo así como:
http://iotalias.link/cheque/KLUGVES9XGPL….KYBN9FWAXBJJBFDCV
El receptor ahora puede hacer clic en la url recibida, que iniciará su billetera, que luego procesa la cadena de tryte como se describe anteriormente. - Envíe los trytes como datos de mensaje a una dirección IOTA. En este caso, la billetera del destinatario comprobará regularmente si hay cheques IOTA que lleguen a esa dirección. Si lo hace, procesa el mensaje trytes como se describe anteriormente.
¿A qué dirección enviaremos el cheque de IOTA? Simple! Tome las primeras 81 pruebas de la clave de firma pública del receptor y úsela como dirección a la que enviar. Rellene con 9’s en el improbable caso de que la clave de firma pública fuera inferior a 81 trytes. Ni siquiera tiene que preocuparse si la dirección IOTA resultante ya se utiliza, ya que los mensajes IOTA son transacciones de transferencia cero y sólo el receptor correcto puede descifrar el mensaje. - Envíe las pruebas directamente a otra billetera usando Bluetooth, o NFC, o wifi, o cualquier otro método que esté fácilmente disponible. La billetera receptora enviaría la clave de firma pública a la billetera emisora y el resto es como se describe anteriormente.
Tenga en cuenta que los enlaces profundos IOTA pueden tener muchos más usos debido a su flexibilidad.
Imagínese, por ejemplo, un servidor de alias IOTA que puede convertir cualquier url de la forma mucho más legible http://iotalias.link/alias/Eric.Hop a una cadena tryte correspondiente. Esto significaría que necesitaríamos un servidor donde estos alias puedan ser registrados, por supuesto. Y también significaría probablemente una ejecución en los nombres «populares» tal como sucedió con los nombres de dominio. Pero seguro que ayudaría con la creación de una’guía telefónica’ de cómo contactar a la gente en una dirección asociada. Tal vez para uso con canales MAM o Flash.
Además, sería posible tener diferentes niveles de seguridad o incluso diferentes métodos de encriptación de clave asimétrica (prueba cuántica) y especificarlos en la url:
http://iotalias.link/request/RSA/1024/KMNQG9VDSCGH….KKIJU9HGFDSXVJK
http://iotalias.link/request/NTRU/251/128/3/POKHEWXS….JKBRDX9HNJHJHGV
Conclusión
El método propuesto resuelve el problema de la donación reutilizable de IOTA de una manera elegante usando técnicas ya disponibles. Y como bono, permite enviar tokens de IOTA a cualquier persona usando cualquier método, similar a un cheque. Todo lo que se necesita es un poco de apoyo del software de la cartera:
- Interceptar e interpretar los enlaces profundos de la IOTA.
- Habilitar la creación de cheques IOTA en una semilla de talonario de cheques separada y apoyar el envío a una dirección Tangle, una dirección de correo electrónico, cualquier canal de chat, o incluso como un SMS.
- Posiblemente permitiendo el intercambio directo entre carteras si se desea.
- Ayudar a los usuarios generando sus claves de firma privadas/públicas con el nivel de seguridad deseado.
Si te gusta lo que hacemos, colabora a que podamos seguir haciendolo!