Administración y uso de identidades en Concordium

Sami
12 min readSep 30, 2021

--

Muy pocos proyectos se atreverían con una de las mayores controversias del entorno “blockchain” y del mundo digital en general, el derecho a la privacidad y el anonimato vs la necesidad de una identidad verificada.

A priori puede parecer un tema difícil de abordar y en el que parece imposible que empresas y usuarios sientan protegidos sus intereses. Concordium ha demostrado una vez más una gran capacidad de desarrollo al conseguir integrar seguridad y privacidad y hacer que parezca hasta sencillo.

Os dejo el enlace al artículo en inglés y a continuación la traducción del mismo: https://medium.com/concordium/managing-and-using-identities-in-concordium-86c3303b905

Concordium Blockchain tiene una capa de identidad integrada en los protocolos centrales. Esto significa que antes de que un individuo o entidad pueda enviar transacciones a Concordium Blockchain, su identidad en el mundo real debe ser verificada por un proveedor de identidad. La capa de identidad permite que suficientes terceros (según un criterio específico) predefinidos identifiquen a los titulares de cuentas en caso de una investigación oficial. Excepto por esto, los usuarios pueden crear cuentas y usarlas de forma privada y estas cuentas no se pueden vincular al titular de la cuenta ni entre sí.

En este artículo, no profundizaremos en la revocación del anonimato, sino que profundizaremos en el uso más amplio de la capa de identidad y describiremos cómo el usuario puede administrar y controlar la información privada dentro de la capa de identidad. Además, discutiremos cómo esto es compatible con las próximas bibliotecas de identidad de Concordium.

Preparando la escena

Al no considerar la revocación del anonimato, el requisito general de la capa de identidad es que debe garantizar que toda la información personal sea correcta y permitir que el usuario controle su información. Echemos un breve vistazo a cada uno de estos requisitos.

Por corrección, nos referimos a que los datos personales han sido validados por una entidad a la que llamaremos Proveedor de Identidad. Las partes de confianza que confían en que el proveedor de identidad valida la información personal correctamente pueden actuar sobre esa información. El sistema debe admitir varios proveedores de identidad, ya que pueden ser necesarios diferentes proveedores de identidad para diferentes jurisdicciones y puede haber razones objetivas y subjetivas adicionales para confiar en un proveedor de identidad. Una parte que confía puede, en particular, confiar en que un proveedor de identidad específico realiza la validación en un grado suficiente para algunas aplicaciones pero no para otras. Por lo tanto, el proveedor de identidades y la solución general deben proporcionar suficiente información para permitir que las partes de confianza tomen esta decisión.

La otra parte de la solución es que el usuario debe tener el control de qué datos personales se revelan en una situación particular. Si bien muchas soluciones de identificación existentes obligan a los usuarios a presentar muchos más datos de los necesarios para un propósito específico, el tiempo se está agotando para tales soluciones, ya que los usuarios solo deben presentar los datos necesarios para el propósito. El ejemplo típico es que si un usuario debe tener una cierta edad, es suficiente mostrar la edad o, mejor aún, demostrar ser mayor de lo requerido sin revelar la edad. No hay necesidad de revelar otra información personal.

En una solución de blockchain como Concordium Blockchain, otro aspecto importante a manejar es dónde se publican los datos. Analicemos dos posibilidades. El primero que me viene a la mente es publicar datos personales en la cadena de bloques. Puede haber buenas razones para esto, ya que algunas aplicaciones de blockchain pueden necesitar esto (nuevamente, un contrato inteligente puede requerir que las personas que lo usen tengan más de cierta edad). Por lo tanto, una buena solución de identidad debe permitir que los datos personales sean accesibles en la cadena de bloques. Sin embargo, como los datos en la cadena de bloques no se pueden eliminar, en general, se debe tener cuidado y simplemente evitar publicar datos personales aquí.

Por lo tanto, para obtener el máximo beneficio de la capa de identidad, también debe respaldar el uso de identidades y datos personales fuera de la cadena. Aquí los usuarios muestran o prueban propiedades como parte de aplicaciones específicas sin revelar datos personales en la cadena. La parte que confía puede usar esta información como parte de la aplicación comercial y relacionar esta información con las transacciones en la cadena de bloques (por ejemplo, en contratos inteligentes) que se relacionan con la aplicación comercial. En tales casos, será responsabilidad de la parte que confíe proteger la información recibida de acuerdo con las leyes y regulaciones, por ejemplo, de acuerdo con las disposiciones de GDPR.

Ejemplos

