iExec presentó recientemente nuevas herramientas de desarrollo para abordar el caso de uso de "Marketing de mejora de la privacidad". Estas herramientas son iExec DataProtector e iExec Web3Mail. Estas herramientas de desarrollo, que existen como paquetes de código npm fáciles de usar, tienen como objetivo revolucionar la forma en que las DApps manejan la privacidad y la comunicación de los datos. Este artículo profundizará en las funciones técnicas de DataProtector y Web3Mail.

Protector de datos iExec

iExec DataProtector es una herramienta diseñada para proteger los datos del usuario mediante la utilización de un mecanismo de cifrado y la gestión de los derechos de acceso a través de contratos inteligentes. Los propietarios de datos pueden otorgar permiso a las aplicaciones, permitiéndoles usar datos, sin revelar los datos en sí.

Esta herramienta es una solución eficiente para el manejo de datos; agrupa y simplifica las funcionalidades del conjunto de datos de iExec, como el cifrado de datos y la gestión de derechos de acceso. Además, DataProtector facilita la recuperación de todos los datos protegidos asociados con un propietario específico o un esquema de datos específico (consulte a continuación un ejemplo de esquema de datos). También proporciona al usuario la capacidad de revocar uno o todos los derechos de acceso a los datos. En otras palabras, los propietarios de datos tienen la capacidad de administrar y controlar dinámicamente los permisos de acceso, lo que garantiza una sólida seguridad y privacidad de sus datos, con una herramienta fácil de usar.

En el ecosistema iExec, un conjunto de datos es un token no fungible (NFT) que se utiliza como mecanismo de gobierno para datos confidenciales. En iExec Marketplace, los proveedores de conjuntos de datos crean y firman "órdenes de conjuntos de datos" que especifican la gobernanza del conjunto de datos, p. qué Dapp puede usar el conjunto de datos. En DataProtector, los propietarios de datos definen reglas de acceso de nivel superior que se traducen automáticamente en órdenes de conjuntos de datos.

DataProtector se puede integrar fácilmente en cualquier proyecto de software (inicio rápido) para que las aplicaciones informáticas confidenciales autorizadas puedan acceder fácilmente a los datos protegidos.

DataProtector se basa en:

1/ un contrato inteligente de DataProtector que interactúa con el contrato inteligente de DatasetRegistry para crear un conjunto de datos;

2/ un subgrafo de DataProtector, un servidor fuera de la cadena que observa continuamente los eventos en la cadena de bloques y luego almacena, indexa y recupera datos protegidos por DataProtector y utiliza los siguientes componentes del protocolo iExec:

  • El contrato inteligente DatasetRegistry para crear/acuñar el conjunto de datos correspondiente asociado con los datos protegidos

  • el contrato inteligente PoCo para gestionar los derechos de acceso

  • el iExec Marketplace para compartir pedidos

  • el Servicio de Gestión de Secretos (SMS) para almacenar los secretos de los usuarios

Las seis funciones de DataProtector

1/ ProtectData cifra los datos de los usuarios y registra la propiedad en un contrato inteligente.

Para proteger sus datos, un usuario llama a la función protectData proporcionando los datos como entrada. Opcionalmente, el usuario también puede especificar un nombre para los datos, que serán información pública y permanecerán sin cifrar. Si no se proporciona ningún nombre, se asigna como "Sin título".

Aquí, un ejemplo de un objeto de datos:

datos:
{
correo electrónico: 'ejemplo@gmail.com',
Servidor SMTP: {
puerto: 5000,
smtp_server: 'smtp.gmail.com'
}
}

En este ejemplo, el objeto de datos consta de dos claves: correo electrónico y servidor SMTP. El valor del correo electrónico es ejemplo@gmail.com. El valor de SMTPserver comprende otros dos pares clave/valor: puerto con el valor 5000 y smtp_server con el valor smtp.gmail.com.

Luego, la función ProtectData ejecuta los siguientes pasos:

  1. Extraiga el esquema de datos, es decir, la clave y el tipo diferente de cada valor. Aquí, el esquema de datos correspondiente del ejemplo de datos anterior:

esquema de datos:
{
"correo electrónico": "cadena",
"Servidor SMTP": {
"puerto": "int",
"smtp_server": "cadena"
}
}

