Kayıt ve hesap

Neden kullanıcı adı ve parola gerekmiyor?

Kayıt sırasında uygulama sunucudan küçük bir kriptografik görev (Proof of Work) alır ve çözer — bu, botların otomatik kaydına karşı bir korumadır. Aynı anda benzersiz cihaz tanımlayıcıları ve birkaç şifreleme anahtarı kümesi üretilir: uzun vadeli kimlik anahtarları, imzalı ön anahtarlar ve tek kullanımlık ön anahtarlar (kuantum sonrası ML-KEM-1024 anahtarları dahil). Sunucuya yalnızca bu anahtarların açık kısımları ve PoW görevinin sonucu gider. Özel anahtarlar cihazınızdan asla çıkmaz. Parola yok: hesabı anahtarlar belirler, yeni bir cihazda ona yeniden erişim ise 12 kelimelik kurtarma anahtarıyla sağlanır.

Hesaptan çıkıp yeniden giriş yapabilir miyim?

Evet, 12 kelimelik kurtarma anahtarıyla: yeni bir cihazda veya yeniden yüklemeden sonra “Geri yükle (Restore)” seçeneğini seçin ve kelimeleri girin. Hesap ve adresi geri gelir; eski mesajlar ve oturumlar eski cihazda kalır ve taşınmaz. Bu kelimeler olmadan cihazı kaybetmek veya uygulamayı silmek, hesabı kalıcı olarak kaybetmek demektir.

Telefon değiştirirken hesabımı nasıl kaybetmem?

Kurtarma anahtarı kayıt sırasında kendiliğinden oluşturulur — yapmanız gereken bir şey yok. Bir kopyasını (12 kelime) daha sonra Ayarlar'dan (Settings) kaydedebilirsiniz: uygulama hatırlatır, hesaptan çıkmadan önce ise kesinlikle ister. Kopya alınana kadar kelimeler cihazda şifreli tutulur ve yalnızca Face ID, parmak izi veya telefon kodundan sonra açılır; kopya alındıktan sonra cihazdan silinir. Onları yazın ve güvenli bir yerde saklayın — Konstruct'ın sizin telefon numaranız ve e-postanız yok, hesabınıza dönmenin tek yolu budur.

Kişiler

Birine nasıl mesaj yazarım?

Sistem, yabancı birinin size öylece yazmaya başlayamayacağı şekilde tasarlandı. Sohbet başlatmak için taraflardan biri QR kodu veya davet bağlantısı paylaşır, diğeri onu tarar ya da bağlantıyı izler. Bunlar tek kullanımlıktır: QR kodu beş dakika, bağlantı on iki saat geçerlidir — bir kez kabul edilmiş bağlantı yeniden kabul edilemez. Ayrıca ayarlardan keşfi açıp kullanıcı adınızla bulunabilir hâle gelebilirsiniz; bu varsayılan olarak kapalıdır, yani siz açmadıkça tek yol davettir.

Neden bu kısıtlama? Bu pek pratik değil.

Bu bilinçli bir tercih. Çoğu mesajlaşma uygulamasında bir kişiye mesaj yağdırmaya başlamak için telefon numarasını veya takma adını bilmek yeter. Burada karşılıklı rıza, yalnızca bir politikada beyan edilmekle kalmıyor, mimariye işlenmiş durumda.

Biri QR kodumu bilgim olmadan paylaşırsa ne olur?

Kod yalnızca bir kez kabul edilir; bu yüzden yayılan bir bağlantıyla en fazla bir kişi eklenebilir, kullanılmış bir bağlantı ise hiçbir şey yapmaz. Ayrıca bağlantı oluşturulmasından on iki saat sonra, QR kodu ise beş dakika sonra geçerliliğini yitirir. Biri yine de eklenirse yeni bir sohbet görürsünüz ve onu hemen engelleyebilirsiniz.

Şifreleme ve gizlilik

Şifreleme nasıl çalışıyor?