1. Digamos que Alice quiere transferir 5 GTU a Bob. Al recibir la cuenta de Bob, Alice puede querer estar segura de que la cuenta realmente pertenece a Bob. Alice, por lo tanto, le pide a Bob que le demuestre que la cuenta coincide con su identidad. Bob debería poder hacerlo sin revelar este hecho en la cadena, ya que solo quiere que Alice sepa que él tiene la cuenta.

2. Un mercado (por ejemplo, para comprar NFT o transmitir películas) puede requerir que los usuarios sean mayores de 21 años. Como parte del mercado, el usuario debe mostrar su edad o demostrar ser lo suficientemente mayor antes de utilizar el mercado. Tenga en cuenta que esto debe hacerse de tal manera que el mercado pueda relacionar esta prueba con las transacciones de blockchain relacionadas con el mercado.

La capa de identificación de Concordium

Ahora echaremos un vistazo a la capa de IDENTIFICACIÓN en Concordium Blockchain, que se basa en los principios descritos por Damgaard et al. Los tres conceptos centrales son certificados de identidad de usuario, cuentas y credenciales. Estos se describen en detalle a continuación, pero muy brevemente se relacionan de la siguiente manera.

Para enviar cualquier transacción a la cadena de bloques, un usuario debe tener una cuenta. Todas las transacciones del usuario se autorizan utilizando claves privadas / públicas asociadas con la cuenta a través de una credencial, que también contiene la información personal del usuario. Una cuenta multiusuario tiene varias credenciales asociadas, así como un umbral que define el número de firmas necesarias para enviar una transacción. Cada credencial se basa en la información del usuario contenida en un certificado de identidad de usuario que ha sido emitido por un proveedor de identidad durante un proceso de identificación inicial, donde también se validan los datos personales.

A continuación, describiremos cada uno de estos conceptos con más detalle y explicaremos cómo el usuario puede gestionar su identidad.

Certificado de identidad de usuario

Antes de que una persona o entidad pueda utilizar la Plataforma Concordium, su identidad en el mundo real debe ser verificada y registrada por un Proveedor de Identidad. Un resultado de esta validación es que el proveedor de identidades emite un certificado de identidad de usuario al usuario.

El certificado de identidad de usuario incluye atributos como nombre, edad y nacionalidad. Cuando el proveedor de identidades ha validado los atributos, emite un certificado de identidad de usuario, que es básicamente la firma del proveedor de identidades sobre algunas claves criptográficas del usuario y los atributos personales validados. A diferencia de los certificados de clave pública habituales, como los certificados X.509, el certificado de identidad de usuario es privado para el usuario. En particular, no se somete a la cadena. Tenga en cuenta que el Proveedor de identidad también almacena cierta información, pero esto solo se utiliza para una posible investigación posterior de las actividades del usuario (es decir, la revocación del anonimato). El proveedor de identidad no participa en ningún uso posterior del certificado de identidad de usuario. El certificado de identidad de usuario se firma utilizando el esquema de firma de Pointcheval-Sanders.

Cuentas y credenciales

Las cuentas en Concordium Blockchain contienen información necesaria para usar la cuenta, como el número de cuenta y otros datos “administrativos”. Pero en relación con la capa de identidad, la parte interesante es la credencial asociada a la cuenta. Como se mencionó, en el caso general se pueden asociar varias credenciales con la cuenta y un umbral en la información de la cuenta administrativa define cuántas de ellas deben estar involucradas al firmar transacciones en la cuenta. Sin embargo, para facilitar la lectura, solo consideraremos el caso de una credencial asociada con la cuenta.

Entre otros datos, contiene la credencial

- Clave pública necesaria para validar las firmas de esa credencial (el usuario tiene la clave privada correspondiente)

- Referencia al proveedor de identidades que ha emitido el certificado de identidad de usuario subyacente a esta credencial. Esto permite a las partes de confianza decidir si se puede confiar en la información de la credencial en una situación particular en función de la jurisdicción y las directivas del proveedor de identidades.

- Atributos de usuario que han sido validados por el proveedor de identidades. Los atributos del usuario pueden revelarse en la cadena o permanecer ocultos en los compromisos de protección de la privacidad. En cualquier caso, al crear la credencial el usuario acredita que todos los atributos han sido validados por el Proveedor de Identidad mediante una prueba de conocimiento cero, que demuestra que el usuario dispone de un certificado de identidad de usuario del Proveedor de Identidades que contiene estos atributos. Esta prueba de conocimiento cero no revela el certificado de identidad del usuario y, por lo tanto, se puede enviar a la cadena al crear la credencial.

