Nostr da Ne? Açıkçası Ben de İlk Başta Bilmiyordum.

Nostr’a yeni başlayanlar için protokolün temel mantığını sade bir dille açıklamaya çalıştım bu yazıda istemci, relay, event, kind, açık ve özel anahtarlar ile signer kavramlarını ele alıyorum. Ayrıca Nostr kimliğinin neden tek bir uygulamaya bağlı olmadığını ve signer kullanımının özel anahtar güvenliği açısından neden önemli olduğunu anlatıyorum.
Nostr da Ne? Açıkçası Ben de İlk Başta Bilmiyordum.

Aslında bu yazıyı yazmadan önce paylaşmış olduğum SkySigner makalemin altına biri oldukça haklı bir yorum bırakmıştı:

“Güzel de, Nostr da ne?”

Sonra durup düşündükten sonra bu soruyu yazan kullanıcının haklı olduğuna ve bu sorunun çok haklı bir soru olduğuna karar verdim.

Ben Nostr signer’larından, izinlerden ve güvenlikten bahsederken okuyucuların Nostr’u zaten bildiğini olduğunu varsaymıştım. Böyle bir hataya düşmüştüm.

Ama Nostr’u herkes bilmiyor. Ben de bilmiyordum. Bu yüzden SkySigner hikayesine devam etmeden önce, aslında en başta yazmam gereken kısa açıklamayı paylaşmak istiyorum.

Nostr ile İlk Karşılaşmam

Nostr’a ilk bakmaya başladığımda, onu başka bir sosyal ağ olduğu gibi bir hataya düştüm. Nostr’u X, Facebook ya da başka bir alternatif sosyal medya platformu gibi bir şey olduğunu düşünmüştüm. Ama Nostr aslında bir internet sitesi değildi. Ağın sahibi olan, herkesin hesabını saklayan ve kimin ne paylaşabileceğine karar veren tek bir nostr.com yoktu.

Nostr bir protokol.

Farklı uygulamalar bu protokolü kullanarak aynı ağ ile iletişim kurabiliyordu. Bu fark, farklı Nostr istemcilerini denemeye başladığımda benim için çok daha anlaşılır hale gelmişti. İstemci, Nostr ağına bağlanmak için kullandığınız uygulamadır. Bir istemciyi kullanabiliyor, ardından başka bir istemci açabiliyor ve yine aynı kimliğimi kullanabiliyordum. Başta bu bana oldukça garip gelmişti. Geleneksel sosyal ağlarda hesabınız platforma aittir. X hesabınız X üzerinde ve Facebook hesabınız Facebook üzerinde bulunur. Nostr’da ise kimliğinizin, o anda kullandığınız istemciye ait olması gerekmiyor. Ve işte anahtarlar tam burada devreye giriyor.

Hesabınız Temelde Bir Anahtar Çiftidir

Bir Nostr kimliğinin merkezinde iki kriptografik anahtar bulunuyor.

Bir açık anahtar sizi tanımlar.

Bir özel anahtar ise sizin gerçekten siz olduğunuzu kanıtlar.

Açık anahtarınızı rahatlıkla paylaşabilirsiniz. Tehlikeli olan özel anahtarınızdır. Eğer biri özel anahtarınızı ele geçirirse sizin adınıza event imzalayabilir.

Bu durum, “giriş yapmak” kavramına bakışımı hemen değiştirdi. Normalde bir internet sitesi benden giriş yapmamı istediğinde aklıma şu gelir:

kullanıcı adı + şifre

Nostr ise bana şunu düşündürmeye başladı:

kimlik + kriptografik imza

Ve burada oldukça açık bir problem ortaya çıkıyordu. Denemek istediğim her Nostr sitesine yani istemcisine özel anahtarımı yapıştırmak istemiyordum.

Sonra Signer’ları Öğrendim
Signer farklı bir yaklaşım sunuyordu.
Özel anahtarınızı internet sitesine vermek yerine, anahtarınızı ayrı bir yerde tutuyorsunuz.
Nostr uygulamasının bir şeyi imzalaması gerektiğinde signer’dan bunu istiyor.

Kabaca şöyle:

Nostr→ “Lütfen bunu imzala.” → Signer → Kullanıcı onayı → İmza

