İçeriğe atla
openplate

Uygulama

Cihazlar arasında eşitle

Cihazlar arasında eşitlemeyi etkinleştirme, şifreleme ve yöneticinin emanetindeki kurtarma anahtarı

Bu sayfa, İngilizce belgeden makine çevirisiyle çevrildi.

Kendi kurulumunda openplate varsayılan olarak yerel bir uygulamadır: günlüğün kullandığın cihazdaki tarayıcının IndexedDB alanında durur ve sen uygulamayı bir çekirdek sunucuya yönlendirene kadar hiçbir şey cihazdan çıkmaz. Bu günlüğü cihazlar arasında taşımak, hesap gerektiren tek işlemdir, bu nedenle kendi kalıbı, veritabanı ve gizli anahtarlarıyla ayrı bir hizmette, openplate-core içinde çalışır.

Kendi kurulumunda eşitleme isteğe bağlıdır. Ayarlanmadığında openplate hiçbir özellik kaybetmez. Barındırılan hizmette her hesap eşitlenir, bu nedenle günlüğün sunucuda şifreli bir kopyası da bulunur.

Cihazların arasında nelerin aktarıldığı

Eşitleme motorunun varlık olarak adlandırdığı her şey satır bazında birleştirilir, böylece bir cihazda yapılan bir değişiklik diğerlerine ulaşır ve bir cihazda yapılan silme işlemi satırı diğerlerinden kaldırır. Bu sürüm itibarıyla bunlar kişisel yiyeceklerin, yiyecek günlüğün, kilo kayıtların, profilin ve hedeflerin, oruçların, kilerin, oruç rutinin ve serinin arkasındaki etkinlik işaretleri ile ödüllerdir. Kaydedilen öğünlerin de aktarılır, satır satır yerine bütün bir liste olarak iletilir ki bu da günlüğün satır bazında birleştirilmeyi bekleyen son parçasıdır.

Paylaşım ve araştırma anahtarların da verinin mühürlü bir parçası içinde taşınır; bu parçayı yalnızca kendi cihazların ve kurtarma anahtarını elinde tutan bir işletmeci açabilir (bkz. Şifreleme ve işletmecinin elinde tuttuğu veriler). Günlük erişimi verdiğin bir hekim bunu okuyamaz.

Neyi açarsan aç, üç şey asla aktarılmaz:

  • Tabak fotoğrafları. Bunlar, onları çeken cihazdaki ayrı bir veritabanında durur, eşitleme yükünün ve tüm yedekleme dosyalarının dışında tutulur ve belirlediğin bir takvime göre kendilerini temizler.
  • Yapay zeka sağlayıcı anahtarın. Girdiğin cihazdaki kendi veritabanında durur ve seçtiğin sağlayıcıdan başka kimseye gitmez.
  • Neleri sildiğinin kaydı. Cihazın, kasıtlı olduklarını kanıtlayabilmek için gerçekleştirdiği silme işlemlerini kaydeder ve bu liste cihazda kalır. Silme işlemlerinin kendisi aktarılır, liste aktarılmaz.

Gerekenler

  • Çalışan bir openplate-core örneği: barındırılan hizmet, kendi kurduğun sistem veya protokolü protokolünü uygulayan herhangi bir üçüncü taraf sunucu. Kendininkini çalıştırmak için docker/topologies/compose.core.yml kullan: self-hosting.md ve topologies.md belgelerine bak.
  • Uygulamada bu hizmeti işaret eden tanımlı bir CORE_URL.
  • Güvenli bir sayfa. Giriş yapmak, tarayıcıların yalnızca https:// üzerinde veya localhost altında sunduğu tarayıcının Web Crypto API'si ile anahtarlarını türetir. Bkz. self-hosting.md.
  • Bir hesap. OPEN_SIGNUP=true ayarını yapmadığın sürece kendi kurulumunda kayıtlar davetiyeyledir, bu yüzden ilkini kendin üretirsin: self-hosting.md.

Etkinleştirme

Tek anahtar CORE_URL değeridir.

  • Tanımsız (varsayılan): hiçbir yerde eşitleme arayüzü gösterilmez ve uygulamadan hiçbir eşitleme isteği çıkmaz.
  • Tanımlı: eşitleme ekranları görünür ve bu URL ile iletişim kurar. Bu kaynak, üretim CSP'sinin connect-src alanına otomatik eklenir: bunun için CSP_CONNECT_EXTRA gerekmez.

Değiştirdikten sonra uygulamayı yeniden başlat. Tekrar kaldırdığında eşitleme ekranları kaybolur ve uygulama istek göndermeyi durdurur. İki durumda da yerel günlüğüne dokunulmaz.

İkinci bir cihaz ekleme: onu da aynı CORE_URL adresine yönlendir, ilk cihazda kullandığın e-posta adresi ve parolayla oturum aç. Bütün işlem bundan ibarettir, ilk cihazdan hiçbir şey kopyalaman gerekmez.

Bu, bir tarayıcının tarafından erişilebilen bir adres olmalıdır. Eşitleme istemcisi sayfa içinde çalışır, bu yüzden http://core:3000 gibi bir compose ana makine adı çalışmaz: kullanıcılarının cihazlarının çözümleyebileceği genel URL'yi kullan. Hatalı bir değer kasıtlı olarak başlatmayı durdurur, böylece bir yazım hatası "eşitleme sessizce kapalı" gibi görünemez.

Araştırma konsolu (/study)

