Güvenlik · Derinlemesine
Uçtan uca kriptografik yaşam döngüsü
Verilerinize her adımda ne olduğunun, temel yapı taşları, parametreler ve güven sınırlarıyla birlikte ayrıntılı bir anlatımı. Her adım sade bir özetle başlar; böylece istediğiniz derinlikte okuyabilirsiniz.
Adım 01 · Şifreleme
Sırrınız cihazınızda mühürlenir
Kısaca: karıştırma işlemi, herhangi bir şey yüklenmeden önce tarayıcınızda yapılır. Bize ulaşan şey zaten okunamaz hâldedir.
Şifrele düğmesine bastığınızda tarayıcı, WebCrypto CSPRNG'den 256 bitlik yeni bir içerik anahtarı alır ve yükünüzü AES-256-GCM ile şifreler. GCM kimlik doğrulamalıdır: her parça 128 bitlik bir etiket taşır; böylece sonradan yapılan her türlü kurcalama, sessizce çözülmek yerine tespit edilir.
Metin ve dosyalar aynı şekilde işlenir: ikisi de tek bir opak ikili veri bloğuna dönüşür ve standart bir boyuta dolgulanır; böylece kısa bir şifre ile küçük bir dosya birbirinden ayırt edilemez. Düz metin ağa hiç dokunmaz ve sekmenin belleğinden hiç çıkmaz.
Adım 02 · Anahtarın saklanması
Anahtar sunucularımızda değil, bağlantıda saklıdır
Kısaca: bağlantının # işaretinden sonraki kısmı anahtarı taşır ve tarayıcılar bu kısmı hiçbir sunucuya göndermez.
Bağlantınız, rastgele 256 bitlik bir tohumu URL parçasında, yani # işaretinden sonraki her şeyde taşır. URL belirtimine göre tarayıcı parçayı ayıklar ve sunucularımıza gönderilen isteğe asla dâhil etmez. Tarayıcı bu tohumdan HKDF ile hem sırrı bulmaya yarayan bir arama değeri hem de içerik anahtarının sarmalamasını açan anahtarı türetir. Sunucu yalnızca arama değerinin bir karmasını görür.
Alıcının tarayıcısı tohumu parçadan okur ve aynı türetmeyi yerelde yapar. Buradaki “sıfır bilgi” ifadesinin anlamı budur: bağlantı olmadan yalnızca şifreli metne sahip olmak hiçbir işe yaramaz.
Adım 03 · İsteğe bağlı parola
Yalnızca insanların bildiği ikinci bir kilit
Kısaca: bir parola eklerseniz, tam bağlantıya sahip olan biri bile parola olmadan sırrı açamaz.
Bir parola belirlerseniz, parola bellek yoğun bir anahtar türetme fonksiyonu olan Argon2id ile güçlendirilir ve tohumla birleştirilerek içerik anahtarını sarmalayan anahtara dönüştürülür. Parolanın kendisi asla iletilmez veya saklanmaz; onu yalnızca siz ve alıcı bilirsiniz. Yanlış tahminler, alıcının tarayıcısında, zaten elinde olan verilere karşı yeniden denenir; bu yüzden sunucu bunları sayamaz.
Bellek yoğunluğu, büyük ölçekli çevrimdışı tahmin denemelerini GPU'larda ve ASIC'lerde bile pahalı hâle getirir. Parolayı bağlantıdan farklı bir kanaldan paylaşın; böylece iki unsur hiçbir zaman tek bir yerde bir araya gelmez. Argon2 modülü her oluşturma ve göstermede indirilir; böylece ağ, hangi sırların parola kullandığını anlayamaz.
Adım 04 · Aktarım & depolama
Cihazınızdan yalnızca şifreli metin çıkar
Kısaca: kilitli bir kutu ve bir son geçerlilik zamanı saklarız. Başka hiçbir şey yok: ne düz metin, ne anahtar, ne de size dair bir kayıt.
Veri bloğu TLS üzerinden yüklenir ve depolamada şifreli metin olarak, karma değeri alınmış kimlik bilgileri, kullanım ömrü ve yuvarlanmış bir son geçerlilik zamanıyla birlikte saklanır. Gönderen kimliği, alıcı, IP kaydı, oluşturma zamanı veya erişim geçmişini bilerek hiç tutmayız. Bir sırrı bir kişiye bağlayacak bir hesap sistemi yoktur. Hız sınırlaması, adresin düzenli olarak değişen bir tuz altında alınmış HMAC'i üzerinden çalışır; böylece bir değişimden öncesi, sonrasıyla ilişkilendirilemez.
Saklanan nesne, parçadaki tohum olmadan anlamsız olduğu için, sunucunun ele geçirilmesi ya da bir mahkeme celbi yalnızca hiçbir şeye geri dönüştürülemeyen opak baytlar ve karmalar ortaya çıkarır.
Adım 05 · Alma & imha
İlk okuyan kazanır, ardından sır silinir
Kısaca: tek seferlik bir bağlantıyı açmak kutuyu bir kez teslim eder ve sunucudaki kopyayı siler. Ya da dilediğiniz an kendiniz imha edin.
Gösterme sayfası yüklendiğinde hiçbir şey alınmaz: istek yalnızca gerçek bir tıklama veya tuşa basma ile gönderilir; böylece bağlantı tarama araçları ve sohbet önizlemeleri bir sırrı tüketemez. Tek seferlik bir sır için sunucu, satırı tek bir koşullu güncellemeyle talep eder; yalnızca tek bir istek kazanır ve sır o andan itibaren tüketilmiş sayılır. Bağlantı koparsa aynı tarayıcı 15 dakika boyunca yeniden indirebilir; başka hiç kimse indiremez ve onaylanmamış bir talep geri alınmaz, imha edilir. Süreli sırlar ise süreleri dolana kadar sıradan bir okuma işlemidir.
Her sırrın ayrıca özel bir imha bağlantısı vardır. Bağlantıyı açmak tek başına hiçbir şeyi imha etmez; onayladığınızda şifreli metin, herhangi bir alıcı okuyamadan hemen silinir.
Tehdit modeli
shhnote neyi görebilir, neyi göremez
Dürüst sürüm. Güven sınırı tam olarak burada.
Cihazınızdan asla çıkmaz
Göremediklerimiz
Düz metniniz · içerik anahtarı ve tohum · parolanız · parola belirlenip belirlenmediği · bir sırrı kimin oluşturduğu veya açtığı · ne zaman oluşturulduğu · IP düzeyinde erişim kayıtları. Bunların hiçbiri iletilmez veya saklanmaz.
Sunucularımızda saklanır
Elimizde olanlar
Açamadığımız şifreli bir veri bloğu · dolgulanmış boyut sınıfı · tarayıcınızın sırrı bulmak veya imha etmek için kullandığı değerlerin tek yönlü karmaları · tek seferlik mi yoksa süreli mi olduğu · yuvarlanmış bir son geçerlilik zamanı. Bağlantınızdaki tohum olmadan hepsi işe yaramaz.
Bilmeye değer
Dürüst çekinceler
Tam bağlantıya (ve belirlendiyse parolaya) sahip olan herkes tek seferlik bir sırrı okuyabilir; bağlantıyı sırrın kendisi gibi görün. Bir sır gösterildikten sonra sayfa, siz ayrılırken üzerine yazabildiğini yazar, ancak JavaScript bunu garanti edemez; işiniz bitince sekmeyi kapatın. Gerçek kullanıcı girdisi enjekte eden otomasyonla yönetilen bir tarayıcı, tek seferlik bir sırrı bir insanın açacağı gibi açabilir; bu durumda alıcı hiçbir şey bulamaz, ki bu da dürüst sonuçtur. Bir sırrı silmek kaydı kaldırır; şifreli kalıntılar üzerine yazılana kadar günlüklerde, boş disk alanında veya yedeklerde, anahtarı olmayan şifreli metin olarak kalabilir. Veritabanının dışında saklanan büyük sırlar, dosyanın yazıldığı zamanı taşır. Ve her web uygulamasında olduğu gibi, tarayıcınıza sunulan koda güvenirsiniz; shhnote'un açık kaynaklı ve kendi sunucunuzda barındırılabilir olmasının nedeni de budur.
Kriptografik belirtim
Tüm yapı taşları tek bir yerde
Şifreleme
64 KiB'lik parçalar hâlinde kimlik doğrulamalı simetrik şifreleme. 256 bitlik bir anahtar ve parça başına bir bütünlük etiketi; böylece kurcalama veya kırpma yalnızca okunamaz hâle gelmekle kalmaz, tespit de edilir.
Anahtar türetme
Anahtarlar ve tanımlayıcılar tohumdan HKDF-SHA-256 ile türetilir. İsteğe bağlı parolalar bellek yoğun bir KDF ile güçlendirilir; bu da çevrimdışı kaba kuvvet saldırılarını özel donanımda bile yavaş ve pahalı kılar.
Rastgelelik
Tohumlar, anahtarlar, tuzlar ve nonce değerleri tarayıcının kriptografik olarak güvenli üretecinden gelir. Asla Math.random() değil, asla tahmin edilebilir değil.
Anahtarın saklanması
Tohum, bağlantınızdaki # işaretinden sonra yer alır. Tarayıcılar bu parçayı asla iletmez; bu yüzden sunucularımıza hiç ulaşmaz.
Aktarımda
Cihazınızdan yalnızca şifreli metin çıkar ve modern TLS üzerinden taşınır. Bize ulaşan, açamadığımız opak bir veri bloğudur.
Depolamada
Şifreli bir veri bloğu, kimlik bilgilerinin tek yönlü karmaları ve yuvarlanmış bir son geçerlilik zamanı saklarız; düz metin yok, anahtar yok, gönderen veya alıcıya dair üst veri yok.
Teknik SSS
Güvenliğe meraklılar için
Tek seferlik garanti, eşzamanlı isteklere karşı nasıl sağlanıyor?
Gösterme işlemi, satırı “active” durumundan “claimed” durumuna taşıyan tek bir koşullu güncelleme çalıştırır. Eşzamanlı iki istek birden başarılı olamaz; ikincisi zaten talep edilmiş bir kayıtla karşılaşır ve herkesle aynı “sır bulunamadı” yanıtını alır. Talep asla geri alınmaz: indirme yarıda kalırsa talep belirtecine sahip olan, süre penceresi içinde yeniden indirir; aksi hâlde sır okunmadan imha edilir.
Neden sorgu parametresi yerine URL parçası?
Sorgu parametreleri sunucuya gönderilir ve erişim kayıtlarına, vekil sunuculara ve analiz araçlarına düşer. Parça (# işaretinden sonrası) ise URL belirtimine göre istemci tarafında kalır; tarayıcı onu HTTP isteğine asla koymaz. Sıfır bilgi tasarımının tüm temeli bu özelliktir. Sır gösterildikten sonra sayfa parçayı adres çubuğundan ve geçmişten de kaldırır.
Bağlantı tarama araçlarının tek seferlik sırları vaktinden önce yakmasını ne engelliyor?
Görüntüleme sayfası her sır için aynı statik belgedir ve yüklenirken hiçbir şey almaz. İstek yalnızca güvenilir bir tıklama veya tuşa basma ile gönderilir; betikle yapılan bir click() ya da form gönderimi sayılmaz. Otomatik tarama araçları (e-posta güvenliği, sohbet önizlemeleri, antivirüs) yalnızca bu statik kabuğu yükler.
Bunu doğrulayabilir veya kendi sunucumda barındırabilir miyim?
Evet. Kaynak kodunun tamamı AGPLv3 lisansıyla herkese açık; protokol, her uygulamanın kendini sınayabileceği uygunluk test vektörleri içeren bir belirtimde yazılı; ayrıca bir kendi sunucunda barındırma rehberi de var. İstemci tarafındaki kriptografiyi denetleyebilir ve kendi kurulumunuzu çalıştırarak güven sınırını tamamen kendi elinizde tutabilirsiniz.
Kötüye kullanımı önlemek için bir şey kaydediliyor mu?
Sır başına erişim kaydı veya IP geçmişi tutmayız. Hız sınırlaması, adresin anahtarlı bir karmasını kullanır; tuz değeri düzenli olarak değişir ve değiştiğinde tüm sayaçları da sıfırlar. Kötüye kullanım bildirimleri günlük olarak sayılır; hangi sırrın bildirildiğine dair kayıt yoktur.
Güvenli paylaşım için ipuçları
- Parolayı bağlantıdan farklı bir yoldan gönderin; örneğin bağlantıyı e-postayla, parolayı telefonla.
- İşinizi görecek en kısa geçerlilik süresini seçin.
- Şifreler ve tam olarak bir kez okunması gereken diğer bilgiler için tek seferlik bir sır kullanın.
Güvenlik açığı bildirme
Bu sitede bir güvenlik sorunu bulduğunuzu düşünüyorsanız, lütfen başka birine söylemeden önce [email protected] adresine e-posta göndererek bize gizlice bildirin. Ne bulduğunuzu ve nasıl yeniden oluşturulabileceğini ekleyin.
Bizim yapacaklarımız:
- 5 iş günü içinde yanıt vermek;
- düzeltme sürecinde sizi bilgilendirmek;
- isterseniz, düzeltmeyi yayımladığımızda adınızı anmak.
Test yaparken lütfen başkalarının verilerine erişmeyin, hizmeti aksatmayın ve hizmete ağır yük bindiren otomatik taramalar çalıştırmayın.
shhnote yazılımının kendisindeki güvenlik açıkları için projenin güvenlik politikasına bakın.
Deneyin, on saniye sürer
Gizli bir şey yazın, tek seferlik bağlantınızı alın ve kayboluşunu izleyin.