feat(cybersecurity): auto-commit con 48 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
---
|
||||
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.
|
||||
Reference in New Issue
Block a user