rilo
Rilo maskotu tilki, üzerinde asma kilit olan bir kalkanın yanında duruyor

Biraz teknik konuşalım.

Ana sayfanın söylediği her şey, yapıldığı malzemeyle yazılmış hâli. Gerçek veritabanı, bir bağlantının gerçekte nasıl kurulduğu ve bir aramaya başka kimin dokunduğu.

Rilo’yu kullanmak için bu sayfaya ihtiyacınız yok ve buradaki hiçbir şey daha basit anlatımla çelişmiyor. Aynı ürün, sadece daha kesin anlatılmış.

Veritabanının tamamı

Sunucumuzun aileniz hakkında bildiği her şey.

Özet değil. Sunucuda gerçekten duran on yedi tablo, sütunlarıyla birlikte. Dördü ailenizle ilgili. Kim oldukları, bir çocuk adına kimin hareket edebileceği, hangi telefonlardan konuştukları ve onlara nereden ulaşılacağı. Dördü, kapalı kalmış bir telefon için bir şey saklar ve dördü de kendini siler. Üçü, bir çocuk adına kimin hareket edebileceği ve hangi telefona artık güvenilmediğiyle ilgili. İkisi bir sonun imzalı kaydı, kesilmiş bir bağlantı ya da Rilo’dan ayrılmış biri. Çevrimdışı kalmış bir telefon bize inanmak yerine kendisi denetleyebilsin diye saklanırlar. Biri, kullanılıp bitmiş tek kullanımlık numaralar, süreleri dolarken süpürülüyor. Biri abonelik ve içinde kimsenin adını veren hiçbir şey yok. Biri bir yetişkinin bize gönderdiği bir bildirim ve burada bir şeyin olmasını sağlamak için var olan tek tablo o. Sonuncusu ailenizle hiç ilgili değil.

accounts siz silene kadar saklanıyor
  • idaçık anahtarın özeti, bir ad değil
  • public_keyhesabın kendisi olan cihaz anahtarı
  • typeyetişkin ya da çocuk
  • type_certbunu kanıtlayan imza. Çocuk hesabını bir ebeveyn imzalar, yani çevrilecek bir düğme yok
  • created_at
  • last_activetelefonlarınızdan birinin en son merhaba dediği an
  • dormant_warned_atboş
  • consent_sealedkayıt olurken verdiğiniz e-posta adresi, kurucunun yanındaki kâğıtta duran bir anahtarla mühürlenmiş. Hiçbir sunucu okuyamaz
  • uncovered_sinceboş, eğer aboneliğiniz bu çocuğu artık kapsamıyorsa — o zaman bunu fark ettiğimiz gün, böylece bir şey durmadan önceki ay o günden başlar
Hesap satırınız siz silene kadar durur ve uygulamada silmek bu satırı ve ona bağlı her şeyi birlikte götürür. Rilo’yu tamamen kullanmayı bırakmış aileleri temizlemek üzerinde çalışıyoruz, o devreye girene kadar buradaki hiçbir şey kendi kendine gitmiyor.
server_state saklanıyor
  • keyhatırlanan şey
  • valueve ne dediği
Burada ailenizle hiç ilgisi olmayan tek tablo. Bugün içinde tek bir şey var, sunucunun bu sürümünün ilk çalıştığı an. Kimin sessizleştiğine dair her soru o andan başlayarak ölçülür, böylece biz henüz ölçemezken yazılmış bir veritabanı asla aylarca sessizlik gibi okunamaz.
guardians saklanıyor
  • account_id
  • guardian_keybu çocuk adına hareket etmesine izin verilen bir anahtar
  • added_at
  • removed_at
Çıkarma işlemi silinmez, işaretlenir. Kişiler, bağlantı imzalandığı sırada kimin sorumlu yetişkin olduğuna bakılarak denetlenir, böylece hesaptan ayrılan bir ebeveyn onayladığı bütün arkadaşlıkları sessizce koparmış olmaz.
devices saklanıyor
  • account_id
  • device_keybir telefonun kendi anahtarı. Bir kişi birden fazla telefondan konuşabilir
  • agreement_keybir mesajın mühürlendiği anahtar, böylece kutuyu yalnızca o telefon açabilir
  • certbu telefonu içeri alan imza, kelimesi kelimesine saklanır, böylece telefonunuz bize inanmak yerine kendisi denetleyebilir
  • kindbir telefon ya da basılı kurtarma sayfası
  • added_at
  • removed_at