2. Cree un archivo de datos que se vea como una carpeta. En esta carpeta, se crea un archivo para cada clave. El tipo de cada archivo coincide con el tipo de la clave correspondiente y el archivo contiene el valor correspondiente especificado en los datos. Es posible tener subdatos que correspondan a los pares subclave/valor de una clave. Esta clave se crea como una carpeta en la que se crea un archivo para cada par de subclave/valor. La carpeta global está comprimida en un archivo.

Aquí, el archivo correspondiente del ejemplo de datos anterior:

Ejemplo: parte derecha a incluir

Esta estructura de árbol le permite proteger cualquier tipo de datos, como archivos, texto, imágenes y más. Además, el archivo resultante se puede cargar fácilmente en cualquier plataforma de almacenamiento, lo que facilita los procesos de almacenamiento y recuperación de datos.

3. Genere una clave de cifrado y cifre el archivo. En este cifrado se utiliza el esquema de cifrado estándar AES-256-CBC. Luego, el archivo cifrado se envía al almacenamiento público de IPFS.

4. Envíe al contrato inteligente de DataProtector el esquema de datos junto con los argumentos de creación de conjuntos de datos clásicos:

  • El contrato inteligente de DataProtector llama al contrato inteligente de DatasetRegistry para crear el conjunto de datos correspondiente y transmite el esquema de datos en un evento de blockchain.

  • El subgrafo DataProtector observa este evento e indexa los datos protegidos.

5. Introduzca la clave secreta de cifrado en el SMS.

6. Devolver al usuario los valores de datos protegidos y metadatos.

2/ GrantAccess que autoriza a una aplicación a utilizar los datos de los usuarios sin revelar nunca los datos en sí.

grantAccess diagram iExec

Un propietario de datos utiliza la función GrantAccess para autorizar a una aplicación y a un solicitante a acceder a sus datos protegidos. Esta función toma como entradas datos protegidos, Aplicación autorizada y Usuario autorizado que son las direcciones de los datos protegidos, la aplicación y el usuario respectivamente. Luego, la función GrantAccess ejecuta los siguientes pasos:

  1. Cree un orden de conjunto de datos para establecer las reglas de gobernanza, es decir, los derechos de acceso para la aplicación autorizada y el usuario autorizado, firmados por el propietario del conjunto de datos.

  2. Publique el orden del conjunto de datos en iExec Marketplace.

  3. Devuelve al usuario el orden del conjunto de datos.

3/ revokeAllAccessObservable que revoca el acceso de todas las aplicaciones a datos protegidos específicos.

Un propietario de datos llama a la función revokeAllAccessObservable con el valor protectedData y, opcionalmente, el filtro de aplicación autorizada y/o el filtro de usuario autorizado. Luego, la función revokeAllAccessObservable ejecuta los siguientes pasos:

  1. Consulta los pedidos de conjuntos de datos en el mercado y, si se proporcionan, coincide con los filtros.

  2. Para cada pedido de conjunto de datos, revoca el pedido de conjunto de datos con una llamada al contrato inteligente de PoCo que emite un evento de esta revocación. La API de Marketplace observa este evento y borra el pedido correspondiente.

  3. Para cada acceso revocado, devuelve el orden del conjunto de datos y la transacción firmada por el propietario que revoca este acceso.

4/ revokeOneAccess que revoca el acceso de una aplicación a un conjunto de datos protegido específico.

La función revokeOneAccess es similar a la función revokeAllAccessObservable excepto que la revocación es para un acceso. Un propietario de datos llama a revokeOneAccess con concedidoAccess como entrada para iniciar la revocación de este acceso. El valor de concedidoAccess se puede obtener de la función fetchGrantedAccess. Luego, revokeOneAccess ejecuta los siguientes pasos:

  1. Solicitar una revocación del conjunto de datos correspondiente al contrato inteligente PoCo que emite un evento de esta revocación. La API de Marketplace observa este evento y borra el pedido correspondiente.

  2. Devuelve el orden del conjunto de datos y la transacción firmada por el propietario que revoca el acceso.

5/ fetchProtectedData que recupera datos cifrados protegidos por DataProtector.