Tüm mesajlar göndermeden önce göndericinin cihazında şifrelenir ve yalnızca alıcının cihazında çözülür. Sunucu yalnızca şifreli bir akış görür ve onu yönlendirir — içeriği okuyamaz. Oturum kurmak için, kuantum sonrası anahtar anlaşmasıyla genişletilmiş X3DH kullanılır (PQXDH): gönderen, alıcının Kyber ön anahtarına bir ML-KEM-1024 sırrı kapsüller ve bu sır, klasik olanlarla birlikte oturumun ilk anahtarına girer — “şimdi kaydet, sonra kuantum bilgisayarla çöz” senaryosunu sınırlayan da budur. Kuantum sonrası koruma ilk mesajdan itibaren geçerlidir ve uygulama bu koruma olmadan oturum kurmaz. Sonrasında anahtarları her mesajla değiştiren Double Ratchet çalışır — ve her mesajın ayrıca kendi kuantum sonrası anahtarı vardır — bu yüzden tek bir anahtarın ele geçirilmesi ne geçmiş ne de gelecek mesajları açığa çıkarır. Mesajı kimin gönderdiği de kuantum sonrası korunur; aramalar ise iki uygulama da destekliyorsa kuantum sonrası DTLS ile korunur. Şimdilik klasik olanlar: sunucu imzaları (gönderen sertifikaları, anahtar şeffaflığı günlüğü), cihaz girişi ve hesap kurtarma, Privacy Pass belirteçleri (token) ve taşıma TLSi; gruplar henüz yok; tam liste protokol spesifikasyonunda.

Sunucu tam olarak ne görüyor?

Çok az ve hiçbiri siz değilsiniz. Bir mesajı iletmek için sunucunun alıcının opak hesap tanımlayıcısına, şifreli metnin boyutuna ve geliş zamanına ihtiyacı vardır; ayrıca genel anahtarlarınızı ve iOS'ta bir anlık bildirim belirtecini (push token) tutar. Liste bu kadar. İçeriği, adınızı, avatarınızı, kişi listenizi görmez — ve her zaman açık olan gönderen koruması yolunda mesajı kimin gönderdiğini de görmez. Mesajlar sunucuda yalnızca şifreli hâlde durur ve teslim anında değil, saklama süresine göre (yaklaşık 7 gün) silinir. Kullanıcı adı isteğe bağlıdır, yönlendirmede kullanılmaz ve yalnızca tek bir amaç için — sizin bulunabilmeniz için — anahtarlı bir hash olarak saklanır; arama da siz keşfi açana kadar kapalıdır, yani varsayılan olarak bir hesap ada göre hiç bulunamaz.

Peki ya üst veri? Kim kiminle konuşuyor?

Burası daha zor kısım. Sunucu, birinin B cihazına şifreli metin ilettiğini (alıcı, zaman, boyut) hâlâ gözlemleyebilir. Her zaman açık gönderen koruması (sealed sender) sayesinde, yazanın kim olduğunu öğrenemez — bir sonraki soruya bakın. Sansür koruması ağ yolunu kısmen gizler. Yönlendirme katmanında tam anonimlik (hem alıcı tarafından hem de ağ düzeyindeki IP/zamanlama korelasyonundan saklanmak) bambaşka bir ölçekte bir sorundur ve bugün çözülmüş değildir.

Sunucu bir mesajı kimin gönderdiğini biliyor mu?

Hayır — gönderen alanı zarfa konmaz ve bu, olağan trafik için (mesajlar, teslim bildirimleri, arama kurulumu, profil paylaşımı) her zaman açıktır. Unutabileceğiniz bir anahtar yok. Cihazınız imzalı bir gönderen sertifikasını alıcının anahtarına mühürler: alıcı onu açıp kimin yazdığını doğrulayabilir, sunucu ise açamaz. Birkaç iç yol — bağlantıyı canlı tutma, kendi cihazlarınızı eşitleme, oturum bakım mesajları — tasarım gereği yine de göndereni taşır.

Tam olarak neyin gizlendiğini netleştirmekte fayda var, çünkü bu bir kimlik değil. Sunucuda zaten hiçbir zaman kimlik olmadı: buradaki hesap bir anahtar çifti ve opak bir tanımlayıcıdır; telefon numarası, e-posta ya da gerçek ad yoktur, yani baştan bir kişiyle eşleştirilecek bir şey yok. Gönderen koruması, bu tür iki tanımlayıcı arasındaki son bağı — kimin kime yazdığını — kaldırır. Ağ katmanı ayrı bir konu, yukarıda ele alındı: zaman ve IP görünür kalır ve kaynakları güçlü bir gözlemcinin çalıştığı yer tam da orasıdır.

Sınırlar: Gönderen koruması, gönderenin kimliğini sunucudan gizler; ancak zamanı, boyutu veya IP adresini gizlemez — bunlar ağ/taşıma katmanında görünür kalır. Privacy Pass belirteçleri (token) spam önleme için gönderimle birlikte gidebilir; sunucu tarafı uygulama hâlâ devreye alınıyor — belirteç tabanlı hız denetimi henüz olgunlaşmakta, tamamlanmış değil.

Analitik veya telemetri topluyor musunuz?

