İçeriğe geç

Güven Merkezi · Teknik rapor

Güvenlik teknik raporu

MGVault'un kriptografik tasarımının okunabilir anlatımı: anahtarlarınız nasıl türetilir, paylaşım nasıl güvenilir kalır, sunucuya neden körü körüne güvenmeniz gerekmez ve tasarım nerede sınırlara dayanır.

01

Özet

MGVault; şifreleri, 2FA (TOTP) sırlarını ve güvenli notları cihazda şifreleyen bir şifre yöneticisidir. Şifreleme ve şifre çözme yalnızca istemcide, yani web kasasında ve tarayıcı eklentisinde yapılır. Sunucu şifreli veriyi, sarılı anahtarları ve hizmetin çalışması için gereken üst veriyi saklar.

Tasarımın iki hedefi vardır: sunucu tamamen ele geçirilse bile kasa içeriği okunamamalı ve ekip paylaşımında sunucu üyelerin arasına sessizce bir anahtar sokamamalıdır. Bu rapor bu hedeflere nasıl ulaşıldığını ve nerede ulaşılamadığını anlatır.

Bayt düzeyindeki biçim, dondurulmuş test vektörleriyle birlikte iç belgelerimizde tanımlıdır; web kasası ve eklenti aynı kripto paketini kullanır. Bu rapor bağımsız bir denetim raporu değildir: bağımsız üçüncü taraf denetimi ve sızma testi planlanmaktadır, henüz yapılmamıştır.

02

Yapı taşları

AmaçYapı taşıParametreler
Ana paroladan anahtar türetmeArgon2idm = 64 MiB · t = 3 · p = 1
Kayıtları ve anahtarları şifrelemeXChaCha20-Poly1305256-bit · 192-bit nonce
Koleksiyon anahtarlarını üyelerle paylaşmaX25519 sealed boxcrypto_box_seal
Paylaşılan anahtarları ve anahtar epoch'larını imzalamaEd25519RFC 8032
Salt ve anahtar parmak izleriBLAKE2bRFC 7693

Tüm yapı taşları libsodium'dan (WebAssembly) gelir. Kripto paketi RFC 9106 (Argon2id), RFC 7693 (BLAKE2b), RFC 7748 (X25519), RFC 8032 (Ed25519) ve XChaCha20-Poly1305 test vektörleriyle, ayrıca libsodium kullanmayan bağımsız bir yeniden yazımla çapraz olarak sınanır.

03

Anahtar hiyerarşisi

Her şey ana parolanızdan başlar ve hiçbir şifre çözme anahtarı cihazınızdan düz hâlde çıkmaz.

