Identidades Semaphore
Para unirse a un grupo Semaphore, un usuario primero deberá crear una identidad Semaphore. Una identidad Semaphore contiene dos valores generados junto con la identidad:
- Identity trapdoor (Identidad trampilla)
- Identity nullifier (Anulador de identidad)
Para utilizar y verificar su identidad, la persona dueña de la identidad (usuario) debe conocer los valores trapdoor y nullifier. Para prevenir fraudes, la persona dueña debe conservar de forma secreta ambos valores.
Crear identidades
En su código, utilice la librería @semaphore-protocol/identity
para crear una identidad Semaphore de forma determinística (del hash de un mensaje) o de forma aleatoria.
Instalar librería:
- npm
- Yarn
- pnpm
npm install @semaphore-protocol/identity@^3
yarn add @semaphore-protocol/identity@^3
pnpm add @semaphore-protocol/identity@^3
Crear identidades aleatorias
Para crear una identidad aleatoria, represente Identity
sin algún parámetro. Por ejemplo:
import { Identity } from "@semaphore-protocol/identity"
const { trapdoor, nullifier, commitment } = new Identity()
La nueva identidad contiene dos valores aleatorios secretos: trapdoor
y nullifier
, y un valor público: commitment
.
El hash Poseidon del identity nullifier y trapdoor se conoce como identity secret (el secreto de identidad), y su hash es el identity commitment (compromiso de identidad).
Un identity commitment (compromiso de identidad), de forma similar a las direcciones Ethereum, es un valor público que se utiliza en los grupos Semaphore para representar la identidad de un miembro del grupo. Los valores secretos son similares a las llaves privadas Ethereum y se utilizan para generar pruebas de conocimiento cero (ZKP) Semaphore y autenticar señales.
Crear identidades determinísticas
Si transmite un mensaje como un parámetro, Semaphore genera trapdoor
y nullifier
del hash SHA256 del mensaje.
El mensaje puede ser una contraseña o un mensaje que el usuario firma de forma criptográfica con una llave privada.
Al utilizar identidades determinísticas siempre deberá mantener secreto el mensaje. Dado que el hash es determinístico, cualquier persona con el mismo mensaje puede recrear la misma identidad.
const identity = new Identity("secret-message")
Crear un sistema que guarde o recupere valores secretos de identidades Semaphore no es trivial. Puede elegir delegar este tipo de funcionalidad a carteras existente como Metamask. Por ejemplo:
- En Metamask, un usuario firma un mensaje con la llave privada de su cuenta Ethereum.
- En la aplicación que usted ofrece, el usuario crea una identidad determinística con el mensaje firmado.
- Ahora el usuario puede recrear su identidad Semaphore cuando quiera al firmar el mismo mensaje con su cuenta Ethereum en Metamask.
Guarde sus identidades
Puede generar una identidad como una cadena de caractéres JSON que puede guardar y reutilizar más tarde.
El método Identity.toString()
genera una matriz JSON a partir de una identidad. Por ejemplo:
console.log(identity.toString()) // Ver la identidad trampilla y anulador.
// '["8255d...", "62c41..."]'
La matriz contiene la trapdoor y el nullifier.
Para reutilizar la identidad guardada, transforme la cadena JSON al constructor Identity()
.
const identity2 = new Identity(identity.toString())