Capítulo 6: Privacidad e Interfaz GMC

Este capítulo describe las dos restricciones estrictas del sistema FayID: los Human IDs nunca salen del sistema y nunca aparecen en los logs, y la GMC Interface es una frontera estrictamente de solo lectura. Juntas constituyen los requisitos de seguridad para que FayID sirva como capa de identidad a largo plazo del Global Merit Chain.


Restricciones estrictas de privacidad

Reglas para payloads salientes

Definimos un "payload saliente" como cualquier flujo de bytes observable desde fuera del sistema FayID, incluyendo recursos de terceros, legacy auth sources, el Global Merit Chain y backends de observabilidad.

Entidad¿Puede aparecer en texto plano en un payload saliente?
Human IDProhibido, salvo que la comunicación pruebe explícitamente el propio Human ID
MnemonicProhibido, sin excepciones
Clave privadaProhibido, sin excepciones
iFay ID / coFay ID / Organization IDPermitido
Dynamic CodePermitido
Verification CodeSolo emparejado con un coFay ID; nunca difundido por sí solo
Authorization GrantPermitido

Logging y observabilidad

log_allow  := { dynamicCode, ifayID, cofayID, organizationID, grantID, errorCode }
log_deny   := { humanID(plaintext), mnemonic, privateKey, verificationCode(plaintext) }

Los registradores del lado de la implementación deben filtrar mediante una lista blanca: cada vía de serialización debe pasar por un paso de redact antes de escribir en un log.

En resumen: los Human IDs y Mnemonics en texto plano nunca aparecen en ningún flujo de bytes observable externamente: ni en paquetes de red, ni en archivos de log, ni en salida de auditoría.


No vinculabilidad de Dynamic Codes

Intención de diseño

Cuando un observador externo obtiene dos literales de Dynamic Code, no puede determinar si los códigos provienen del mismo Human ID. Esta es la propiedad de privacidad central que permite que un Dynamic Code sirva como sustituto público de un Human ID.

Base del diseño

La derivación del Dynamic Code utiliza:

  • Un nonce nuevo por derivación: hace que las salidas consecutivas sean estadísticamente independientes
  • Un ikm privado del Issuer: impide que observadores externos reproduzcan localmente la función de derivación
  • Prefijo de tipo + ventana temporal: mantiene los Dynamic Codes literalmente distintos de otras entidades sin introducir marcadores correlacionables adicionales

Como resultado, la inferencia estadística más fuerte que un observador externo puede hacer a partir de dos literales de Dynamic Code no es mejor que la suposición aleatoria.

Esta es la base criptográfica de la propiedad P9 del documento de diseño.


Control de acceso en consultas de listas de titularidad

Reglas

  • listIFayIDsOfHuman(proofOfHuman) debe verificar proofOfHuman antes de devolver cualquier resultado
  • Sin verificación, devuelve HUMAN_ID_OWNERSHIP_NOT_PROVEN
  • El Resolver no provee una interfaz anónima de "buscar iFay IDs por Human ID"

Motivación del diseño

Esto evita que observadores externos recopilen el vínculo "qué personas iFay posee este Human ID" mediante una interfaz de búsqueda inversa, lo que equivaldría a exponer indirectamente el perfil de actividad de un Human ID.


Frontera de la GMC Interface

Rol

La GMC Interface es el único canal entre el sistema FayID y el Global Merit Chain. Sus principios de diseño:

Solo lectura + irreversible + nunca exponer la identidad raíz

Métodos expuestos a GMC

// Solo lectura
gmcLookupOwnership(ifayIDOrCofayID)
  -> { ownerKind: "HUMAN" | "ORGANIZATION",
       ownerOpaqueRef: string }

gmcResolvePublicEntity(idString)
  -> { kind: "IFAY" | "COFAY" | "ORGANIZATION",
       revoked: bool,
       displayMetadata: opaque }

Direcciones explícitamente prohibidas

// No existe — las escrituras inversas están prohibidas en la capa de protocolo
// gmcWriteHumanID(humanID)
// gmcWriteMnemonic(mnemonic)
// gmcWritePrivateKey(...)

La prohibición se aplica mediante "el método no existe en el IDL", en lugar de mediante comprobaciones en tiempo de ejecución. Esto hace que las escrituras inversas sean estructuralmente imposibles en la capa de protocolo.


opaqueRef

Derivación

opaqueRef := encode(prefix="gmcref_",
  payload = HKDF(
    ikm    = gmc_namespace_secret,         // clave de espacio de nombres del sistema FayID
    salt   = humanID,                       // aparece solo dentro de FayID
    info   = "fayid/gmc/v1",
    length = 256 bit
  )
)

Propiedades clave

PropiedadDescripción
EstabilidadEl opaqueRef derivado del mismo Human ID es establemente igual, lo que permite que los registros de reputación en GMC se acumulen a largo plazo
Resistencia a colisionesLos opaqueRefs derivados de Human IDs distintos son casi en todas partes distintos
IrreversibilidadMantener únicamente un opaqueRef no permite recuperar el Human ID en tiempo polinómico
No vinculabilidadLos opaqueRefs no participan en la derivación del Dynamic Code; desde la perspectiva de un observador externo ambos son no vinculables

Significado

opaqueRef resuelve una tensión central:

  • El Global Merit Chain necesita una referencia estable y a largo plazo a una persona natural para acumular reputación
  • El Human ID de una persona natural debe permanecer privado y no debe aparecer on-chain

opaqueRef es el compromiso: es la salida de una "función unidireccional" aplicada al Human ID: comparable de forma estable, pero irreversible.


Modos de asociación de reputación

Reputación de iFay / coFay / Organization

  • Los iFay IDs, coFay IDs y Organization IDs sirven como sujetos en texto plano de los registros de reputación
  • GMC puede indexar la reputación directamente por estos IDs

Reputación humana

  • Los Human IDs no aparecen on-chain directamente
  • Cuando un registro de reputación necesita asociarse a una persona natural, se utiliza el opaqueRef de ese Human ID como referencia
  • El opaqueRef derivado del mismo Human ID se mantiene estable a largo plazo

Consultas en la frontera

Cuando el Global Merit Chain consulta la titularidad de un iFay ID o coFay ID a través de la GMC Interface:

  • Devuelve el OwnerKind (HUMAN / ORGANIZATION)
  • En el caso HUMAN, devuelve un opaqueRef y no el Human ID en texto plano
  • En el caso ORGANIZATION, devuelve el Organization ID en texto plano (las organizaciones son públicas por naturaleza)

Resumen de la frontera de privacidad

FronteraInterior (dentro del sistema FayID)Exterior (saliente / GMC / logs)
Human ID en texto planoAparece solo dentro del Issuer / ResolverProhibido
MnemonicSe devuelve al titular una sola vez en la generaciónProhibido
Clave privadaExiste solo a lo largo de la vía de derivación de clavesProhibido
Dynamic CodeGenerado internamentePuede hacerse público
opaqueRefDerivado internamenteExpuesto solo a GMC

La privacidad no consiste en "simplemente cifrarlo": mediante restricciones estrictas en la capa de protocolo (ningún método de escritura en el IDL, una lista blanca para payloads salientes, una lista blanca para logs), FayID elimina estructuralmente la posibilidad de que un Human ID en texto plano aparezca alguna vez en el exterior.