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.
- 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
- keyhatırlanan şey
- valueve ne dediği
- account_id
- guardian_keybu çocuk adına hareket etmesine izin verilen bir anahtar
- added_at
- removed_at
- 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
- 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
- nonce
- expires_at
- edge_hashçiftin özeti, iki kişinin kendisi değil
- denied_at
- expires_at
- 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
- 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
- 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
- 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
- change_idhangi bekleyen değişiklik
- voter_keyhangi yetişkin
- decisiongeçmesine izin ver ya da durdur
- recordimzası
- at
- account_idtelefonun kime ait olduğu
- device_keyçalınan anahtar
- revoked_at
- recordimzalı kanıt, böylece bir telefon bize sormadan denetleyebilir
- account_idartık var olmayan hesap
- retired_at
- recordimzalı kanıt, anahtar yok edilmeden önce o hesabın kendi anahtarıyla üretilmiş
- 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
- 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ş
- 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
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.