UC-001: Crear Identidad
Flujo de Referencia
Corresponde al Flujo 1 — Registro de Identidad (Onboarding), pasos 1-2 y 5.
Descripción
El Holder crea una nueva identidad descentralizada. Este proceso genera un par de claves criptográficas (pública/privada) en el dispositivo local, produce un DID (Decentralized Identifier) siguiendo el estándar W3C DID y almacena la clave privada de forma segura. La clave privada nunca abandona el dispositivo. La identidad es utilizable inmediatamente sin interacción con la blockchain; el anclaje on-chain es un paso separado y opcional (UC-003).
Este mismo flujo de onboarding aplica para entidades (Issuers, Requesters). Para Issuers, el registro de identidad debe complementarse con la autorización en el trust framework (UC-025).
Actores
- Holder: Usuario que crea su identidad descentralizada
- Wallet: Aplicación en el dispositivo del Holder que gestiona claves, DIDs y credenciales
- System Keychain: Almacenamiento seguro a nivel de sistema operativo para claves privadas
Precondiciones
- El Holder dispone de un dispositivo con la aplicación wallet instalada
- No existe ninguna identidad actualmente en el wallet (primer uso)
- El system keychain es accesible
Flujo Principal
- El Holder abre el wallet y selecciona Crear Nueva Identidad
- El Holder crea una contraseña que cumple los requisitos de seguridad
- El wallet genera una frase de recuperación (mnemónico BIP39) y la muestra al Holder
- El Holder respalda la frase de recuperación de forma segura
- El wallet genera el par de claves criptográficas (pública/privada) en el dispositivo local
- El wallet deriva el DID a partir de la clave pública, siguiendo el estándar W3C DID:
did:almena:<clave_pública> - El wallet almacena la clave privada de forma segura en el system keychain — la clave privada nunca abandona el dispositivo
- El wallet persiste los metadatos de identidad localmente (DID, clave pública, fecha de creación)
- El Holder ve una pantalla de confirmación con su nuevo DID
- El Holder puede opcionalmente anclar el DID en la blockchain (UC-003) o proceder directamente a usar el wallet
Flujos Alternativos
FA-1: Contraseñas no coinciden
- En el paso 2, la contraseña de confirmación no coincide
- El wallet muestra un error y el Holder debe reingresar ambas contraseñas
FA-2: Acceso al keychain denegado
- En el paso 7, el system keychain no es accesible
- La operación falla con un mensaje de error y la identidad no se crea
FA-3: Frase de recuperación no respaldada
- En el paso 4, el Holder debe confirmar que ha respaldado la frase antes de continuar
Postcondiciones
- El Holder posee un DID generado siguiendo el estándar W3C DID
- Un par de claves criptográficas existe almacenado de forma segura en el dispositivo
- La clave privada está en el system keychain y nunca ha abandonado el dispositivo
- El DID es utilizable localmente para firma y autenticación
- No se ha realizado ninguna transacción en blockchain (el anclaje es un paso separado y opcional)
- El Holder puede recibir credenciales y generar presentaciones verificables
Módulos Involucrados
| Módulo | Rol |
|---|---|
| wallet | Generación de claves, creación de DID, almacenamiento seguro, flujo de UI |
Notas Técnicas
- Tipos de clave: Ed25519 para operaciones de identidad, secp256k1 para transacciones blockchain — ambas derivadas de la misma semilla BIP39
- Formato DID:
did:almena:<clave_pública_hex>siguiendo W3C DID v1.0 - Frase de recuperación: Mnemónico BIP39 de 12 palabras que permite la recuperación determinista de claves (UC-002)
- Offline-first: La creación de identidad no requiere acceso a red
- Onboarding de entidades: Las organizaciones (Issuers/Requesters) siguen este mismo flujo de identidad vía UC-022, luego se registran en el trust framework vía UC-025
- Estándares: W3C Decentralized Identifiers (DID) v1.0, requisitos de wallet eIDAS 2.0