Una propiedad esencial de esta construcción es que cualquier persona que conozca la clave pública del proveedor de identidad puede verificar la prueba de conocimiento cero y, por lo tanto, estar seguro de que todos los atributos han sido aprobados por el proveedor de identidad. Además, el usuario puede seleccionar qué atributos revelar en la cadena y qué atributos mantener en secreto. Por lo tanto, a un alto nivel, el usuario puede administrar su identidad creando diferentes cuentas con diferentes credenciales. La capa de identidad garantiza que dichas cuentas y credenciales se puedan crear a partir del mismo certificado de identidad de usuario y que no se puedan vincular entre sí.

Ejemplo

Si un usuario a veces tiene que revelar su nacionalidad, el usuario puede crear una cuenta sin atributos revelados para uso general y otra cuenta que revele la nacionalidad. En las solicitudes que requieran que se conozca la nacionalidad, el usuario utilizará esta última cuenta y, de lo contrario, la primera.

Ahora, si bien el manejo de diferentes credenciales mediante la creación de diferentes cuentas y credenciales le da al usuario un buen nivel de control sobre sus datos personales, esto no es suficiente. Una razón es que puede ser engorroso administrar demasiadas cuentas y otra es que, como se mencionó anteriormente, generalmente se debe abstenerse de publicar datos personales en la cadena de bloques.

Por lo tanto, ahora analizaremos más de cerca la granularidad del control del usuario sobre los datos personales en las cuentas existentes y la capacidad de revelar información personal en aplicaciones fuera de la cadena.

Control de la información personal

Recuerde que el usuario tiene tres tipos de información privada en relación con el certificado de identidad del usuario y la credencial.

La información privada en el certificado de identidad del usuario básicamente permite al usuario crear nuevas credenciales correspondientes a nuevas expresiones de su identidad. En la cadena de bloques, esto se usa al crear nuevas cuentas, pero también se puede aplicar en otras aplicaciones no relacionadas con la cadena de bloques.

Hay dos tipos de información secreta relacionada con una credencial: las claves privadas utilizadas para autorizar acciones (es decir, para firmar transacciones) y la información privada para revelar atributos ocultos (es decir, para abrir compromisos). Estos dos tipos tienen diferentes requisitos de seguridad.

Veamos primero la clave de credencial privada para firmar transacciones. Una vez que la credencial está asociada a una cuenta, esta clave se utiliza para aprobar todas las transacciones en esa cuenta. Por lo tanto, esta clave debe protegerse con mucho cuidado para proteger los activos de la cuenta y garantizar que otras personas no puedan hacerse pasar por el titular de la cuenta.

El otro tipo, la información privada para revelar atributos ocultos, no es sensible en relación con la protección de dichos activos, pero obviamente es importante por razones de privacidad.

Las bibliotecas de identidad de Concordium descritas en la siguiente sección proporcionarán funcionalidad para crear y administrar credenciales. Un aspecto importante de esto es que las bibliotecas solo necesitan las claves / datos secretos que protegen los atributos ocultos. Es importante destacar que las bibliotecas no necesitan la clave de firma de transacciones y, por lo tanto, será posible crear aplicaciones para administrar y usar atributos personales relacionados con cuentas existentes en la cadena sin exponer la clave de firma de transacciones correspondiente a las bibliotecas.

Bibliotecas de identidad

Idealmente, las identidades son administradas por la billetera preferida del usuario. Sin embargo, a la luz del trabajo a medida que se realizará para admitir la capa de identidad de Concordium en las billeteras existentes, Concordium planea apoyar el desarrollo de una billetera de identidad que pueda ayudar a un usuario a crear y administrar identidades y credenciales inicialmente. El código fuente de Identity Wallet estará abierto para facilitar la integración posterior en las carteras existentes.

Con el fin de utilizar identidades y explotar la flexibilidad de las credenciales, Concordium también lanzará la Biblioteca de Identidades concordium que permite una fácil integración de la solución de identidad en las aplicaciones.

Como se mencionó anteriormente, tres tipos de secretos están involucrados en la capa de identidad:

- El certificado de identidad de usuario necesario para crear nuevas credenciales

- Las claves utilizadas para firmar transacciones

- Información secreta para revelar y probar propiedades de atributos ocultos en una credencial

La Biblioteca de Identidad de Concordium solo utilizará el primero y el último de estos y proporcionará funcionalidad que cubra las siguientes áreas.

