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

2.7 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
seal_aead function go cybersecurity 1.0.0 impure func SealAEAD(key, plaintext, aad []byte) (nonce, ciphertext []byte, err error) Cifra plaintext con ChaCha20-Poly1305 usando una clave simétrica de 32 bytes. Genera un nonce aleatorio por llamada. Admite datos autenticados adicionales (AAD) para vincular contexto al cifrado sin cifrarlo.
messaging
e2e-crypto
crypto
aead
chacha20poly1305
symmetric
e2e-messaging
false error_go_core
crypto/rand
golang.org/x/crypto/chacha20poly1305
name desc
key Clave simétrica de exactamente 32 bytes (256 bits). Típicamente la room key distribuida con SealKeyBox.
name desc
plaintext Bytes a cifrar. Puede ser vacío.
name desc
aad Datos autenticados adicionales (AAD): se autentican pero no se cifran. Útil para room ID, número de secuencia, etc. Puede ser nil.
nonce (12 bytes aleatorios), ciphertext (plaintext cifrado + 16 bytes de tag Poly1305), o error si la clave tiene longitud incorrecta o falla el RNG. true
round-trip con aad
round-trip sin aad (nil)
error con clave de longitud incorrecta
error de autenticacion con ciphertext modificado
error de autenticacion con aad distinto
nonces distintos en llamadas sucesivas
functions/cybersecurity/e2e_messaging_crypto_test.go functions/cybersecurity/seal_aead.go

Ejemplo

key := make([]byte, 32) // en producción: room key distribuida con SealKeyBox
aad := []byte("room:sala-general:seq:42")
nonce, ct, err := cybersecurity.SealAEAD(key, []byte("hola sala"), aad)
if err != nil {
    log.Fatal(err)
}
// Almacenar nonce junto al ciphertext para descifrar después

Cuando usarla

Al cifrar cada mensaje en una sala del bus: usa la room key de la sala como key, incluye el ID de sala y número de secuencia en aad para prevenir replay attacks entre salas, y transmite nonce + ciphertext juntos al destinatario.

Gotchas

  • El nonce es aleatorio (12 bytes): con una misma key, la probabilidad de colisión de nonces es despreciable para <2^32 mensajes, pero en escenarios de alto volumen considera rotar la room key periódicamente.
  • El ciphertext es 16 bytes más largo que el plaintext (tag Poly1305).
  • aad no viaja cifrado: el destinatario debe reconstruirlo independientemente para verificar. Si aad difiere aunque sea 1 bit, OpenAEAD falla con error de autenticación.
  • Nunca reutilizar (key, nonce) para dos plaintexts distintos: rompe la confidencialidad de ChaCha20.