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,62 @@
|
||||
---
|
||||
name: open_aead
|
||||
kind: function
|
||||
lang: go
|
||||
domain: cybersecurity
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "func OpenAEAD(key, nonce, ciphertext, aad []byte) ([]byte, error)"
|
||||
description: "Descifra y autentica un ciphertext producido por SealAEAD usando ChaCha20-Poly1305. Devuelve error explícito si la autenticación falla (ciphertext alterado, clave incorrecta o AAD distinto)."
|
||||
tags: [messaging, e2e-crypto, crypto, aead, chacha20poly1305, symmetric, e2e-messaging]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports:
|
||||
- golang.org/x/crypto/chacha20poly1305
|
||||
params:
|
||||
- name: key
|
||||
desc: "Clave simétrica de exactamente 32 bytes. Debe ser la misma usada en SealAEAD."
|
||||
- name: nonce
|
||||
desc: "Nonce de 12 bytes devuelto por SealAEAD. Debe transmitirse junto al ciphertext."
|
||||
- name: ciphertext
|
||||
desc: "Ciphertext producido por SealAEAD (incluye los 16 bytes del tag Poly1305)."
|
||||
- name: aad
|
||||
desc: "Datos autenticados adicionales. Debe ser idéntico al aad usado en SealAEAD, o nil si se pasó nil."
|
||||
output: "Plaintext descifrado, o error si la autenticación falla o la clave tiene longitud incorrecta."
|
||||
tested: true
|
||||
tests:
|
||||
- "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"
|
||||
test_file_path: "functions/cybersecurity/e2e_messaging_crypto_test.go"
|
||||
file_path: "functions/cybersecurity/open_aead.go"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```go
|
||||
// nonce y ct vienen de SealAEAD; aad debe reconstruirse igual
|
||||
aad := []byte("room:sala-general:seq:42")
|
||||
plaintext, err := cybersecurity.OpenAEAD(key, nonce, ct, aad)
|
||||
if err != nil {
|
||||
// mensaje alterado, clave incorrecta o aad distinto — descartar
|
||||
log.Printf("autenticación fallida: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("mensaje: %s\n", plaintext)
|
||||
```
|
||||
|
||||
## Cuando usarla
|
||||
|
||||
Al recibir un mensaje del bus: después de resolver la room key con OpenKeyBox, llama OpenAEAD para descifrar y verificar integridad. Si devuelve error, el mensaje llegó corrupto o fue alterado en tránsito — descartar siempre, nunca procesar plaintext parcial.
|
||||
|
||||
## Gotchas
|
||||
|
||||
- El error no distingue entre "clave incorrecta", "nonce incorrecto" y "ciphertext alterado": todos devuelven el mismo error de autenticación por diseño (evita oráculos de padding).
|
||||
- Si el ciphertext tiene menos de 16 bytes, la función devuelve error antes de intentar descifrar.
|
||||
- El aad debe ser reconstructible por el receptor de forma independiente (no viaja en el mensaje cifrado).
|
||||
Reference in New Issue
Block a user