Gestión de Llaves
Cómo Polaris protege y gestiona las llaves privadas de las wallets.
Llaves Encriptadas
Todas las llaves privadas se almacenan encriptadas con AES-256-GCM en Supabase. Ni siquiera el equipo de Polaris puede acceder a ellas sin la llave maestra.
Modelo de Custodia
Polaris utiliza un modelo de custodia gestionada donde:
- Generación segura
Las llaves se generan en el servidor usando CSPRNG (Cryptographically Secure Pseudo-Random Number Generator)
- Encriptación inmediata
La llave privada se encripta antes de tocar cualquier almacenamiento persistente
- Almacenamiento en Supabase
La llave encriptada se guarda con RLS para que solo el usuario/proyecto tenga acceso
Flujo de Almacenamiento
// Almacenamiento de llave en Supabase (encriptado)
const encryptedKey = await encrypt(
companyPrivateKey,
POLARIS_MASTER_KEY,
{
algorithm: 'AES-256-GCM',
additionalData: companyId // Asociado a la empresa
}
)
// Guardado en Supabase con RLS
await supabase.from('company_keys').insert({
company_id: companyId,
encrypted_key: encryptedKey,
key_version: 1,
created_at: new Date()
})Tipos de Wallets
| Tipo | Creación | Propósito |
|---|---|---|
| Usuario | Al registrarse | Balance personal y firmas |
| Proyecto | Al crear proyecto | Wallet principal (Dirección) |
| Departamento | Al crear departamento | Presupuesto departamental |
Rotación de Llaves
Las llaves de encriptación se rotan periódicamente. Cuando se rota una llave:
- 1. Se genera nueva llave maestra
- 2. Se re-encriptan todas las llaves de wallet
- 3. Se invalida la llave anterior
- 4. Se registra el evento de rotación
Seguridad Adicional
- Las llaves nunca se transmiten en texto plano
- TLS 1.3 para todas las comunicaciones
- Logs de acceso con auditoría
- Separación de ambientes (dev/staging/prod)