Un usuario llama a la función fetchProtectedData con, opcionalmente, un filtro de propietario (para obtener solo los datos cifrados de un usuario en particular) y/o un filtro de esquema de datos (para recuperar los datos cifrados con un esquema específico). Luego, la función fetchProtectedData procesa los siguientes pasos:

  1. Consulta los datos protegidos en el subgrafo DataProtector, haciendo coincidir opcionalmente los filtros.

  2. Devuelve al usuario una matriz de los datos protegidos solicitados, es decir, nombre, dirección, propietario y esquema de cada dato protegido, haciendo coincidir opcionalmente los filtros.

6/ fetchGrantedAccess que proporciona la lista de accesos otorgados sobre un dato protegido específico.

La función fetchGrantedAccess tiene un mecanismo similar a la función fetchProtectedData, excepto que la solicitud es para los accesos concedidos a unos datos protegidos determinados. Esta solicitud funciona de la siguiente manera:

  1. Un usuario llama a fetchGrantedAccess con protectedData como entrada. Opcionalmente, el usuario puede solicitar solo las aplicaciones autorizadas y/o el solicitante autorizado especificando los filtros AuthorizedApp y AuthorizedUser respectivamente.

  2. fetchGrantedAccess consulta el orden del conjunto de datos que coincide con los filtros de la API de Marketplace y devuelve una matriz de todos los accesos concedidos.

Caso de uso de ejemplo: Web3Mail

Utilizando DataProtector, Web3Mail es una herramienta para que los desarrolladores creen aplicaciones que permitan enviar un correo electrónico a los titulares de cuentas de Ethereum sin conocer su dirección de correo electrónico. Al aprovechar esta herramienta, los usuarios finales pueden eliminar el requisito de compartir su dirección de correo electrónico con varios terceros, mitigando significativamente los riesgos asociados con las filtraciones de datos y el spam.

Web3Mail se basa en DataProtector para proteger las direcciones de correo electrónico e interactuar con el protocolo iExec, la DApp sendEmail y el servicio mailjet para enviar correos electrónicos.

En iExec Marketplace, los proveedores de aplicaciones crean y firman "órdenes de aplicación" que especifican la gobernanza de la aplicación, p. la tarifa por cada ejecución de la DApp. En Web3Mail, la DApp sendEmail ya está implementada y el pedido de aplicación correspondiente se ha firmado y publicado en iExec Marketplace. La DApp sendEmail toma el asunto y el contenido del correo electrónico como secretos del solicitante y envía un correo electrónico a la dirección de correo electrónico protegida.

En el protocolo iExec, los secretos del solicitante son parámetros que solo se exponen a aplicaciones autorizadas dentro de enclaves y nunca salen de ellos. En Web3Mail, solo sendEmail DApp puede acceder al asunto y al contenido de los correos electrónicos.

En primer lugar, los titulares de cuentas de Ethereum utilizan DataProtector para proteger sus direcciones de correo electrónico y otorgar permiso a otros usuarios para enviarles correos electrónicos. El titular de una cuenta Ethereum puede especificar un límite predeterminado para acceder a su correo electrónico protegido. Una vez que se alcanza este límite, el titular de la cuenta debe llamar a la función GrantAccess de DataProtector para otorgar permiso para que se le envíen más correos electrónicos.

Para cada correo electrónico protegido, se creó un conjunto de datos y el orden del conjunto de datos correspondiente se firmó y publicó en iExec Marketplace y fue indexado por Graph.

Web3Mail consta de dos funciones:

  • fetchMyContacts que devuelve la lista de cuentas de Ethereum cuyos propietarios han autorizado a enviarles correos electrónicos. Un usuario llama a la función fetchMyContacts que ejecuta los siguientes pasos:

  1. Envíe una solicitud a la API de Marketplace para recuperar la lista de pedidos de conjuntos de datos para los cuales los propietarios han otorgado permiso al usuario para acceder y utilizar su conjunto de datos protegido.

  2. Solicite los correspondientes conjuntos de datos protegidos al Graph.

  3. Verifique si cada conjunto de datos incluye un campo de correo electrónico, asegurándose de que el esquema de cada conjunto de datos protegido coincida con "correo electrónico: cadena".

  4. Devuelve al usuario la lista de contactos válidos, incluido el conjunto de datos protegido y las direcciones de los propietarios.

  • sendEmail que envía un correo electrónico a un usuario conociendo solo la cuenta de Ethereum