Hayır, hiç. Analitik yok, kullanım metrikleri yok, davranış olayları yok, çökme raporu gönderimi yok, reklam tanımlayıcıları yok. “Toplanıp anonimleştirildi” değil — hiç toplanmıyor. Uygulamada üçüncü taraf izleyici yok (Firebase, Crashlytics, Sentry, Amplitude, Segment yok); tek dış bağımlılıklar taşıma/medya altyapısı ve iOS'ta cihaz üzerindeki bir konuşma tanıma kütüphanesidir. Üstelik sürüm derlemeleri diske tanılama günlüğü yazmaz ve hata ayıklama ya da günlük dışa aktarma ekranı sunmaz. Bir hatayı düzeltmek için günlüklere ihtiyaç duyduğumuzda, beta derlemesindeki “paylaş” düğmesine basan sizsiniz — sessiz bir gönderim asla yok.

Profil

Display Name ne işe yarar?

Görünen adınız ve avatarınız cihazınızda durur; herkese açık profilinizin parçası değildirler ve kimse onları arayıp bulamaz. Yeni bir sohbet başlattığınızda karşı taraf yalnızca üretilmiş bir takma ad görür — belirleyici, yani belirli bir kimlik için hep aynı. Gerçek adınızı ve fotoğrafınızı göstermek için kişinin profilini açın ve “Profilimi paylaş (Share my profile)” anahtarını açın: ikisi de şifreli kanaldan gider. Bir istisna: kişi isteği gönderdiğinizde, alıcı kimin istediğini anlayabilsin diye kullanıcı adınız ve görünen adınız isteğe eklenir. Sunucu bu anlık görüntüyü şifreli saklar, ancak sunucunun kendi tuttuğu bir anahtarla — bu, uçtan uca şifreleme değildir; avatar ise anlık görüntüye hiçbir zaman dahil edilmez.

Neden boş değil de üretilmiş bir ad?

Boş bir ad pratik olmazdı: sohbet listesinde yüzsüz satırlar görür, kişileri birbirinden ayıramazdınız. Üretilen ad kalıcıdır — “Quick Falcon”, o kimlik için her cihazda hep “Quick Falcon” olacaktır.

Birinin kullanıcı adı varsa onu görür müyüm?

Evet. Gösterim önceliği: Display Name (paylaştıysa) → kullanıcı adı → üretilen ad. Yani biri @john kullanıcı adıyla kaydolduysa “Peaceful Whale” değil, onu görürsünüz.

Mesajlar

Mesaj durumları ne anlama geliyor?
  • Gönderiliyor (Sending) cihazınızda şifreleniyor
  • Gönderildi (Sent) cihazınızdan çıktı, sunucu kabul etti
  • Teslim edildi (Delivered) alıcının cihazı şifresini çözdü ve onay gönderdi
  • Sırada (Queued) henüz gitmedi — uygulama kendi başına denemeye devam ediyor; beklemek istemiyorsanız dokunun
  • Gönderilemedi (Failed to send) yeniden denemenin düzeltemeyeceği bir nedenle reddedildi, bu yüzden kendiliğinden bir şey olmaz; yeniden denemek için dokunun

“Okundu” durumu yoktur ve bu bilinçlidir: okundu bilgisi, göndericiye uygulamayı ne zaman açtığınızı söylerdi — bu, mesajın ihtiyaç duymadığı, sizinle ilgili bir bilgidir. “Teslim edildi”, alıcının cihazından gelen şifreli bir makbuzdur — sunucunun bir şeyi ilettiğini söylemesi değil.

Gönderilmiş mesajları düzenleyebilir miyim?

Evet, düzenleme desteklenir. Değişiklikten sonra mesaj “düzenlendi (edited)” olarak işaretlenir. Düzenleme, alıcının cihazına sıradan mesajlarla aynı teslim mekanizması üzerinden yayılır.

Uygulama kapalıyken bildirimler neden bazen gelmiyor?

iOS'ta bildirimler Apple Push Notification Service (APNs) üzerinden gelir: kararlı bir bağlantı gerekir; telefon uçak modundaysa, agresif filtreleme yapan bir VPN'in arkasındaysa ya da Apple push'u “düşük öncelikli” sayarsa bildirim gecikebilir veya hiç gelmeyebilir. Android'de hiç anlık bildirim servisi yoktur: uygulama kendi bağlantısını tutar, bunu kalıcı bir bildirim gösterir; agresif pil tasarrufu veya engellenmiş bir ağ mesajları geciktirebilir. Uygulama yeniden açıldığında mesajlar otomatik olarak yüklenir.

Sansür koruması

Konstruct, mesajlaşma uygulamalarının engellendiği yerlerde çalışıyor mu?

