Seguridad

Qué es privado, frente a quién, y los límites que conocemos.

Quién ve qué (modo rampa)

ObservadorVe
El públicoEl anchor le pagó a Shield; Shield usó el pool. Ni la dirección del usuario ni quién recibió qué
El anchorAl usuario y el monto (hace el KYC)
ShieldQué cuenta es dueña de qué llaves (es el ASP), y cada intent
El auditorCada nota: dueño y monto

Protecciones

  • Las llaves de gasto nunca salen del navegador del usuario.
  • El registro exige la firma SEP-53 de la cuenta sobre las llaves exactas.
  • Iniciar un depósito exige la firma SEP-53 de la cuenta sobre el monto, y cada solicitud firmada sirve una sola vez.
  • Solo el pago que reporta el anchor fondea un intent; los memos de los intents son aleatorios.
  • La llave de vista solo llega al proceso del auditor, nunca a un navegador.
  • Operador, cuenta ómnibus y auditor son tres llaves distintas.
  • Los logs nunca juntan la dirección de un usuario con un monto.

Límites conocidos

  • El pago del anchor y el depósito de Shield comparten monto y hora, así que se pueden vincular (lo siguiente es agruparlos).
  • En modo directo, el usuario firma sus propias transferencias, así que su cuenta aparece como usuaria del pool (lo resuelve un relayer).
  • GET /v1/users/{account} es público: dice si una cuenta usa Shield.
  • El emisor del activo podría activar el clawback más adelante; no es AUTH_IMMUTABLE.
  • Contratos de developer preview sin auditar; el RPC público guarda unos 7 días de historial.

Threat model completo (en inglés): docs/threat-model.md.