Bir kişinin konuştuğu telefonlar ve tabletler. Ailenizin kaç cihazı olduğunu söyler, kiminle konuştuğunuza dair hiçbir şey söylemez, üstündeki iki tablodan fazlasını değil. Bir telefonu içeri, listede zaten bulunan bir cihazın imzası alır, asla biz almayız, ve o imza burada saklanır ki her telefon listeye inanmak yerine imzayı denetleyebilsin. Bir telefonu kullanımdan çıkarmak satırı silmez, işaretler. Ayrılan bir yetişkinin işaretlenmesindeki gerekçe burada da geçerli, o telefon sizinken imzaladığı her şeyin denetlenebilir kalması gerekiyor.
push_tokens saklanıyor
  • account_id
  • device_keybunun hangi telefonunuzu çaldırdığı
  • platformapns ya da fcm
  • tokenApple ya da Google’dan gelen, kendisinden hiçbir şey okunamayan bir tanıtıcı
  • updated_at
Cihaz başına bir tane, böylece bir arama uyuyan bir telefonu çaldırabilir. Bildirim ne ad taşır ne içerik.
used_nonces süpürülüyor
  • nonce
  • expires_at
Kullanılıp bitmiş tek kullanımlık numaraların listesi, böylece yakalanan bir istek yeniden oynatılamaz. Süresi dolarken silinir.
denied_edges süpürülüyor
  • edge_hashçiftin özeti, iki kişinin kendisi değil
  • denied_at
  • expires_at
Bir yetişkin bir tanışmaya hayır dediğinde, bu tablo o hayırı üç gün hatırlar, böylece o sırada kapalı olan diğer ebeveynin telefonu tanışmayı yanlışlıkla tamamlayamaz. Aynı aileler arasında yapılan yeni bir okutma bunu erkenden temizler. Ad yok, anahtar yok, yalnızca bir özet ve iki tarih.
pending_grants süpürülüyor
  • edge_hashçiftin özeti, iki kişinin kendisi değil
  • grant_recordkarara bağlanan izin ve şu ana kadar toplanan imzalar
  • waiting_keyhâlâ kimin imzasının eksik olduğu
  • requested_byisteği gönderen telefon, böylece tek bir telefon bir aileyi sorulara boğamaz
  • originyüz yüze okutuldu ya da bir ebeveyn çocuğu adına hareket etti
  • delivered_tobunu hangi telefonların zaten aldığı
  • declaredisteyen tarafın kendi adı, yalnızca kodunu okuttukları aile okuyabilsin diye mühürlenmiş
  • created_at
  • expires_at
Sunucunun, kimin kimi tanıdığına dair bir haritaya benzeyen bir şey tuttuğu tek yer burası ve onu yalnızca bir tanışma yarım kaldığı sürece tutar. 72 saat içinde kimse cevap vermezse hükmü kalkar. Cevap verildi ama ulaşması gereken telefon hiç çevrimiçi olmadıysa 30 gün beklenir. İki telefon da tamamlanmış bağlantıyı eline aldığı anda satır silinir. Bu sayfada kişilerin listelendiği bir tablo olmamasının nedeni bu. Kişiler tablosu diye bir şey yok.
messages teslim edilince silinir
  • id
  • recipient_idyönlendirme bunun açık durmasını gerektiriyor
  • recipient_devicekutunun onların hangi telefonu için mühürlendiği. Her telefonun kendi anahtarı var, yani her biri kendi kutusunu alır
  • sender_idböylece telefon kutuyu kimin anahtarının açtığını bilir
  • sender_deviceonların hangi telefonunun mühürlediği, böylece doğru kopya doğru kilidi bulur
  • edge_hashçift, özetlenmiş hâlde, böylece bu kimin kiminle konuştuğunun haritası olarak okunamaz
  • sealedşifreli metin. Metin sütunu yok ve hiçbir zaman olmayacak
  • sent_at
  • expires_at