Anahtar hiyerarşisi: ana paroladan şifreli kayıtlara
  1. 1

    Ana parola → Argon2id

    Ana parola, e-posta adresinizden BLAKE2b ile türetilen bir salt ile Argon2id'den geçirilir (varsayılan 64 MiB bellek, 3 tur). Çıkan 64 baytın ilk yarısı giriş anahtarı, ikinci yarısı anahtar şifreleme anahtarıdır (KEK). Parametreler hesapta saklanır; istemci güvenli alt sınırın altındaki değerleri reddeder ve aynı e-posta için gördüğü en güçlü parametreyi hatırlar. Böylece sunucu anahtar türetmeyi zayıflatamaz.

  2. 2

    Giriş anahtarı sunucuya, KEK cihazda kalır

    Sunucuya yalnızca giriş anahtarı gider; sunucu onu bir kez daha Argon2id ile hash'leyerek saklar. Bu hash'ten KEK'e veya ana parolaya ulaşılamaz. KEK cihazınızdan hiç çıkmaz.

  3. 3

    Hesap anahtarı

    Kayıt sırasında cihazınız rastgele 256 bitlik bir hesap anahtarı üretir ve onu KEK ile XChaCha20-Poly1305 kullanarak sarar. Ana parolanızı değiştirdiğinizde yalnızca bu sarma yenilenir; kasanın yeniden şifrelenmesi gerekmez.

  4. 4

    Kimlik anahtarları: X25519 ve Ed25519

    Her hesabın, kendisiyle paylaşılan anahtarları açmak için bir X25519 anahtar çifti ve kendi sardığı anahtarları imzalamak için bir Ed25519 anahtar çifti vardır. Özel anahtarlar hesap anahtarıyla şifrelenir, genel anahtarlar sunucuda düz durur. Kilit açılırken istemci, özel anahtardan türettiği genel anahtarın sunucunun verdiğiyle eşleştiğini doğrular.

  5. 5

    Kasa (koleksiyon) anahtarları

    Kişisel veya paylaşılan her kasa rastgele bir anahtar kullanır. Bu anahtar her üye için, o üyenin X25519 genel anahtarına sealed box ile ayrı ayrı sarılır. Paylaşılan kasaların adları da bu anahtarla şifrelenir.

  6. 6

    Kayıtlar

    Her kayıt (giriş bilgisi, 2FA sırrı, not) kasa anahtarıyla XChaCha20-Poly1305 kullanılarak şifrelenir. Ek doğrulanmış veri (AAD) kayıt kimliğini, kasayı ve sürümü içerir: şifreli bir kayıt fark edilmeden başka bir kayda veya kasaya taşınamaz, eski bir sürümü güncel diye sunulamaz. Düz metin 64 baytlık bloklara doldurulur; sunucu şifre gibi alanların tam uzunluğunu öğrenemez.

  7. 7

    Kurtarma kodu (Emergency Kit)

    Kayıtta 256 bit rastgele bir kurtarma kodu üretilir (56 karakter). Koddan BLAKE2b ile iki anahtar türetilir: biri sunucudaki doğrulama içindir (sunucu onu Argon2id ile hash'ler), diğeri hesap anahtarının ikinci bir sarmasını açar. Kod yalnızca size gösterilir, hiçbir yere kaydedilmez ve kullanıldığında yenilenir.

04

Ekip paylaşımı

Paylaşımda ele geçirilmiş bir sunucunun iki yeni fırsatı olur: üyelere kendi bildiği bir anahtarı sarmak ve sahte bir üye göstermek. Tasarım bu ikisine karşı kurulmuştur.

İmzalı paylaşım: yönetici sarar ve imzalar, sunucu taşır, üye önce doğrular sonra açar
  • 1. Sarma

    Kasayı yöneten kişinin cihazı, kasa anahtarını kasa kimliği ve epoch numarasıyla birlikte üyenin X25519 genel anahtarına sealed box ile sarar.

  • 2. İmza

    Aynı cihaz; kasa kimliğini, epoch'u, alıcının genel anahtarını ve sarılı verinin özetini Ed25519 ile imzalar. Sunucu sarmayı ve imzayı yalnızca taşır: anahtarı okuyamaz, imza üretemez.

  • 3. Önce doğrulama, sonra açma

    Üyenin cihazı sarmayı açmadan önce imzayı, bu cihazda sabitlenmiş imza anahtarıyla ve beklenen kasa, epoch ve kendi genel anahtarı üzerinden doğrular. İmza tutmazsa sarma hiç açılmaz; tutarsa açılan içerikteki kasa kimliği ve epoch ikinci kez denetlenir.

  • 4. Epoch'lar

    Her paylaşılan kasanın bir epoch numarası vardır ve anahtar her yenilendiğinde bir artar. İstemci her kasa için gördüğü en yüksek epoch'u hatırlar; sunucu eski bir anahtarı güncel diye sunarsa istemci o kasaya yazmayı reddeder.

  • 5. Üye çıkarma ve anahtar döndürme

    Bir üye çıkarıldığında anahtar kopyaları silinir, oturumları kapanır ve yöneticinin cihazı kasayı yeni bir epoch'a taşır: yeni anahtar yalnızca kalan üyelere sarılır ve imzalanır. Yeni kayıtlar ve düzenlemeler yalnızca yeni anahtarla şifrelenir; eski kayıtlar düzenlendikçe yeni epoch'a geçer. Döndürme kontrol listesi, ayrılan kişinin erişebildiği şifreleri ve 2FA kayıtlarını değiştirmeniz için listeler.

Örnek: bir kasanın epoch'ları

  1. 1

    Epoch 1

    Kasa oluşturuldu. Onaylanan her yeni üyeye aynı anahtar ayrı ayrı sarılır.

  2. 2

    Epoch 2

    Bir üye çıkarıldı. Yeni anahtar yalnızca kalan üyelere sarıldı; yeni kayıtlar ayrılan kişinin erişimi dışında.

  3. 3

    Epoch 3

    Bir yönetici ayrıldı ve kasa yeniden döndürüldü. Ayrılan yöneticinin bundan sonra imzaladığı sarmalar kabul edilmez.

05

Anahtarlara güven: parmak izleri ve sabitleme

Genel anahtar dizini sunucudan gelir. Bu yüzden her cihaz, kimin anahtarına güvendiğini kendisi hatırlar.

  • Yalnızca görünür adımlarla sabitleme

    Cihazınız, kuruluştaki kişilerin anahtarlarını yalnızca sizin gördüğünüz adımlarla sabitler: parmak izlerini görerek bir davetliyi onaylamanız, parmak izini karşılaştırıp elle doğrulamanız veya cihazın o kuruluşta hiç anahtarı yokken gelen ilk sarmanın kalıcı bir bildirimle kabulü. Doğrulama sırasında sessizce hiçbir anahtar sabitlenmez.

  • Yalnızca sabitlenmiş imzacı

    Bir sarma ancak imzalayan kişi bu cihazda sabitlenmiş ve iptal edilmemişse kabul edilir. Aksi hâlde uyarı gösterilir, anahtar kullanılmaz ve kasaya yazılamaz. Sunucunun uydurduğu bir kullanıcı veya değiştirdiği bir anahtar bu yüzden kabul görmez.

  • Anahtar değişince size sorulur

    Sabitlenmiş birinin anahtarı değişirse cihaz sizi uyarır ve siz onaylayana kadar o kişinin yeni sarmalarını kabul etmez.

  • Çıkarılan kişinin imzası iptal edilir

    Cihaz bir üyenin kuruluştan çıkarıldığını gördüğünde onun sabitlemesini iptal eder; o kişinin sonradan imzaladığı yeni epoch'lar reddedilir.

  • Parmak izini bant dışında karşılaştırın

    Parmak izleri 16 grup hâlinde gösterilen onaltılık karakterlerdir. Telefonda veya yüz yüze karşılaştırmak, ilk temastaki güveni doğrulanmış güvene çevirir.

06

Tehdit modeli

Neye karşı koruduğumuzu ve neyi kapsam dışında bıraktığımızı açıkça yazıyoruz.

TehditSonuç ve önlem
Veritabanı veya yedek sızıntısıSaldırgan yalnızca şifreli kayıtları, sarılı anahtarları ve giriş anahtarının hash'ini ele geçirir. Kalan risk ana parolanın çevrimdışı tahminidir; Argon2id bunu pahalı kılar.
Kötü niyetli veya ele geçirilmiş sunucu (saklanan veri)Kasa içeriğini okuyamaz. Kayıtları başka bir kayda veya kasaya taşıyamaz, eski sürüme döndüremez (AAD).
Sunucunun paylaşıma kendi anahtarını sokmasıSarmalar imzalıdır ve yalnızca sabitlenmiş imzacıdan kabul edilir.
Sunucunun eski bir anahtarı güncel diye sunmasıEpoch istemcide monoton izlenir; eski epoch ile yazılmaz.
Sunucunun sahte üye veya sahte alıcı göstermesiAnahtar yalnızca sabitlenmiş alıcılara sarılır; değilse işlem durur ve parmak izi karşılaştırması istenir.
Çıkarılan bir yöneticinin sunucuyla iş birliğiÇıkarılma gözlendiğinde sabitlemesi iptal edilir; imzaladığı yeni epoch'lar kabul edilmez.
Ağdaki saldırganTLS ve HSTS; bunların altında ayrıca uçtan uca şifreleme.
Çalınmış oturumKısa ömürlü erişim jetonları, her kullanımda değişen yenileme jetonları, uzaktan oturum kapatma, otomatik kilit; hassas işlemlerde ana parola ve ikinci faktör.

Kapsam dışı

  • Kötü amaçlı yazılım bulaşmış veya ele geçirilmiş bir cihaz: kasa açıkken anahtarlar o cihazın belleğindedir.
  • Ana parolanızı ve ikinci faktörünüzü bilen ya da kurtarma kodunuzu ele geçiren biri.
  • Çalışan sunucuyu ele geçirip web kasasına değiştirilmiş kod sunan bir saldırgan (aşağıdaki sınırlara bakın).

07

Bilinen sınırlar

Tasarımın bugünkü dürüst sınırları:

  • İlk temas sunucu dizinine dayanır. Sealed box tek başına kimin sardığını kanıtlamaz; bu yüzden her sarma Ed25519 ile imzalanır. Ancak genel anahtar dizini sunucudan gelir: bir cihazın bir kuruluştaki ilk sarması sunucunun seçtiği bir imzacıdan gelebilir. Bildirim parmak izini gösterir ama bunu engellemez. Gerçek bir anahtar şeffaflığı (key transparency) henüz yoktur; parmak izlerini bant dışında karşılaştırmanızı öneririz.
  • Sabitleme cihaza özgüdür. Yeni bir cihaz kuruluşta kimseyi tanımaz; diğer üyeleri yeniden doğrulamanız gerekir. İptal, cihazın çıkarılmayı gözlemesine bağlıdır.
  • Bellek silme en iyi çabadır. Anahtarları kullandıktan sonra JavaScript'in izin verdiği ölçüde bellekten sileriz; ancak tarayıcı ve çöp toplayıcı silemediğimiz kopyalar tutabilir.
  • Çıkarılan üye gördüğünü bilir. Anahtar döndürme yeni kayıtları korur. Ayrılan kişinin daha önce gördüğü şifreler ve 2FA sırları siz değiştirene kadar geçerli kalır; döndürme kontrol listesi bu yüzden vardır.
  • Okuyabilen kopyalayabilir. Bir kaydı okuma izni olan kişi onu kopyalayabilir veya bir yere yazabilir; şifreleme bunu engelleyemez. Kuruluş politikası paylaşılan kayıtların kişisel kasaya kopyalanmasını veya taşınmasını kapatabilir, ama okunabilen bir değerin elle kopyalanmasını hiçbir şey engelleyemez.
  • Kopyalama ve otomatik doldurma olayları doğrulanamaz. Bu denetim olaylarını üyelerin uygulamaları bildirir; sunucu bunları doğrulayamaz ve kayıtta ayrıca işaretlenir.
  • Kurtarma kodu tam erişim demektir. Kurtarma kodunuzu ve e-postanızı bilen biri kasanızı açabilir, ana parolanızı sıfırlayabilir ve iki adımlı girişi kaldırabilir. Bu olduğunda tüm oturumlar kapanır ve güvenlik e-postası gönderilir. Kodu çevrimdışı ve güvenli bir yerde saklayın.
  • Giriş için kullanılan TOTP sırrı sunucudadır. Girişteki ikinci adım kodunu sunucu doğrulamak zorunda olduğu için o sır sunucuda şifreli saklanır: veritabanı ve yedek sızıntısına karşı korunur, çalışan sunucunun ele geçirilmesine karşı korunmaz. Kasanızda sakladığınız 2FA sırları bundan etkilenmez; onlar uçtan uca şifrelidir.
  • Web kasası kodunu sunucudan yükler. Tarayıcıdaki her web uygulaması gibi web kasası da her açılışta kodunu sunucumuzdan indirir; sunucuyu ele geçiren biri teoride değiştirilmiş kod sunabilir. Sıkı CSP ve üçüncü taraf betik yasağı bu yüzeyi daraltır. Tarayıcı eklentisi ise kodunu kurulumla birlikte taşır ve uzaktan kod yüklemez.
  • Üst veri görünür. Sunucu e-posta adresinizi, kuruluş adlarını ve üyelikleri, kayıtların sayısını, yaklaşık boyutlarını ve zaman damgalarını görür.
  • Ana parolanızın gücü önemlidir. Kısa veya başka yerde kullanılmış bir ana parola, şifreli veriyi ele geçiren biri tarafından çevrimdışı tahmin edilebilir.

08

Testler ve doğrulama

Kripto paketi standart test vektörleriyle ve bağımsız bir yeniden yazımla sınanır. Biçim değişirse sürüm numarası artar; eski vektörler, eski verilerin okunabilmesi için dondurulmuş kalır.

Tasarım ve kod odaklı iç güvenlik incelemelerinden geçer. Her bulgu, düzeltmeden önce başarısız olan bir gerileme testiyle güvenceye alınır. Bağımsız üçüncü taraf güvenlik denetimi ve sızma testi planlanmaktadır; henüz yapılmamıştır.

Hemen başlayın

Kasanızı bir dakikadan kısa sürede oluşturun

Kişisel kullanım ücretsiz. Anahtarlarınız cihazınızda — şu anda, tarayıcınızda — oluşturulur.