Crear credencial

Uso del certificado de identidad de usuario para crear una nueva credencial. Los atributos del certificado de identidad de usuario pueden revelarse u ocultarse en la credencial, pero al igual que al crear cuentas en la cadena de bloques, todos los que conocen la clave pública del proveedor de identidades pueden verificar que los atributos hayan sido aprobados por el proveedor de identidades. La credencial contendrá una clave de firma que se puede usar en aplicaciones que no involucren la cadena de bloques.

Verificar credencial

Usar la clave pública del proveedor de identidades para comprobar que una credencial se ha construido correctamente a partir de un certificado de usuario de identidad emitido por ese proveedor de identidades. Como consecuencia, esto también proporciona la seguridad de que el proveedor de identidades ha aprobado todos los atributos. La clave pública se puede recuperar de la cadena de bloques utilizando una referencia en la credencial.

Abrir atributo

El valor de un atributo oculto se divulga utilizando la información privada correspondiente.

Verificar atributo

Comprobar que un atributo oculto de una credencial se ha abierto correctamente. Esta funcionalidad estará disponible tanto para su uso en contratos inteligentes como en aplicaciones fuera de la cadena.

Atributo de prueba

Al abrir un atributo, cualquiera puede obtener y validar su valor. Así se “divulga al mundo entero”. Usando la funcionalidad de “atributo de prueba”, el propietario puede demostrar con conocimiento cero a otra parte que el atributo tiene un valor particular. Esto convencerá a la otra parte sobre su valor, pero esta otra parte no puede usar la prueba en un momento posterior para convencer a terceros. Para lograr esto, alguna interacción con el verificador será parte de la prueba.

Verificar prueba de atributo

Funcionalidad que permite a las partes de confianza participar y verificar la prueba de un atributo.

Propiedad de prueba de atributo

Inicialmente, esta funcionalidad proporcionará “pruebas de rango” para atributos con un orden bien definido. El mejor ejemplo es demostrar que “la edad > 21 años”. Si es necesario, se pueden agregar propiedades más complejas más adelante.

Verificar la propiedad del atributo

Esto es para verificar pruebas de propiedades de atributos. Esta funcionalidad estará disponible tanto para su uso en contratos inteligentes como en aplicaciones fuera de la cadena.

Conclusión

Hemos descrito cómo un usuario puede administrar datos personales creando diferentes cuentas y cómo el usuario puede obtener un control flexible sobre los datos personales contenidos en las credenciales de la cuenta.

Volvamos a los dos ejemplos desde el principio y veamos cómo están habilitados por Concordium Identity Libraries.

El primer ejemplo, donde Alice quiere estar segura de la identidad de Bob antes de transferir 5 GTU a Bob se puede manejar de la siguiente manera. Usando la funcionalidad “Abrir atributo”, Bob puede revelar su atributo de nombre a Alice. Usando la funcionalidad “Verificar atributo”, Alice puede verificar que el atributo de nombre oculto en la credencial de la cuenta que recibió de Bob se abra correctamente. Ahora, esto le permite a Alice revelar el nombre de Bob a todos. Esto puede estar bien si Bob confía en que Alice no lo hará. De lo contrario, Bob debería usar la funcionalidad “Probar atributo” para probar su nombre a Alice.

En el ejemplo del mercado, se le puede pedir al comprador de un NFT o una película que demuestre que su edad es mayor de 21 años. Esta prueba se puede generar utilizando la “Propiedad de atributo de prueba” y enviarse con la transacción al contrato inteligente que administra el mercado. El contrato inteligente solo transferirá la propiedad si la prueba tiene éxito. Alternativamente, Bob puede agregar esta prueba a su credencial de cuenta, de modo que cada vez que use la cuenta, se pueda verificar que pertenece a una persona mayor de 21 años.

Si bien estos ejemplos solo arañan la superficie de las posibilidades, creemos que la capa de identidad de Concordium será atractiva en muchas aplicaciones, ya que permite al usuario revelar solo los datos personales necesarios para una aplicación en particular, al tiempo que brinda a la parte de confianza una gran confianza en la exactitud de la información sobre el usuario.

Until we meet again…

Para más información sobre Concordium:

Telegram oficial: https://t.me/concordium_official

Telegram ES: https://t.me/joinchat/O3x5ADP6MSI5NTlk

Twitter: https://twitter.com/ConcordiumNet

Conoce Concordium: https://developer.concordium.software/

--

--

Sami

La curiosidad es el mejor vehículo hacia el conocimiento. MSPI