You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Docs/Services/CLAVES_SISTEMA.md
+6-4Lines changed: 6 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ Ravage maneja varios tipos de claves criptográficas con propósitos distintos.
8
8
9
9
| Clave | Origen | Formato en memoria | Formato en reposo | Propósito |
10
10
|---|---|---|---|---|
11
-
|`secretKey` (usuario) |`randomBytes(32)` al registrar |`Buffer`|`BinData` en MongoDB | Cifra archivos locales del usuario (ajustes, historial, etc.) |
11
+
|`secretKey` (usuario) |`randomBytes(32)` al registrar |`Buffer`|`EncryptedDataSchema` en MongoDB (cifrado con `INTERNAL_ENCRYPTION_KEY`)| Cifra archivos locales del usuario (ajustes, historial, etc.) |
12
12
|`SECRET_KEY_COKKIE`| Variable de entorno (hex) |`Buffer`|`.env.secret`| Cifra archivos locales de sesión y configuración de la app |
13
13
|`SECRET_KEY_PRIVATE`| Variable de entorno (hex) |`Buffer`|`.env.secret`| Cifra el archivo de identidad E2EE (clave privada RSA) en disco |
14
14
|`INTERNAL_ENCRYPTION_KEY`| Variable de entorno (hex) |`Buffer`|`.env.secret`| Cifra datos sensibles almacenados en MongoDB (buzón, etc.) |
@@ -21,9 +21,11 @@ Ravage maneja varios tipos de claves criptográficas con propósitos distintos.
21
21
22
22
### Origen y formato
23
23
24
-
Generada al registrar el usuario con `randomBytes(32)` (32 bytes, 256 bits). Se almacena directamente como `Buffer`en MongoDB (campo `secretKey` del schema `User`, tipo Mongoose `Buffer` → MongoDB `BinData`).
24
+
Generada al registrar el usuario con `randomBytes(32)` (32 bytes, 256 bits). Se almacena **cifrada**en MongoDB como `EncryptedDataSchema` usando `INTERNAL_ENCRYPTION_KEY` + AES-256-GCM. El hex del buffer es el plaintext cifrado.
25
25
26
-
Antes se almacenaba como cadena hexadecimal (64 chars). El cambio a `Buffer` elimina la conversión `Buffer.from(key, "hex")` en cada uso y reduce el tamaño en DB a la mitad.
26
+
Al cargar en sesión, `desencriptarDatosSistema(dt.secretKey)` devuelve el hex → `Buffer.from(hex, 'hex')` → Buffer de 32 bytes que se pone en memoria con `setSecretKEY(buffer)`.
27
+
28
+
Esto significa que comprometer MongoDB sin tener también la `INTERNAL_ENCRYPTION_KEY` (almacenada en el vault del SO) no es suficiente para obtener las claves de cifrado de los usuarios.
27
29
28
30
### Ciclo de vida
29
31
@@ -138,7 +140,7 @@ Para descifrar: receptor hace `ECDH(privKey, ephPub)` → misma wrapping key →
138
140
139
141
| Clave | Algoritmo de cifrado en reposo | Algoritmo de uso |
140
142
|---|---|---|
141
-
|`secretKey` usuario |— (en MongoDB, protegido por acceso a la DB) | AES-256-GCM (cifra archivos locales) |
0 commit comments