- AT protokolü, merkeziyetsiz sosyal ağların temelini oluşturan bir protokoldür ve tüm veriler at:// URI ile tanımlanır
- at:// URI, verinin oluşturucusunu (kullanıcıyı) authority olarak belirtir; bu verinin gerçekte barındırıldığı konum ise ayrıca bulunmalıdır
- URI çözümleme süreci şu sırayla ilerler: handle’ı kimliğe (DID) dönüştürme, DID belgesi üzerinden barındırma sunucusunu bulma ve ardından o sunucudan JSON verisini isteme
- İki tür DID yöntemi (did:web, did:plc) desteklenir ve her birinin artıları, eksileri ve veri koruma biçimi farklıdır
- Bu yaklaşım, veri sahipliğinin kullanıcıda olduğunu vurgular ve handle ile barındırma değişse bile bağlantının korunmasını sağlayan kalıcılığı garanti eder
AT protokolü, at:// URI ve sosyal verilerin kimlik çözümleme süreci
# AT protokolü ve at:// URI’nin temel yapısı
- AT protokolü, dağıtık birçok sunucunun belirli bir standarda göre iletişim kurmasını sağlar ve bunların bütününe 'atmosphere' adı verilir
- atmosphere içindeki her veriye, at:// ile başlayan benzersiz bir URI atanır; bu URI bir bakıma JSON verisine giden bağlantı işlevi görür
- Geleneksel URI yapılarının aksine, AT protokolünde verinin oluşturucusu (kullanıcı) URI’nin authority alanı olarak belirlenir
- Örneğin
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z biçiminde, ruuuuu.de bu verinin sahibini gösterir
- Verinin gerçekten barındırıldığı fiziksel sunucu URI içinde doğrudan yer almaz; bunu bulmak için ek bir çözümleme süreci gerekir
# at:// URI çözümleme sürecinin üç adımı
- at:// URI’yi gerçek veriye (JSON) eşlemek için üç adım gerekir
- Handle’ı (
ruuuuu.de gibi) kimliğe (DID: Decentralized Identifier) dönüştürme
- Handle, kullanıcıyı tanımlayan bir takma addır ve değişebilir
- Bu nedenle değişmeyen küresel kimlik olan DID’ye dönüştürülmesi gerekir
- Dönüştürme yöntemleri:
- DID belgesini (DID Document) sorgulayarak veri barındırma bilgisini bulma
- DID belgesinde ilgili kimliğin açık anahtarı, servis endpoint’i (sunucu) gibi bilgiler bulunur
did:web:~ için alan adı tabanlı erişim kullanılır (https://alanadi/.well-known/did.json)
did:plc:~ için PLC dizininden sorgulama yapılır (https://plc.directory/DID)
serviceEndpoint, verinin gerçekten barındırıldığı sunucudur
- Barındırma sunucusunun API’si üzerinden JSON verisini isteme
com.atproto.repo.getRecord endpoint’ine at:// URI’nin her parçası parametre olarak geçirilerek veri istenir
- Dönen JSON, at:// URI ile eşleşen gerçek veridir
# Bir örnekle çözümleme süreci
- Örnek:
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z
- Handle değişse bile, DID tabanlı at:// URI (permalink) kullanılırsa hesap ile veri arasındaki bağ korunur
# DID yöntemleri: did:web ve did:plc arasındaki fark
- did:web:
- Kendi alan adınızı yönetebilir ve doğrulayabilirsiniz
- Alan adı üzerindeki kontrol kaybedilirse tüm kimliği kaybetme riski doğabilir
- did:plc:
- Kimliğin işletim otoritesi PLC’dir (Public Ledger of Credentials)
- Alan adına bağlı değildir, ancak PLC operatörünün güncellemeleri reddetmesi gibi sınırlı kontrol olasılıkları vardır
- Tüm değişiklik geçmişi hash ile doğrulanabilir ve izlenebilir
# Kimlik, barındırma ve verinin ayrılması ile kalıcılık
at://, kimlik ile veri barındırmayı birbirinden ayırarak kullanıcı verisinin taşınabilir olmasını ve kalıcı bağlantılar üretilebilmesini sağlar
- Handle (takma ad) istenildiği zaman değiştirilebilir, barındırma sunucusu da benzer şekilde taşınabilir
- DID (kimlik) değişmezdir; buna dayalı
at:// URI kalıcı permalink olarak kullanılabilir
- DID Document içinde handle sahipliğinin kanıtı, imza doğrulama anahtarları ve barındırma bilgileri birlikte yer alır; bu da güvenilirlik ve esneklik sağlar
# Gerçek kullanım ve geliştirme notları
- Pratikte çoğu AT tabanlı uygulama, verileri WebSocket vb. yöntemlerle push olarak alıp dahili bir veritabanında toplar
- Buna rağmen at:// URI çözümleme yöntemini bilmek, ağın özelliklerini anlamak ve veri taşınabilirliğini sağlamak açısından kritiktir
- at:// yapısı; HTTP, DNS ve JSON üzerinde bir sosyal ağ soyutlaması sunar ve veri sahipliğinin kullanıcıda olmasını teknik olarak hayata geçirir
# Sonuç
- AT protokolü ve at:// URI, sosyal verinin kimliği, bağlantılılığı ve kalıcılığı açısından teknik olarak bir adım ileri gider
- Geliştiricilerin handle çözümleme, DID kullanımı, DID belgesi yapısı ve gerçek veri isteme yöntemi gibi temel iş akışlarını iyi bilmesi gerekir
- Bu yapı sayesinde kişi, kendi içeriği, kimliği ve barındırma konumu arasındaki esnekliği ve sahipliği elde edebilir
1 yorum
Hacker News görüşleri
Yakın zamanda ATProto ile ilgili yazılardan ilham alıp bsky'a katıldım, ama karşıma çıkan tek şey bitmek bilmeyen Amerikan siyaseti oldu, "böyle gönderileri daha az göster"e sürekli bassam da pek etkisi olmadı, bunun bu platformun özü olup olmadığını merak ediyorum, yabancı ülkelerdeki tuhaf tartışmalar hakkında klişe görüşleri durmadan görmek zihinsel olarak pek iyi gelmiyor
Bu projenin kimlik ve veri sahipliği sorunlarını gerçekten anlamlı biçimde çözüp çözmediğinden hâlâ emin değilim, kimlik tarafında ya kendi alan adın var ya da başkasının alan adını kullanıyorsun (Bluesky gibi), çoğu insanın alan adı olmadığından kimlikleri sonuçta üçüncü tarafın elinde oluyor, veride de durum aynı, Bluesky ya da başka bir sunucuda hesabın engellenirse depolama da kapanıyor ve veriyi başka yere taşıma fırsatını bile kaybediyorsun, bu e-postayla aynı şey, kendi alan adın ve sunucun yoksa pratikte hiçbir şeyi gerçekten kontrol etmiyorsun
Dan'in açıklamaları her zamanki gibi harika, Bluesky'ın yakın zamanda PLC işletimini devredeceğine dair haberlerle birlikte çok zamanlı oldu, bizim ekip de fair.pm üzerinde WordPress eklentilerini dağıtık biçimde dağıtmak için aynı DID sistemini seçti (bir bakıma App Store benzeri bir paket yönetimi), Bluesky tarafı özellikle Bryan çok yardımcı oldu ve libsodium kullanabilelim diye Ed25519 anahtar desteği bile almayı başardık, bizim protokolümüz DID ve Bluesky'ın stackable moderation yapısı üzerine tasarlanıyor ama atproto'yu doğrudan kullanmıyor, asıl önemli nokta DID'nin bir W3C standardı olması ve PLC'nin atproto'ya bağlı kalmaması
at://'yi bulmak için plc.directory'ye GET isteği göndermek gerekiyor, bu noktada sistem sanki %100 merkezi bir modele dönüşüyor, en azından birkaç güvenilir dizin protokolden ayrı olsaydı iyi olurdu, DNS kökü ya da CA'ler gibi
at:// bağlantılarını saklayan her sunucunun sonuçta kalıcı bağlantı gösterimini bulmak için DNS/HTTPS üzerinden gitmesi gerekecek gibi görünüyor, DNSSEC düzgün çalışmazsa yapı biraz zayıf duruyor, bunu henüz derinlemesine düşünmedim ama akla ilk gelen endişe, DNS poisoning gibi bir sorunla saldırganın benim adıma gönderi yayımlayabilmesi olurdu (çünkü public key, DNS'ten alınan DID'nin içinde bulunuyor)
Yazıda DID değişim geçmişinde kullanılan anahtarlara dair yeterli bilgi yok, örneğin ben foobar.bsky.social isem bu anahtarları kendim yüklediğimi hatırlamıyorum ya da indirmem gerektiğine dair bir yönlendirme görmedim, bu anahtarlar tam olarak nerede, kimin mülkiyetinde, nasıl ve ne zaman kullanılıyor merak ediyorum, ayrıca DID plc.directory'de duruyorsa, siteyi işleten kişinin benim DID'imi keyfi biçimde değiştirip kimliğimi çalmasını engelleyen mekanizma nedir?
at:// fikri ilginç, ama gerçekten veri sahipliğine dayalı bir sistemde ortaya çıkabilecek sorunlar da aklımı kurcalıyor, örneğin kullanıcı veriye sahip olduğu için içeriği istediği zaman değiştirebilir ya da silebilir, başta iyi niyetli bir şey yazıp sonra kötü niyetle tamamen farklı hale getirebilir, eski içerik hash'lerini saklayıp değişiklikleri engellesek bile yeni bir servis bu geçmişten habersiz olabilir, ayrıca beğeni/upvote gibi şeyleri takip etmek de zor görünüyor, herkes bunları kendi nesnesi olarak tutarsa kimin oy verdiğini bulmak zorlaşır, sahte hesap açıp kendi içeriğini durmadan öne çıkarma konusunda da sınırlama yok gibi, son olarak farklı platformlardan gelen çok sayıda hesap varsa spam ve kötüye kullanımı yönetmek imkânsız hale gelmez mi, her hesabın verisini kendisinin yönettiği bir modelde şeffaflık, hesap verebilirlik, moderasyon, spam engelleme gibi tüm unsurların sistem tasarımı gerçekten ayakta kalır mı emin değilim
Çeşitli kripto protokollerinin merkeziyetsizlik vaat etmesine rağmen sonuçta tek bir platform etrafında toplanmasına benziyor gibi geliyor
"at:// URI ile JSON nasıl bulunuyor" şeklinde yapısal bir sorum var, belgeleri okusam da neden "o JSON"a ihtiyaç duyulduğunu pek kavrayamadım, bana göre bu yaklaşım pek doğal gelmiyor
Bu protokol devasa bir herkese açık Kafka topic'i gibi mi davranıyor diye merak ediyorum, örneğin yeni bir web uygulaması yaparken veriyi kendin saklamayıp tüm kullanıcıların verisini kendi alanlarında tutmasına izin veriyorsun, sen de sadece bunu dinleyen bir listener koyuyorsun ve protokol veri yayılımını garanti ettiği için uygulama bunları dinleyip cache'liyor, yani model kabaca böyle mi, kavramsal olarak ilginç ama güncellemeleri kaçırmamak için offset, ölçek için partition gibi Kafka kavramları burada da var mı diye merak ediyorum