¿Ethereum ofrece aplicaciones de comunicación entre pares encriptadas?

Me pregunto si Ethereum se puede usar para la comunicación encriptada entre pares, como la entrega de mensajes cortos encriptados o datos encriptados a granel entre dos o varias partes.

¿Hay algún ejemplo o aplicación que pueda revisar?

Respuestas (2)

Consulte la sección Casos de uso en el protocolo Ethereum Whisper en https://github.com/ethereum/wiki/wiki/Whisper-Overview :

  • shh.post({ "topic": t, "payload": p });Sin firma, sin cifrado: transmisión anónima; un poco como un feed de Twitter filtrado por tema anónimo.
  • shh.post({ "from": myIdentity, "topic": t, "payload": p });Firma abierta, sin cifrado: transmisión con firma clara; un poco como un feed de Twitter normal: cualquier persona interesada puede ver que una identidad en particular está enviando cosas particulares a nadie en particular.
  • shh.post({ "to": recipient, "topic": t, "payload": p });Sin firma, cifrado: mensaje anónimo cifrado; un poco como un buzón anónimo: el mensaje es privado para el propietario del buzón. No pueden decir de quién es.
  • shh.post({ "from": myIdentity, "to": recipient, "topic": t, "payload": p });Firma secreta, encriptación: Mensaje firmado encriptado; como un correo electrónico seguro. Una identidad le dice algo a otra, nadie más puede leerlo. Solo el destinatario sabe que proviene del remitente.
  • shh.post({ "from": myIdentity, "to": recipient, "topic": t, "payload": p, "deniable": d });Firma secreta, encriptación con negación plausible opcional. Si el parámetro booleano d es falso, es equivalente a la llamada anterior. Si d es verdadero, el destinatario no puede probar a ningún tercero que el mensaje proviene del remitente, aunque aún puede verificarlo por sí mismo. Esto se logra calculando la firma digital en la clave de cifrado de sesión simétrica en lugar del cuerpo del mensaje.

Respuesta a su comentario a continuación

Citando Péter Szilágyide ¿Cuáles son las técnicas efectivas para cifrar/descifrar datos almacenados en un contrato inteligente? :

Dado que todas las transacciones y los datos en la cadena de bloques son públicos, debe cifrar los datos fuera de Ethereum e insertar los datos ya cifrados. Del mismo modo, debe extraer los datos cifrados y descifrarlos localmente. Estoy seguro de que hay muchas bibliotecas criptográficas para javascript que le permitirán hacer esto, dudo que web3 contenga dicha funcionalidad, ya que está fuera de su alcance.

Y citando dbryson¿ Pueden los contratos inteligentes calcular datos cifrados? :

Si entiendo su pregunta correctamente, a lo que se refiere se llama cálculo seguro de múltiples partes, que no es una capacidad actual de los contratos inteligentes. De hecho, es un problema desafiante que probablemente se resuelve mejor fuera de la cadena de bloques, ya que puede ser computacionalmente intensivo. Recomiendo mirar los proyectos enigma y openPDS del MIT para empezar. No he visto ningún hito planificado para esta capacidad en Ethereum.

También es posible que desee consultar lo siguiente:

@BokkyPoohBah Muchas gracias por su respuesta. ¿Conoce alguna Dapp que esté implementada para realizar encriptación pequeña o masiva? ¿Cómo se puede integrar el contrato inteligente con el cifrado usando Whisper para que, por ejemplo, una vez que se realiza el cifrado, el descifrado se realice dentro de las 24 horas y una vez que se realiza el descifrado, no se puede volver a realizar? ¿Tiene sentido?
¿Existe una limitación en el tamaño de los datos cifrados que se pueden colocar en la cadena de bloques de Ethereum?

Acabamos de proponer nuestro proyecto UnwiredApp basado en Ethereum. eso es básicamente un contrato inteligente que registra mensajes relacionados con un usuario determinado y permite que el destinatario y solo él los lea. El video de lanzamiento está aquí .

El código de solidez esencial en el contrato inteligente es el siguiente:

struct mess {
  uint256 idMessage;
  uint256 idPrevious;
  uint256 timestamp;
  address from;
  string message;
}

/* Array with all messages with structure messages[to][idMessage] */
mapping (address => mapping (uint256 => mess)) public messages;

Por lo tanto, cada mensaje almacenado es una estructura que contiene valores para la identificación, un puntero al mensaje anterior, la marca de tiempo, el remitente (de) y el mensaje en sí mismo como una cadena.

Todos los mensajes se almacenan en una asignación con 2 índices, "a" y "idMessage". De esta manera, el contrato inteligente siempre puede responder sobre los últimos mensajes para una cuenta determinada.

¿Y cómo funciona ese contrato? Si bien esto puede responder teóricamente a la pregunta, sería preferible incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia.
Bueno, he añadido algunas explicaciones. Espero que ayude.