Uygulamada, doğrudan bağlantı engellendiğinde uygulamanın ağa nasıl çıktığını değiştiren bir sansür koruması (Censorship protection) modu var. Ayarlarda bu, üç konumlu tek bir anahtardır — kapalı, otomatik, açık — ve varsayılan «otomatik»tir: doğrudan bağlantı çalıştığı sürece o kullanılır, geçiş yalnızca kanıtlanmış bir başarısızlıktan sonra yapılır. Yapılandırılacak bir şey yok, adres girmeniz gerekmez, her şey arka planda olur. Uygulama açık kaynak olduğundan tasarımı herkes inceleyebilir.

Sansür koruması her zaman açık mı?

Varsayılan olarak otomatiktir: doğrudan bağlantı daha hızlıdır, bu yüzden çalıştığı sürece o kullanılır, geçiş yalnızca kanıtlanmış bir başarısızlıkta yapılır. İsterseniz zorla açabilir ya da kapatabilirsiniz. Bilerek yayımlamadığımız şey ise hangi tekniklerin şu anda hizmette olduğu ve bunların nerelerde geçip nerelerde geçmediği: bu konuda herkese açık ve güncel bir özet, engelleyenler için bedava geri bildirimdir. Aynı nedenle uygulamanın kendisi de bunu göstermez.

Ağın dayanıklılığı ve sürdürülebilirlik

Konstruct'ın sunucuları kapanırsa ne olur?

Mesajlaşma, geri gelene kadar durur. Alfa tek bir güvenilir sunucuda çalışıyor ve bugün ikinci bir yol yok — ne röle var, ne eşler arası bağlantı, ne de başvurulacak başka bir sunucu. Şifreli olan her şey şifreli kalır, hiçbir şey kaybolmaz — yalnızca hareket etmez. Yol haritası tam olarak bunu geçersiz kılmak için var ve henüz hiçbiri yayımlanmadı.

Temel mesajlaşma her zaman ücretsiz mi kalacak?

Evet — koşulsuz. Mesaj göndermek, mesaj almak, uçtan uca şifreleme ve tüm güvenlik özellikleri asla ücretli bir duvarın ardına geçmeyecek. Yalnızca bağışa dayalı modeller gizlilik projeleri için tarihsel olarak kırılgan çıktı; bu yüzden Konstruct bir karışım planlıyor: gönüllü bağışlar, isteğe bağlı premium özellikler (büyük dosyalar, genişletilmiş geçmiş, temalar — asla güvenlik özellikleri) ve kuruluşlar için B2B barındırma. Çekirdek her zaman ücretsiz olacak.

Konstruct neyle ayakta duruyor? Bağış yapabilir miyim?

Reklam yok, veri satışı yok, telemetri yok — bunun diğer yüzü, Konstruct'ın gönüllü bağışlarla yaşıyor olması. Bağışlar doğrudan geliştirmeye ve sunucuya gider. Gizliliğe önem veriyorsanız Monero (XMR) tercih edin; Bitcoin'in aksine zinciri herkese açık değildir. Sayfanın değiştirilmiş olma ihtimaline karşı göndermeden önce adresi her zaman projenin deposuyla karşılaştırın.

  • Monero (XMR) — önerilen:
    496i5qvPzRtJPQjiPXnLvEGutjHFth4pWDQaJwbbMreyaTYg4qfbo48MXrTnYH32MHiAn5GcSEN1c48EYBvVkrx9Pi5BWvn
  • Bitcoin (BTC):
    bc1q5cthgu6k9utg9hk2mx2xshdtsrhvu54ysmqhmm
  • Ko-fi — kullanışlı ama gizli değil: ödeme hizmeti kim olduğunuzu bilir:
    ko-fi.com/construct_msg
P2P modu nedir ve ne zaman devreye girer?

P2P modu planlandı ancak henüz hayata geçirilmedi — şu anda tüm trafik merkezi sunucu üzerinden geçiyor. Hedeflenen tasarım: iki kişi aynı anda çevrimiçi olup Konstruct sunucusuna bağlı olduğunda, sunucu onlara QUIC üzerinden doğrudan P2P bağlantıya geçmeleri için sinyal verir. Bağlantı kurulduktan sonra sunucu teslimat yolundan çıkar — trafik doğrudan cihazlar arasında akar. Taraflardan biri çevrimdışı olursa teslimat yeniden sunucuya döner.

Güvenlik ve koruma

Tanımadığım kişiler bana toplu mesaj atmaya başlarsa ne olur?