Uygulama her zaman bir /study rotası barındırır ve bu rota sıradan bir örnekte hareketsizdir. Yalnızca konuştuğu çekirdek sunucu SYNC_RESEARCH=true ayarına sahip olduğunda etkinleşir, bu da varsayılan olarak kapalıdır değeridir: bu bayrağa dokunmadan ayağa kaldırdığın bir örnek hiçbir araştırma yürütmez, hiçbir araştırma grafiği tutmaz ve kayıt olunacak hiçbir şey sunmaz. Açmadan önce openplate-core belgesindeki .env.example kısmını oku: bu ayar sunucunun sağlıkla ilişkili kişisel verileri tutmasını sağlar, bu da şifreli bir günlük tutmaktan farklı bir sorumluluktur.

Şifreleme ve işletmecinin elinde tuttuğu veriler

Parolan tarayıcından asla ayrılmaz. Argon2id ile uzatılır ve HKDF tarafından bağımsız kollara ayrılır. İki kol, veri anahtarını ve özel ayarlarını çözmek için cihazda kalır. Üçüncü bir kol ise giriş kimlik bilgisi olarak hizmete gider. Bunlar üst ve alt ögeler değil, kriptografik kardeşlerdir; bu yüzden birini elinde bulundurmak diğerleri hakkında hiçbir şey ortaya çıkarmaz. Günlüğün yüklenmeden önce cihazda şifrelenir ve iletim sırasında da şifreli kalır; hizmet yalnızca mat şifreli metin saklar ve bunun dışında gördüğü tek şey bir e-posta adresi ile yüklemelerinin boyutu ve zamanlamasıdır.

İşletmeci bir kurtarma anahtarı tutar. Kayıt sırasında uygulama bir kurtarma kodu oluşturur, veri anahtarını bununla sarar ve kodu sunucuya gönderir, sunucu da bunu kendi sırrı altında mühürlü tutar. "Parolamı unuttum" dendiğinde boş bir hesap yerine günlüğünü döndüren şey budur: sıfırlama bağlantısı (postalanır veya posta olmayan bir kurulumda işletmeci tarafından sana elden verilir) kodu tarayıcına geri verir, tarayıcı da bunu veri anahtarını açmak ve yeni parola altında yeniden sarmak için kullanır.

Açıkça belirtmek gerekirse, çünkü bu tasarımın getirdiği ödünleşim budur: bir örneğin işletmecisi, üzerindeki bir günlüğü geri yükleyebilir ve bu nedenle ilke olarak okuyabilir. Kendi barındırdığın bir örnekte o işletmeci sensin. Bir kuruluşun senin için çalıştırdığı bir örnekte, zaten yapay zeka vekil sunucusundan geçen her tabak fotoğrafını görürler, bu nedenle bu durum söz verilen güvenceyi sanıldığından daha az değiştirir ve verilerini kaybetmeyen bir parola sıfırlama olanağı sağlar.

M192 öncesinde emanet tutma mekanizması yoktu ve bedeli tam tersiydi: unutulan bir parola ile kaybolan bir kurtarma kodu verilerin hem bizim hem de senin için yok olması anlamına geliyordu, uygulamanın kodu bir kez gösterip kişiden bunu sonsuza kadar saklamasını istemesi gerekiyordu. Kimse saklamaz.

Tabak fotoğrafları hiçbir zaman bir eşitleme verisinin parçası olmaz. Fotoğraflar onları çeken cihazda kalır, JSON dışa aktarmalarına dahil edilmez ve yönetilen bir kurulumda Yapay Zeka vekiline ulaşan kopya bir kez okunur, vekil bunu saklamaz. Hatalı bir tahmin bildirimiyle birlikte gönderilen bir fotoğraf, işletmeci tarafından sınırlı bir süre saklanır.

Bir günlüğü uzmanla paylaşma

Çekirdek sunucusu SYNC_SHARING=true ayarını yapan bir örnekte, bir kişi diyetisyen gibi bir klinisyenin günlüğünü okumasına izin verebilir. Klinisyen kişiye bir bağlantı linki gönderir. Kişi bu linki açar ve klinisyenin sesli okuduğu on iki karakteri yazar, böylece yanlış bir anahtar henüz hiçbir şey paylaşılmadan yakalanır. Kişi ardından Ayarlar → Paylaşım altında paylaşım iznini verir: uygulama veri anahtarını klinisyenin genel anahtarıyla bir kez daha sarar ve bu sarılmış kopyayı yükler. Klinisyenin tarayıcısı bunu çözer ve günlüğü /shared adresinde gösterir. Sunucu sarılmış kopyayı saklar, anahtarını ise asla saklamaz. Bir paylaşım istendiği zaman iptal edilebilir. Günlüğün özel bir bölmesi kişinin kendi paylaşım ve araştırma anahtarlarını tutar ve bir klinisyen burayı asla açamaz. Bu anahtarlar, geri yüklenen bir cihazın kendisiyle paylaşılanları yine de açabilmesi için JSON dışa aktarımında da şifrelenmemiş olarak yer alır; self-hosting.md, bunun dosya için ne anlama geldiğini açıklar.

Aynı ekranda, isteğe bağlı örnek geneli öğün ve tarama sayısı olan pulse anahtarı bulunur; architecture.md ne gönderdiğini açıklar.

Daha önce burada ne vardı: ağ geçidi

M192 sürümüne kadar bir kişi aynı davet linkinden ayrı bir yapay zeka ağ geçidine katılabiliyordu ve bu bağlantı mühürlü bölme içinde hesapla birlikte taşınıyordu. Artık bir ağ geçidi yok: çekirdek sunucu yapay zeka vekilini devraldı, bu yüzden bir kuruluşun çalıştırdığı bir örnekte, kotası olan oturum açmış bir hesap zaten konuştuğu tek sunucu üzerinden tarama yapar ve hiçbir yere taşınacak bir bağlantı adımı bulunmaz. Kendi barındırdığın bir örnek değişmez: kurduğun bir anahtar, onu kurduğun cihazda kalır.

Bu sayfayı GitHub üzerinde düzenle