Bir telefon günün büyük kısmında kapalıdır ve sessizce kaybolan bir mesaj bozuk bir üründür. Bu yüzden mühürlü bir kutu burada bekler, en çok 30 gün, ve alıcı eline aldığını doğruladığı anda silinir. Biz bu kutulardan birini açamayız.
revocations saklanıyor
  • edge_hashçift, özetlenmiş hâlde
  • revoked_at
  • recordimzalı kayıt, böylece çevrimdışı kalmış bir telefon sözümüze güvenmek yerine kesilmeyi kendisi doğrulayabilir
Süresiz sakladığımız tek şey. Bir bağlantının kesilmiş olduğunu kaydeder, kimin kimi tanıdığının okunabilir bir listesi olmadan.
roster_changes saklanıyor
  • id
  • account_idtelefon ve yetişkin listesi değişen kişi
  • kindkatılıyor ya da çıkarılıyor
  • subject_keyilgili olduğu telefon ya da yetişkin
  • subject_kindbu ikisinden hangisi
  • agreement_keybir telefonun ihtiyaç duyduğu ikinci anahtar, kâğıt için boş
  • recordimzanın kendisi, kelimesi kelimesine saklanır, böylece bir telefon bize inanmak yerine denetleyebilir
  • signed_byhangi anahtarın imzaladığı
  • by_authorityimzayı bir kurtarma sayfasının atıp atmadığı, beklemesine yol açan şey bu
  • issued_atimzalayanın öne sürdüğü an, asla bizim saatimiz değil
  • reasonboş, imzalayan bir şey yazmadıysa
  • proposed_at
  • effective_atne zaman gerçek olduğu, önerilmesinden iki gece sonra
  • contested_at
  • contested_bykimin itiraz ettiği ve itiraz ederken kullandığı imza
  • contest_record
  • resolved_at
  • resolutionsonuçlandığında uygulandı ya da iptal edildi
Birinin bir çocuğun yetişkinlerinde bir değişiklik imzalamasıyla o değişikliğin gerçek olması arasındaki iki gece. Bir aileye katılan ya da aileden atılan bir telefon burada, hesaptaki her telefonun görüp itiraz edebileceği yerde bekler. Satır sonuçlandıktan sonra da kalır, çünkü kapalı kalmış bir telefonun sözümüze güvenmek yerine ne olduğunu denetleyebilmesi gerekir. Hesabı ve işin içindeki anahtarları tutar, bu da buradaki çoğu tablodan fazlası.
roster_change_votes saklanıyor
  • change_idhangi bekleyen değişiklik
  • voter_keyhangi yetişkin
  • decisiongeçmesine izin ver ya da durdur
  • recordimzası
  • at
Bir sayaç değil, yetişkin başına bir satır. Bir çocuğun yetişkinlerinin çoğunluğu iki gecelik beklemeyi erken bitirebilir ve çoğunluk olup olmadığı, şu anda var olan yetişkinlere karşı yeniden sorulmak zorunda. Ayrılmış biri bir oy değildir ve bir sayaç bunu ayırt edemezdi.
device_revocations saklanıyor
  • account_idtelefonun kime ait olduğu
  • device_keyçalınan anahtar
  • revoked_at
  • recordimzalı kanıt, böylece bir telefon bize sormadan denetleyebilir
Çalınmış bir telefon ve bununla bir telefonu kullanımdan çıkarmak arasındaki fark. Kullanımdan çıkarmak, bundan sonra hareket edememesi demek, birinin yenilediği bir telefon için doğru cevap bu. Bu ise, o telefonun imzaladığı her şeye güvenmeyin demek ve diğer telefonların bunu bize sormadan denetleyebilmesi gerekiyor. Yalnızca hırsızlık bir satır alıyor.
retirements saklanıyor
  • account_idartık var olmayan hesap
  • retired_at
  • recordimzalı kanıt, anahtar yok edilmeden önce o hesabın kendi anahtarıyla üretilmiş