Un usuario invoca la función sendEmail para enviar un correo electrónico a un titular autorizado de una cuenta Ethereum, que puede recuperarse mediante la función fetchMyContacts. El usuario especifica el asunto del correo electrónico emailSubject, el contenido del correo electrónico emailContent y la dirección de correo electrónico protegida protectedData.

La función sendEmail crea y firma una orden llamada "requestorder" para solicitar una ejecución de la DApp sendEmail. Por tanto, el proceso de esta función es similar a crear una solicitud para una tarea en el protocolo iExec.

En el ecosistema iExec, una tarea es una instancia en la que se requiere potencia informática. La tarea es la ejecución de un acuerdo entre un orden de conjunto de datos, un orden de aplicación, un pedido de solicitud y un orden de grupo de trabajadores, que indica qué trabajadores están disponibles para qué categoría de tareas. En Web3Mail, una tarea es una ejecución de sendEmail DApp con el correo electrónico protegido como conjunto de datos, el asunto del correo electrónico y el contenido del correo electrónico como secretos del solicitante.

sendEmail procesa los siguientes pasos:

  1. Consulta el SMS para comprobar la existencia del token de almacenamiento. Este token se utiliza como token de autenticación para que el trabajador cargue el resultado de la tarea. Esto garantiza que solo el trabajador autorizado pueda enviar el resultado de la tarea.

  2. Solicite el conjunto de datos protegido correspondiente al Gráfico y verifique si cada conjunto de datos incluye un campo de correo electrónico.

  3. Solicitud a la API de Marketplace: el orden del conjunto de datos del correo electrónico protegido con la dirección de datos protegidos, el orden de aplicación de sendEmail DApp, el orden de grupo de trabajadores

  4. Inserte emailSubject y emailContent como secretos del solicitante (consulte la documentación técnica de iExec para obtener más detalles).

  5. Cree y firme una orden de solicitud para solicitar una ejecución de sendEmail DApp con emailSubject y emailContent como secretos del solicitante. En la orden de solicitud, el usuario puede especificar el precio que está dispuesto a pagar por la ejecución de la tarea.

  6. Notifique al contrato inteligente de PoCo que existe una coincidencia de pedidos entre el pedido de aplicación, el pedido de conjunto de datos, el pedido de grupo de trabajadores y el pedido de solicitante. Luego, el contrato inteligente de PoCo: verifica y valida la coincidencia, emite una coincidencia de órdenes y una notificación al planificador del grupo de trabajadores, devuelve el acuerdo.

  7. Solicitud para calcular la tarea correspondiente del acuerdo al contrato inteligente de PoCo. El programador que ya ha observado la coincidencia de las órdenes y la notificación del contrato inteligente de PoCo inicia la tarea que desencadena la ejecución de la DApp de sendEmail.

  8. Devuelve el ID de tarea al usuario.

Limitaciones de estas herramientas

DataProtector y Web3Mail utilizan la Computación Confidencial (CC) desarrollada por iExec. El SMS utilizado en iExec CC es un componente centralizado en el que los usuarios envían sus secretos, p. la clave secreta para cifrar datos. Cuando se recibe un secreto, el SMS crea una sesión segura dentro del CAS (Servicio de configuración y atestación), introduce el secreto y concede acceso a él a la aplicación asociada con la orden solicitada. Sin embargo, debido a la naturaleza centralizada del SMS, existe un posible punto único de falla. Si el CAS o el SMS se actualizan o no funcionan, existe el riesgo de perder los secretos almacenados. Para abordar esta preocupación, iExec está trabajando activamente para descentralizar el SMS, mitigando así el problema antes mencionado y mejorando la resiliencia general del sistema.

Es importante señalar que Web3Mail utiliza los servicios de Mailjet y emplea una dirección de correo electrónico intermedia para facilitar el envío de correos electrónicos. El nivel de confianza en Web3Mail está directamente relacionado con la confianza depositada tanto en el servicio mailjet como en iExec que lo opera y tiene la capacidad de acceder a las direcciones de correo electrónico y al contenido del correo electrónico.

¡Gracias por leer!

💬 Si desea preguntar algo sobre estas herramientas o conocer oportunidades de financiación, no dude en comunicarse con el equipo de iExec en nuestro servidor oficial de Discord.

📚Comience a utilizar estas herramientas; consulte la documentación de iExec

$RLC #iExec #AI #Web3 #blockchain #Dapps