İnternet sitesi (Nostr istemcisi) ihtiyacı olan imzayı alıyor.

Özel anahtarın kendisini almasına gerek kalmıyor.
Bu bana çok daha mantıklı geldi.

Dolayısıyla doğal olarak hazır bir signer kullanıp hayatıma devam etmek yerine kendi signer’ımı geliştirmeyi denemeye karar verdim.

Yapmış olduğum SkySignerimzalama eklentisi böyle ortaya çıktı.

Peki Nostr Paylaşımları Nerede Saklanıyor?

Başlangıçta anlamam gereken başka bir konu da buydu.

Ortada merkezi bir Nostr şirketi yoksa bu paylaşımlar nereye gidiyor?

Nostr, relay adı verilen sunucuları kullanıyor. Bir istemci (primal,yakihonne, nostria, coracle.social, nostr.com gibi sosyal medya benzeri istemciler) imzalanmış event’lerinizi relay’lere gönderebilir ve diğer istemciler de bunları relay’lerden alabiliyor. Nostr kullanmaya başlayınca merakla ve bir hışımla zaten hangi istemcileri kullanman gerektiğine kendiniz karar veriyorsunuz. Çünkü her istemci farklı kullanıcılara hitap ediyor.

Açıkçası bu yapı ilginç bir ayrım oluşturuyor:

Kimliğiniz anahtarınızdır.

Kullandığınız uygulama istemcidir.

Relay’ler event’lerin dağıtılmasına yardımcı olur.

Bu nedenle bir şeyler paylaşabiliyor ve daha sonra onu başka bir Nostr istemcisinde görebiliyordum. Her uygulama değiştirdiğimde tamamen yeni bir kimlik oluşturmuyordum.
Sadece Nostr ile etkileşime geçmek için kullandığım yazılımı (istemciyi) değiştiriyordum.
Sanırım Nostr’ın benim için gerçekten anlam kazandığı an da buydu.

“Event” Nedir?
Nostr’da sürekli olarak event kelimesiyle karşılaşıyorsunuz. Bu Event’te nedir diye düşünüyorsunuz. Aslında kelime kulağa olduğundan daha karmaşık geliyor olabilir.

Ama zamanla bu kelimenin basit bir benzetme olduğunu öğreniyorsun:

Bir paylaşım bir event olabilir.

Bir tepki bir event olabilir.

Bir profil güncellemesi bir event olabilir.

Farklı event türlerinin farklı kind değerleri bulunur.

Kind, Nostr’da bir event’in ne tür bir işlem veya içerik olduğunu belirten numaradır.

Örneğin:

Kind 0 → Profil bilgileri
Kind 1 → Kısa metin paylaşımı
Kind 3 → Takip listesi

Yani kind değeri, istemcilere “bu event’i nasıl yorumlamalıyım?” bilgisini verir.

Event kısmına devam edelim. İstemci event’i oluşturur. Anahtarınız onu imzalar. Relay’ler dağıtır.

Burada Relay, Nostr’da event’lerin gönderildiği, saklandığı ve diğer istemciler tarafından alındığı sunucudur.

Kısaca:

İstemci event’i oluşturur → relay’e gönderir → diğer istemciler relay’den alır.

Nostr’da tek bir merkezi sunucu yoktur. Bu yüzden kullanıcılar birden fazla relay kullanabilir. Buna yakın zamanda çıkan wss://relay.nostr.org.tr relayi de dahil. Kendi ilgi alanınız ve deneyimleriniz sonrası istediğiniz relayi kullanmaya başlıyorsunuz.

Event konumuza geri dönersek diğer istemciler ise eventi yorumlar. Bu oldukça basitleştirilmiş bir açıklama sanırım.

Signer, Nostr’da özel anahtarınızı doğrudan istemciye vermeden event’leri imzalamanızı sağlayan araçtır.

Kısaca:

İstemci imza ister → signer kullanıcıdan onay alır → event imzalanır.

Böylece nsec yani özel anahtarınız uygulamayla (istemciyle) paylaşılmadan Nostr’da güvenli şekilde işlem yapabilirsiniz. Ayrıca bir signer’ın neden önemli olduğunu anlamak için yeterli bir açıklama olduğunu düşünüyorum.

Bir signer yalnızca “paylaşımları” onaylamaz. Çok farklı türlerde event’leri imzalaması istenebilir.

