- El protocolo AT es la base de una red social descentralizada, y todos los datos se identifican con un URI
at://
- Un URI
at:// usa como authority al creador de los datos (usuario), y la ubicación donde esos datos están realmente alojados debe resolverse por separado
- El proceso de resolución del URI sigue este orden: convertir el handle en una identidad (DID), identificar el servidor de alojamiento consultando el documento DID, y luego solicitar los datos JSON a ese servidor
- Se admiten dos métodos de DID (
did:web, did:plc), cada uno con distintas ventajas, desventajas y formas de preservar los datos
- Este enfoque enfatiza que la propiedad de los datos pertenece al usuario y garantiza una persistencia que mantiene el vínculo aunque cambien el handle o el alojamiento
Protocolo AT, URI at:// y el proceso de resolución de identidad de los datos sociales
# Estructura básica del protocolo AT y del URI at://
- El protocolo AT permite que múltiples servidores distribuidos se comuniquen siguiendo un estándar específico, y al conjunto completo se le llama atmosphere
- A cada dato dentro del atmosphere se le asigna un URI único que comienza con
at://, y este URI funciona como una especie de enlace a datos JSON
- A diferencia de la estructura tradicional de un URI, en el protocolo AT el authority se establece como el creador de los datos (usuario)
- Por ejemplo, en la forma
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z, ruuuuu.de indica que es el propietario de esos datos
- El servidor físico donde se alojan realmente los datos no está incluido directamente en el URI, por lo que se necesita un proceso adicional de resolución para encontrarlo
# Las tres etapas del proceso de resolución de un URI at://
- Para mapear un URI
at:// a los datos reales (JSON) se necesitan tres etapas
- Convertir el handle (
ruuuuu.de, etc.) en una identidad (DID: Decentralized Identifier)
- El handle es un alias para identificar al usuario y puede cambiar
- Por eso es necesario convertirlo a un DID, que es un ID global inmutable
- Formas de conversión:
- Confirmar la información de alojamiento de los datos mediante la consulta del documento DID (DID Document)
- El documento DID incluye información como la clave pública de esa identidad y el endpoint del servicio (servidor)
- En el caso de
did:web:~, se accede con base en el dominio (https://dominio/.well-known/did.json)
- En el caso de
did:plc:~, se consulta en el directorio PLC (https://plc.directory/DID)
- El endpoint de servicio (
serviceEndpoint) es el servidor real donde se alojan los datos
- Solicitar los datos JSON a través de la API del servidor de alojamiento
- Se solicitan los datos al endpoint
com.atproto.repo.getRecord, pasando como parámetros las partes del at://
- El JSON devuelto es el dato real mapeado al URI
at://
# Explicación del proceso de resolución con un ejemplo
- Ejemplo:
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z
- Aunque cambie el handle, si se usa un URI
at:// basado en DID (permalink), se mantiene el vínculo entre la cuenta y los datos
# Diferencias entre los métodos DID: did:web y did:plc
did:web:
- Permite administrar y verificar tu propio dominio
- Si se pierde el control del dominio, existe la posibilidad de perder toda la identidad
did:plc:
- PLC (Public Ledger of Credentials) es la entidad que opera la identidad
- No depende de un dominio, pero existe la posibilidad de un control limitado, por ejemplo si el operador de PLC rechaza actualizaciones
- Todo el historial de cambios puede verificarse y rastrearse mediante hashes
# Separación entre identidad, alojamiento y datos, y su persistencia
at:// separa la identidad del alojamiento de los datos, lo que hace posible portar los datos del usuario y crear enlaces permanentes
- El handle (apodo) puede cambiar en cualquier momento, y el servidor de alojamiento también puede migrarse del mismo modo
- El DID (identidad) es inmutable, y un URI
at:// basado en él puede usarse como permalink persistente
- El DID Document contiene la prueba de propiedad del handle, las claves para verificar firmas y la información de alojamiento, lo que garantiza confiabilidad y flexibilidad
# Aplicación real y notas para desarrollo
- En la práctica, la mayoría de las apps basadas en AT reciben datos por push mediante WebSocket, entre otros métodos, y los agregan a su base de datos interna
- Aun así, entender cómo resolver un URI
at:// es esencial para comprender las características de la red y asegurar la portabilidad de los datos
- El esquema
at:// ofrece una abstracción de red social sobre HTTP, DNS y JSON, e implementa técnicamente la idea de que la propiedad de los datos pertenece al usuario
# Conclusión
- El protocolo AT y el URI
at:// llevan la identidad, la conectividad y la persistencia de los datos sociales a un nivel técnicamente más avanzado
- Los desarrolladores necesitan dominar el flujo de trabajo clave, como la resolución de handles, el uso de DID, la estructura del DID Document y la forma de solicitar los datos reales
- Gracias a esta estructura, es posible obtener flexibilidad y propiedad sobre el contenido, la identidad y la ubicación de alojamiento
1 comentarios
Comentarios de Hacker News
Hace poco vi un artículo sobre ATProto y me animé a unirme a bsky, pero todo lo que veo es un flujo interminable de política estadounidense; aunque siga presionando “ver menos de esto”, casi no ayuda. Me pregunto si esa es la esencia de esta plataforma. Mentalmente me agota tener que seguir viendo opiniones obvias sobre discusiones raras de otros países.
Todavía no sé si este proyecto realmente resuelve de forma significativa los problemas de identidad y propiedad de datos. En el lado de la identidad, básicamente todo se reduce a usar tu propio dominio o el dominio de otra persona (como Bluesky). Como la mayoría no tiene dominio, al final su identidad queda en manos de un tercero. Con los datos pasa algo parecido: si tu cuenta es bloqueada en Bluesky u otro servidor, también se cierra tu almacenamiento y ni siquiera tienes oportunidad de mover tus datos a otro lugar. Esto es igual que con el correo electrónico: si no tienes tu propio dominio y tu propio servidor, en la práctica no controlas nada.
Las explicaciones de Dan siempre son excelentes, y llegan justo a tiempo con la noticia reciente de que Bluesky transferirá el control operativo de PLC. Nuestro equipo también eligió este mismo sistema DID en fair.pm para la distribución descentralizada de plugins de WordPress (digamos, algo así como gestión de paquetes al estilo App Store). La gente de Bluesky —especialmente Bryan— nos ayudó bastante, y hasta conseguimos soporte para claves Ed25519 para poder usar libsodium. Nuestro protocolo está siendo diseñado sobre DID y la moderación apilable de Bluesky, aunque no usa atproto directamente. Lo importante es que DID es un estándar del W3C, así que PLC no está atado a atproto.
Para resolver
at://, al final hay que hacer un GET a plc.directory, y en ese punto parece que el sistema se vuelve 100% centralizado. Como mínimo, me habría gustado que existieran varios directorios de confianza separados del protocolo, algo como las raíces DNS o las CA.Todos los servidores que guarden enlaces
at://probablemente tengan que pasar por DNS/HTTPS para encontrar la representación canónica (permalink). Si DNSSEC no está bien implementado, esta estructura se ve algo frágil. No lo he pensado a fondo, pero una preocupación inmediata es que, con algo como envenenamiento de DNS, un atacante podría publicar entradas a mi nombre (ya que la clave pública está en el DID obtenido por DNS).at://, lo común es poner un DID en la parte de autoridad, así que si haces la solicitud por DID en vez de por handle, al final dependes de HTTPS y del web PKI. Incluso si empiezas desde el handle, terminas pasando por web PKI y por un registro TXT. La forma recomendada es resolver los handles del lado del servidor y, si necesitas hacerlo directamente, consultar a un proveedor de DoH (DNS sobre HTTPS) de confianza. No es perfecto, pero reduce bastante la superficie de ataque. DNSSEC sí sería una solución para ese problema, por supuesto, pero en redes de producción me ha tocado pasar por varios problemas con DNSSEC. Por ejemplo, senadores de Estados Unidos usan el dominio senate.gov para verificar identidad, y hace poco una mala configuración de DNSSEC provocó que decenas de senadores aparecieran con "invalid handle" en Bluesky. Por experiencias frustrantes como esa, por ahora no estamos impulsando con fuerza hacer obligatorio DNSSEC. Si otro protocolo grande lograra imponer DNSSEC con éxito, valdría la pena reconsiderarlo.En el artículo faltó información sobre las claves usadas para el historial de cambios del DID. Por ejemplo, si yo fuera foobar.bsky.social, no recuerdo haber subido yo mismo una clave ni haber recibido instrucciones para descargarla. Me pregunto exactamente dónde está esa clave, quién la posee y cómo y cuándo se usa. También quisiera saber qué mecanismo impide que el operador de plc.directory sobrescriba arbitrariamente mi DID y robe mi identidad.
El concepto de
at://me parece interesante, pero me preocupan algunos problemas que pueden surgir en un sistema basado en propiedad real de los datos. Por ejemplo, si el usuario controla sus datos, entonces puede cambiar o borrar el contenido cuando quiera. Puede escribir algo razonable al principio y luego modificarlo maliciosamente después. Aunque uno guarde hashes de entradas viejas para evitar cambios, los servicios nuevos no tendrían forma de conocer ese historial. También parece difícil rastrear cosas como los upvotes. Si cada quien guarda todo como objetos propios, ni siquiera queda claro cómo saber quién dio upvote. Y si alguien crea cuentas falsas para seguir promocionando sus propios posts, tampoco parece haber demasiadas limitaciones. Por último, si hay un número enorme de cuentas provenientes de distintas plataformas, ¿no sería imposible moderar el spam o la actividad maliciosa? Si partimos de que cada cuenta administra por sí misma sus datos, no termino de ver cómo encaja el diseño completo del sistema en términos de transparencia, responsabilidad, moderación y bloqueo de spam.at://como una lista enlazada continua. DID también explica bastante bien la moderación de identidad; es decir, ofrece base suficiente para saber quién es alguien, bloquearlo o juzgarlo. El punto es que esto no es blockchain, sino una forma centrada en el propietario de los datos y compartible en cualquier momento. A menos que alguien tenga intenciones maliciosas de arruinarlo todo, me parece una estructura bastante atractiva. Como deja claro "qué datos de esta persona están dónde", si todo eso de la transparencia no te interesa, tampoco tienes por qué usarlo.strongRef, que es un permalink real basado en hash. Dan no entra en detalle sobre eso en el artículo, pero si guardas elstrongRef, podrás detectar rápido cualquier cambio en una publicación previa. Bluesky tampoco ha introducido edición precisamente por el riesgo de modificaciones maliciosas. (Referencia: resumen de experimento sobre permalinks, experimento de historial de edición de registros). El seguimiento de upvotes se puede hacer más o menos recolectando datos de la red y usando cosas como roaring bitmap (ejemplo de roaring-bitmaps). Para el problema de moderación existe stackable moderation, que es muchísimo más interesante que los sistemas tradicionales. También hay discusiones sobre construirlabeler/feedgencomo un DAG (un sistema de composición de reglas basado en operaciones de conjuntos). Los problemas de falsificación de datos se detectan por medio del hash CID de cada objeto, y el seguimiento del historial de cambios también es técnicamente posible.Me da una sensación parecida a la de muchos protocolos cripto que hablan de descentralización, pero que al final igual terminan amarrados a una sola plataforma.
Tengo una duda estructural: "¿cómo se obtiene JSON a partir de un URI
at://?". Aunque leo la documentación, no termino de entender por qué hace falta "ese JSON". Personalmente, este enfoque no me convence.at://permite incrustar y exportar datos libremente entre apps, compartir identidad de usuario y habilitar autoalojamiento o migración de contenido. También ofrece URIs permanentes que no dependen del handle ni del servidor. El funcionamiento técnico se explica a lo largo del artículo. Como ejemplo práctico, leaflet.pub y bsky.app son dos apps que agregan datos de la misma red pública, así que pueden mostrar e interoperar fácilmente con los datos de la otra sin necesidad de una API separada (post de demostración).https://?". Es una simplificación excesiva, pero sirve para explicárselo a alguien que está aprendiendo DNS, HTTP y TLS por primera vez.Me pregunto si el protocolo funciona como una especie de gran tópico público de Kafka. Por ejemplo, al crear una nueva app web, en vez de guardar datos directamente, cada usuario guardaría sus datos en su propio espacio, habría listeners que los escuchan, y el protocolo garantizaría la propagación para que la app solo escuche y haga caché. Conceptualmente suena interesante, pero también me pregunto si aplican ideas de Kafka como offsets para no perder actualizaciones o particiones para escalar.