Saltar al contenido principal
Versión: V3

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 install @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")
tip

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:

  1. En Metamask, un usuario firma un mensaje con la llave privada de su cuenta Ethereum.
  2. En la aplicación que usted ofrece, el usuario crea una identidad determinística con el mensaje firmado.
  3. 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())