Ve bir anda başka bir güvenlik sorusu ortaya çıkıyor:

Her Nostr uygulamasının (istemcisinin) signer’dan her şeyi imzalamasını istemesine izin verilmeli mi?

İşte daha sonra Türkçe’ye çevireceğim SkySigner makaleme giden sorular silsilesinin devamı tam olarak burada başladı.

Nostr’ı Neden İlginç Buldum?
Nostr’ı hala öğreniyorum ve öğrenmeye devam ediyorum. Bunu özellikle belirtmek istiyorum. Bu yazıyı, yıllardır Nostr protokolünü kullanan veya geliştiren biri olarak yazmıyorum. Yakın zamanda Nostr ile karşılaşmış, denemeler yapmaya başlamış ve sonunda bir bölümünü daha iyi anlamak istediği için kendi aracını geliştirmiş biri olarak yazıyorum.

Belki de Nostr’ın benim için ilginç hale gelmesinin nedeni tam olarak budur. Sadece başka bir sosyal medya sitesi keşfetmedim.

Şunlar arasındaki ilişki hakkında farklı bir düşünme biçimi keşfettim:

kimlik, uygulamalar, sunucular ve kriptografik anahtarlar.

Kimliğinizi değiştirmek zorunda kalmadan istemci değiştirebilirsiniz. Kimliğinizin tek bir şirketin veri tabanında saklanan kullanıcı adı olması gerekmez. Ve uygulamaların sizin adınıza işlem yapabilmesi için özel anahtarınıza doğrudan sahip olması da gerekmeyebilir. Elbette bütün bunlar beraberinde yeni problemleri de getiriyor. Zaten SkySigner’ı geliştirmeye başlamamın nedeni de tam olarak buydu.

Verebileceğim En Basit Açıklama

Daha önce Nostr’ı hiç duymadıysanız, başlangıçta birinin bana anlatmasını istediğim zihinsel model şu olurdu:

Nostr protokoldür.

İstemciler Nostr’a erişmek için kullandığınız uygulamalardır.

Relay’ler event’lerin taşınmasına ve saklanmasına yardımcı olur.

Açık anahtarınız sizi tanımlar.

Özel anahtarınız sizin gerçekten siz olduğunuzu kanıtlar.

Bir signer, özel anahtarınızı doğrudan her istemciye vermeden kullanmanıza yardımcı olabilir.

Elbette Nostr bu altı satırdan çok daha fazlasıdır.

Ama hikayenin geri kalanını anlayabilmek için her NIP’i, her event kind’ını ya da bütün kriptografik ayrıntıları bilmeniz gerekmiyor.

Ve artık benim için SkySigner deneyiminin de biraz daha fazla bağlamı var.

Bir konu hakkında haftalardır bir şeyler öğrenip yazarken hatırlanması gereken en önemli şeylerden biri bazen şaşırtıcı derecede basit oluyor:

Okuyucunuz, siz bunları öğrenirken yanınızda değildi.

Nostr’ı anlamak ilk başta biraz karmaşık görünebilir. İstemciler, relay’ler, anahtarlar, event’ler ve signer’lar derken yeni kavramlar peş peşe geliyor. Ama mantığı parçalara ayırınca aslında sistem oldukça anlaşılır hale geliyor.

En önemli noktalardan biri şu: Nostr’da kimliğiniz kullandığınız uygulamaya bağlı değildir. İstemci yalnızca Nostr ağına erişmek için kullandığınız araçtır. Kimliğiniz ise anahtarlarınıza aittir.

Signer’lar da burada önemli bir güvenlik katmanı sağlar. Özel anahtarınızı her uygulamaya vermek yerine, imzalama işlemlerini ayrı ve kontrollü bir yerde gerçekleştirebilirsiniz.

Ben de Nostr’ı ve signer mantığını öğrenmeye devam ediyorum. SkySigner’ı geliştirirken öğrendiklerimi de mümkün olduğunca paylaşmaya devam edeceğim.

Türkçe eventler (paylaşımlar, makaleler vs.) için relay listenizde wss://relay.nostr.org.tr/ eklemeyi unutmayın.

Saygılarımla,
SkyLords

Türkçe Relay = wss://relay.nostr.org.tr/


Write a comment