Yokluklardan oluşan bir liste ve iyi haber ikinci sütun. Biri Rilo’dan ayrıldığında, arkadaşlarının telefonlarına o kişinin kendi anahtarıyla üretilmiş bir imza verilir. Bir aile, birinin gittiğini biz söylediğimiz için değil, kanıttan öğrenir. Kendi başımıza söyleyebileceğimiz hiçbir şey çocuğunuzun ekranından bir yüzü kaldıramaz. Burada bir hesaba geri bağlantısı olmayan tek tablo bu, çünkü hakkında olduğu hesaptan daha uzun yaşamak zorunda.
entitlements saklanıyor
  • account_id
  • storeapple, google ya da bizden hediye
  • store_refmağazadan gelen, kendisinden hiçbir şey okunamayan bir tutamak. Sonradan mağazaya bir soru sormamızı sağlayan tek şey
  • store_ref_hashyukarıdaki tutamağın parmak izi. Tek bir makbuzun iki hesabı kapsamasını engelleyen şey
  • environment
  • stateactive, grace, lapsed, lapsed_trial ya da disabled
  • seatskaç çocuğu kapsadığı. Bir sayı, asla adları değil
  • expires_at
  • acts_at
  • updated_at
Burada hiçbir şey bir kişiyi tanımlamıyor. Mağaza hesabı yok, Apple ID yok, Google hesabı yok, ad yok, e-posta yok, kart yok. Bir ödemenin hangi çocukları kapsadığı, sorulduğunda sorumlu yetişkin tablosundan hesaplanıyor ve hiç yazılmıyor.
roster_notices süpürülüyor
  • device_keyhenüz haberi verilmemiş telefon
  • change_idhangi değişiklikle ilgili olduğu
  • whatönerildi, itiraz edildi ya da sonuçlandı
  • account_idtelefon listesi değişen kişi. Bir yetişkine çocuğuyla ilgili haber verildiğinde bu, çocuktur
  • subject_keyeklenen ya da çıkarılan telefon
  • effective_at
  • created_at
  • expires_at
  • delivered_atbunu söylemeyi başardığımız an, ya da başaramadığımız için boş
Bir kuyruk ve bir telefonun eklenmesinin ya da çıkarılmasının yüksek sesle olmasının nedeni. Ailedeki her telefon bunu duyar, bir çocuk söz konusuysa ondan sorumlu her yetişkin de duyar, az önce çıkarılan telefon dahil. Elinde olmaması gereken biri, sizin fark ettiğinizi böyle öğrenir. Bir bildirim, değişikliğin kendisinde olmayan hiçbir şey tutmaz ve süresi dolduğunda, teslim etmeyi başarsak da başaramasak da silinir.
reports saklanıyor
  • id
  • about_keybildirimin kim hakkında olduğu. Okunabilir, ki biri buna göre harekete geçebilsin
  • reasonaltı şeyden hangisinin olduğu, bildiren yetişkinin seçtiği biçimde
  • csa
  • sealedyazılanlar, gönderen telefonda, kurucunun yanındaki kâğıtta duran bir anahtarla mühürlenmiş. Hiçbir sunucu okuyamaz
  • sealed_digestmühürlü kısmın parmak izi, böylece sonradan açılan şeyin gelen şeyle aynı olduğu kanıtlanabilir
  • received_at
  • edge_snapshotkimin kime ulaşmasına izin verilmiş olduğu ve bu izni hangi yetişkinin verdiği, o andaki hâliyle. Bu sütun sonradan yeniden kurulamaz
  • reporter_keygönderen kişi, ya da adsız gönderildiyse hiçbir şey
  • source
  • sealed_key
  • receiptgönderenin elinde kalan referans. Açamadığımız bir bildirim hakkında birine cevap verebilmemizin tek yolu
  • acknowledged_at
  • decided_at
  • actioned_at
  • escalated_at
  • decided_by
  • outcome
Burada bir şeyin olmasını sağlamak için var olan tek tablo. Bir bildirimin büyük kısmı onu gönderen telefonda mühürlenir ve biz açamayız. Okunabilir kalan şey, kimin hakkında olduğu, çünkü kimsenin harekete geçemediği bir bildirim koruma değildir. Hakkında olduğu hesaptan uzun yaşar. Yoksa herkes kendini silerek bildirimden kurtulabilirdi. İçinde hiçbir aramanın kaydı yok, ne burada ne başka bir yerde, çünkü hiç kayıt alınmıyor.