Bunun için uygulamada «Koruma modu» (Lockdown mode) var. Açıkken bildirimler ve uyarılar yalnızca modun etkinleştirildiği anda kişilerinizde bulunan insanlardan gelir. Yeni göndericilerin mesajları yine de kaydedilir — sadece sizi rahatsız etmez. Kamuya mal olmuş biriyseniz ve yeni kişilere geçici olarak kapanmak istiyorsanız işe yarar.

Peki tek bir kişi yüzlerce mesajla spam yapmaya başlarsa?

Tek bir göndericiden kısa sürede şüpheli derecede çok mesaj gelirse (30 saniyede ~10'dan fazla), istemci otomatik olarak bir uyarı gösterir ve o kişinin bildirimlerini sessize alır. Ardından ona ya izin verebilir ya da onu engelleyebilirsiniz. Önemli: bu, alıcı tarafında çalışan bir korumadır ve göndericinin hangi istemciyi kullandığından bağımsız olarak işler.

Teknik sorular

“Oturum” nedir ve neden bazen “bozulur”?

Oturum, iki cihaz arasında kurulmuş şifreli bir kanaldır. Yeniden kullanılamayan tek kullanımlık anahtarlara dayanır ve anahtarlar her mesajla birlikte döner. Uygulama uzun süre çalışmadıysa, cihaz yeniden kurulduysa ya da karşı taraf sohbeti sildiyse, gelen mesaj okunamaz hale gelebilir. Bu durumda alıcının uygulaması göndericiye mesajın hangi oturum durumunda yazıldığını bildirir; göndericinin uygulaması yeni bir durum açar ve mesajı yeniden gönderir. Kullanıcı çoğunlukla hiçbir şey fark etmez — mesaj sadece ulaşır.

Birden fazla cihaz destekleniyor mu?

Genel sürümlerde ikinci bir cihazı bağlamak henüz mümkün değil. Yerel masaüstü istemcisi dondurulmuş durumda; geliştirilmekte olan istemci konsol tabanlı (TUI). Kimlik sunucudaki bir hesaba değil anahtarlara bağlı olduğundan, çoklu cihaz desteği için ayrı bir anahtar bağlama mekanizması gerekiyor — üzerinde çalışıyoruz.

Konstruct canlı mesajlar için hangi taşıma katmanını kullanıyor?

Canlı mesajlar, çift yönlü gRPC MessageStream üzerinden akar — heartbeat'ler, gelen mesajlar ve receipt'ler için tek bir uzun ömürlü akış; request/response polling yok. Güncel iOS sürümlerinde asıl yol QUIC (construct-transport); QUIC engellenirse ya da handshake başarısız olursa istemci otomatik olarak HTTP/2 + TLS 1.3 üzerinden gRPC'ye düşer. Uçtan uca şifreleme taşıma katmanından bağımsızdır: hat üzerinden yalnızca sealed ciphertext geçer.

Test edenler için

Önce nelere bakmalı?
  • Kayıt olma ve QR kodla kişi ekleme
  • Mesaj gönderme ve alma (her iki yönde)
  • Teslimat durumları — mesaj «teslim edildi» (Delivered) durumuna ulaşıyor mu, «sırada» (Queued) ve «gönderilemedi» (Failed to send) durumları dokununca gönderimi yeniden deniyor mu?
  • Mesaj düzenleme — alıcı değişiklikleri görüyor mu?
  • Uygulama arka plandayken bildirimler
  • Kötü bağlantıda davranış (uçak modu → bağlantının geri gelmesi)
  • Yeniden kurulumdan sonra hesabı kurtarma anahtarıyla geri yükleme
  • Ayarlar'dan (Settings) kurtarma anahtarı kopyasını alma
Hata nasıl bildirilir?

Tanılama (dahili) sürümlerde yol şöyle: Ayarlar (Settings) → Tanılama ve günlükler (Diagnostics & logs) → Günlükleri paylaş (Share logs). Genel sürümler günlük tutmaz ve bu ekranı hiç derlemez — sürümünüzde böyle bir satır yoksa senaryoyu anlatın, size bir tanılama sürümü verelim. Açıklama ne kadar ayrıntılıysa (ne yaptınız, ne bekliyordunuz, ne oldu) sorunu o kadar hızlı çözeriz. Oturumla ilgili bir sorun için her iki cihazın günlüklerini ekleyin.

Günlüklerde neden bu kadar çok tekrar eden satır var?

Hata ayıklama sürümlerinde bazı bileşenler arayüzün her güncellenişinde günlüğe yazar — geliştirme için bu normaldir. FRC updated: 69 message(s) in window gibi satırlar sohbet listesinin yenilenmesidir ve bir soruna işaret etmez.