--- name: generate_identity kind: function lang: go domain: cybersecurity version: "1.0.0" purity: impure signature: "func GenerateIdentity() (Identity, error)" description: "Genera una identidad criptográfica dual con un par Ed25519 (firma) y un par X25519 (intercambio de claves). Punto de entrada obligatorio para cualquier participante en el bus de mensajería cifrado." tags: [messaging, e2e-crypto, crypto, identity, ed25519, x25519, keygen, e2e-messaging] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: - crypto/ed25519 - crypto/rand - golang.org/x/crypto/nacl/box params: - name: "(ninguno)" desc: "Sin parámetros. Usa crypto/rand como fuente de entropía del sistema." output: "Identity{SignPub []byte, SignPriv []byte, KexPub []byte, KexPriv []byte} o error si falla el RNG del sistema." tested: true tests: - "genera keypairs con longitudes correctas" - "dos llamadas producen identidades distintas" test_file_path: "functions/cybersecurity/e2e_messaging_crypto_test.go" file_path: "functions/cybersecurity/generate_identity.go" --- ## Ejemplo ```go id, err := cybersecurity.GenerateIdentity() if err != nil { log.Fatal(err) } // id.SignPub / id.SignPriv — par Ed25519 para firmar mensajes // id.KexPub / id.KexPriv — par X25519 para recibir claves de sala cifradas fmt.Printf("identity pub(sign)=%x pub(kex)=%x\n", id.SignPub, id.KexPub) ``` ## Cuando usarla Al registrar un nuevo participante en el bus de mensajería: llama GenerateIdentity una sola vez por dispositivo/sesión, persiste los bytes de las cuatro claves de forma segura, y publica `SignPub` + `KexPub` en el directorio de participantes. ## Gotchas - La función depende de `crypto/rand`; en entornos con entropía insuficiente (contenedores recién arrancados) puede bloquearse brevemente. - `SignPriv` tiene 64 bytes (no 32): Ed25519 concatena seed (32) + clave pública (32) internamente. No truncar. - `KexPub`/`KexPriv` son exactamente 32 bytes (Curve25519). Pasar exactamente esos slices a `SealKeyBox`/`OpenKeyBox`. - Nunca reutilizar una identidad entre dispositivos distintos del mismo usuario sin un protocolo de clonado seguro.