Files
fn_registry/functions/cybersecurity/open_key_box.md
T
2026-06-04 23:44:39 +02:00

2.4 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
open_key_box function go cybersecurity 1.0.0 impure func OpenKeyBox(kexPub, kexPriv, sealedMsg []byte) ([]byte, error) Descifra un sealed box anónimo producido por SealKeyBox usando el par X25519 del destinatario. Devuelve error si la autenticación falla o el mensaje está corrupto.
messaging
e2e-crypto
crypto
nacl
x25519
sealed-box
key-distribution
e2e-messaging
false error_go_core
golang.org/x/crypto/nacl/box
name desc
kexPub Clave pública X25519 del destinatario (exactamente 32 bytes). Debe coincidir con la usada en SealKeyBox.
name desc
kexPriv Clave privada X25519 del destinatario (exactamente 32 bytes). Viene del campo KexPriv de su Identity.
name desc
sealedMsg Sealed box producido por SealKeyBox. Mínimo 48 bytes (32 overhead ephemeral + 16 tag).
Secreto descifrado (ej. room key de 32 bytes), o error si la autenticación falla, el par de claves no coincide, o el mensaje está truncado. true
round-trip con identidad generada
error con recipientKexPub de longitud incorrecta
error al abrir con clave equivocada
error con mensaje truncado
functions/cybersecurity/e2e_messaging_crypto_test.go functions/cybersecurity/open_key_box.go

Ejemplo

// Receptor obtiene su Identity del almacén seguro
id, _ := loadIdentityFromSecureStorage()
roomKey, err := cybersecurity.OpenKeyBox(id.KexPub, id.KexPriv, sealedMsgFromServer)
if err != nil {
    log.Printf("no se pudo abrir la room key: %v", err)
    return
}
// roomKey lista para usar en SealAEAD / OpenAEAD

Cuando usarla

Al recibir una distribución de clave de sala del servidor: llama OpenKeyBox con el par X25519 propio para recuperar la room key simétrica. Después de obtenerla, úsala en OpenAEAD para descifrar los mensajes de esa sala.

Gotchas

  • El error no distingue entre "clave incorrecta" y "mensaje corrupto" por diseño de seguridad.
  • Si sealedMsg tiene menos de 48 bytes (overhead mínimo del sealed box), la función devuelve error sin intentar descifrar.
  • kexPub y kexPriv deben ser el par correspondiente: pasar la pubkey de otro usuario con la privkey propia siempre falla.
  • La room key recuperada es sensible: no logearla ni incluirla en mensajes de error.