Nasıl çalışır
1. Anahtarın
Uygulama kriptografik güvenli bir rastgele sayı üreteciyle 95 bitlik bir değer üretir ve bunu okunabilir 20 karaktere çevirir. Alfabe Crockford Base32: I, L, O ve U yok, çünkü 1 ve 0 ile karışırlar. Son karakter bir kontrol karakteridir. Tek bir harfi yanlış yazdığında ya da iki harfin yerini değiştirdiğinde bunu %100 yakalar.
2. Ana sır
Anahtarın Argon2id’den geçer (64 MiB bellek, 3 tur). Argon2id, parola türetmede bugünkü standart: bellek-zorlu olduğu için özel donanımla hızlandırılması zordur. Sonuç 32 baytlık bir ana sırdır ve bellekten başka hiçbir yere yazılmaz.
3. Site şifresi
Ana sır ile site adı, kullanıcı adı ve sayaç HMAC-SHA256’den geçirilir. Çıkan değer HKDF ile bir bayt akışına genişletilir. Karakterler bu akıştan rejection sampling ile seçilir. Yani "baytı karakter sayısına böl, kalanı al" kestirmesi kullanılmaz, çünkü o kestirme bazı karakterleri diğerlerinden daha olası yapar.
4. Dünyan
Gezegenin anahtarının metninden SHA-256 ile türetilir: rengi, yüzeyi, halkası, uydu sayısı. Bu hesap hızlıdır, çünkü sen yazarken her tuşta yeniden çalışması gerekir. Gördüğün önizleme gerçek dünyandır, bir taklidi değil. Hızlı olması güvenliği zedelemez: anahtarının 95 bitini tahmin etmek, saniyede yüz trilyon deneme hızında bile milyonlarca yıl sürer.
5. Kasan
Cihazında tutulan site listesi XChaCha20-Poly1305 ile şifrelenir. Şifreleme anahtarı ana sırdan HKDF ile türetilir. Kasanın içinde şifre yoktur. Yalnızca hangi siteyi hangi ayarlarla ürettiğin yazar.
Neden bu seçimler?
Hiçbirini biz icat etmedik. Argon2id RFC 9106, HMAC-SHA256 FIPS 180-4, HKDF RFC 5869, XChaCha20-Poly1305 ise yaygın olarak denetlenmiş bir yapı. Kendi şifreleme algoritmanı yazmak, güvenlikte yapabileceğin en kötü şeydir.
Doğrulayabilirsin
Algoritmanın tamamı SPEC.md dosyasında yazılı ve 47 test vektörüyle birlikte geliyor. Web sürümü de Android sürümü de bu vektörlerin hepsinden geçmek zorunda. Yani iki platform aynı anahtardan bit bit aynı şifreyi üretiyor.