Var olmayan sütunlar

  • e-posta
  • ad
  • yaş
  • fotoğraf
  • mesaj metni
  • arama içeriği
  • arama geçmişi
  • kişi listesi
  • konum
  • cihaz modeli

E-posta adresiniz kayıt olurken bir kez denetlenir ve aynı anda mühürlenir, kurucunun yanındaki kâğıtta duran, hiçbir sunucuya değmemiş bir anahtarla. Yasa, bir yetişkinin onay verdiğini kanıtlayabilmemizi istiyor. Biz o adresi geri okuyamayız. Adlar ve fotoğraflar her telefonda ayarlanır ve doğrudan diğer telefona verilir. Bize hiç ulaşmazlar, dedenizin adını “Opa” olarak değiştirebilmenizin ve bunu asla bilemeyecek olmamızın nedeni de bu. Bunların hiçbirini istesek bile kimseye gösteremezdik, bize göstertmek de mümkün değil.

Bu bölüm sunucunun kendi şemasından üretiliyor, veritabanını oluşturan iki dosyadan, accounts.ts ve roster-changes.ts. Bir gün çelişirlerse doğru olan dosyalardır ve bu sayfa bir hatadır.

Kişiler

Bir bağlantı gerçekte nasıl kuruluyor.

Birinin telefonu tek kullanımlık bir davet üretir. Diğer telefon onu okur, ya aynı odadaki bir ekrandan okutarak ya da o yetişkinin gönderdiği bağlantıyı açarak. Okuma işlemi tanışmayı başlatır ve aynı anda diğer telefonun açık anahtarını kaydeder, böylece iki telefon da o andan itibaren hangi anahtarın kime ait olduğunu tam olarak bilir. Sonraki bir aramanın ortasına oturmayı imkânsız kılan kısım budur, bizim için de. Diğer taraftaki bir yetişkin evet demeden hiçbiri bağlanmaz.

Bu hâlâ bir bağlantı değil. Sorumlu bir yetişkinin, o anda yapılan bir biyometrik denetimin ardından bağlantıyı kendi telefonunda imzalaması gerekir. İmzaladığı şey işin tamamıdır. Kim, kiminle ve hangi yönde. Sunucu bir şeyi yönlendirmeden önce o imzayı denetler. Sunucuda imza atabilecek hiçbir anahtar yok, yani bir bağlantı oluşturamaz, veritabanını çalan da oluşturamaz.

İki telefon da tamamlanmış bağlantıyı eline aldığında satır silinir ve bağlantı yalnızca iki cihazda var olur. Sonradan kesmek imzalı bir iptal kaydı yazar, süresiz saklanan tek kayıt da o. Çiftin özeti olarak saklanır, yani bir bağlantının bittiğini söyler, kimin kimi tanıdığını söylemeden.

İşin içinde başka kim var

Bir aramaya üç şirket dokunuyor. Hiçbiri aramayı duyamaz.

Hizmete altı şirket daha dokunuyor ve hepsi gizlilik politikasında sayılıyor. Bunların üçü bir aramanın çalmasını sağlamakla ilgili, aşağıda bu üçünün her birinin neyi görebildiği ve neyi göremediği var.

  • Apple & Google

    Anlık bildirimler, böylece bir arama uyuyan bir telefonu çaldırır. İki platformda da kaçınılmaz. İçlerinde, kendisinden hiçbir şey okunamayan bir tanıtıcıdan başka bir şey yok. Ad yok, numara yok, içerik yok.

  • Cloudflare

    Aramaların yaklaşık altıda biri iki telefonu doğrudan bağlayamıyor, otel Wi-Fi’ında ya da bazı mobil şebekelerde, ve bir aktarıcı üzerinden sektiriliyor. Aktarıcı, açamadığı şifreli paketleri iletir, ama iki anonim kimliğin bağlandığını, bunun ne zaman, ne kadar süreyle ve hangi adreslerden olduğunu görür. Bu, bizim tutmadığımız üstveri, başkasının elinde duruyor.

  • Biz

    Yukarıdaki tablo. Hollanda’da duran, iki telefonu tanıştırıp sonra yoldan çekilen küçük bir sunucu.