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

TipoCreaciónPropósito
UsuarioAl registrarseBalance personal y firmas
ProyectoAl crear proyectoWallet principal (Dirección)
DepartamentoAl crear departamentoPresupuesto departamental

Rotación de Llaves

Las llaves de encriptación se rotan periódicamente. Cuando se rota una llave:

  1. 1. Se genera nueva llave maestra
  2. 2. Se re-encriptan todas las llaves de wallet
  3. 3. Se invalida la llave anterior
  4. 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)