Password Generator
Kriptografik olarak güvenli, ayarlanabilir uzunluk ve karakter sınıflarıyla şifre üretici. Tarayıcıda çalışır.
Bu araç tarayıcınızda çalışır. Veriler dışarı çıkmaz.
Nasıl Çalışır
crypto.getRandomValues ile üretilen, kriptografik olarak güvenli rastgele şifreler. Uzunluk,
karakter sınıfları ve filtreler ayarlanabilir. Hiçbir şey sunucuya gönderilmez.
Math.random() neden yeterli değil?
JavaScript’in Math.random() fonksiyonu kriptografik olarak güvenli değildir. V8 ve diğer
motorlar genellikle xorshift128+ gibi hızlı ama tahmin edilebilir bir algoritma kullanır. Yeterli
çıktıyı gözlemleyen biri, sonraki “rastgele” değerleri öngörebilir.
Şifre üretiminde crypto.getRandomValues zorunludur — değerler tarayıcının kendi CSPRNG’sinden
gelir, o da işletim sisteminin entropi kaynağıyla tohumlanır (Linux’ta /dev/urandom, macOS’ta
Chromium için getentropy() ve WebKit için CommonCrypto’daki CCRandomGenerateBytes, Windows’ta
CNG).
Entropi neden önemli?
Şifre gücünün ölçüsü entropi (bit cinsinden):
entropi = uzunluk × log₂(alfabe_boyutu)
Örnekler:
| Uzunluk | Alfabe | Entropi |
|---|---|---|
| 8 | 26 (sadece küçük harf) | ~38 bit — zayıf |
| 12 | 62 (a-z A-Z 0-9) | ~71 bit — güçlü |
| 16 | 94 (boşluk hariç yazdırılabilir ASCII) | ~105 bit — çok güçlü |
| 20 | 94 | ~131 bit |
Son iki satır genel bir ASCII referansıdır: bu aracın ulaşabileceği en geniş alfabe 88 karakterdir (26 + 26 + 10 + 26 sembol), yani o satırları üretemez — burada 20 karakter en fazla ~129 bit eder.
Pratik eşikler:
- < 40 bit: zayıf — modern GPU’larla saatler içinde brute force.
- 40–60 bit: orta — aracın kendisinin “Orta” olarak etiketlediği bant; hızlı bir hash’e karşı tek bir GPU alt ucu saatler, üst ucu haftalar içinde tarar.
- 60–80 bit: güçlü — bcrypt veya Argon2 gibi yavaş bir hash’e karşı erişilmez; MD5 gibi hızlı bir hash’e karşı ise alt ucunu tek bir GPU haftalar içinde tüketir, yani “özel donanım ve yıllar” yalnızca üst uç için geçerlidir.
- > 80 bit: çok güçlü — gelecek 10 yılın brute-force kapasitesi karşısında bile dayanıklı.
Uzunluk vs karmaşıklık
Bir şifrenin gücünü artırmanın en verimli yolu karakter çeşitliliğini değil, uzunluğu artırmaktır. 20 karakterlik küçük harf şifresi (~94 bit), sembol içeren 8 karakterlik şifreden (~52 bit) çok daha güçlü.
Tek bir karakter eklemek olasılık uzayını alfabe boyutu kadar çarpar; alfabeyi genişletmek ise
(b₂/b)^uzunlukkadar — yani kazançuzunluk × log₂(b₂/b)bit, sabit bir çarpan değil, uzunlukla orantılı. Aracın varsayılan 20 karakterinde sembol sınıfı eklemek (62 → 88) ×1101 eder, tek karakter eklemenin ×62’sinden fazla.
Uzunluk-önce tavsiyesi yine de geçerli — fazladan sınıfların kazancı küçük olduğu için değil, zorunlu karakter sınıfları insanları öngörülebilir kalıplara ittiği için; NIST de composition rule’ları bu yüzden kaldırdı.
Modulo bias
Bir saf “rastgele 8-bit sayı → karakter” eşlemesi byte % charset.length ile yapılırsa, bazı
karakterler diğerlerinden daha sık gelir. Örnek: charset.length = 62 ise, 0-255 arası 256
sayı 62’ye tam bölünmez (256 % 62 = 8). İlk 8 karakterin her birine 5 byte değeri düşerken kalan
54 karaktere 4’er tane düşer, yani bu 8 karakter %25 daha sık seçilir.
Bu araç rejection sampling kullanır: maxValid = 256 - (256 % setSize) ve üzerindeki byte’lar
atılır. Sonuç: tam düzgün (uniform) dağılım, her karakter eşit olasılıkla seçilir.
”Karışan karakterleri hariç tut”
Şifre kâğıda yazılacak veya yüksek sesle okunacaksa 0/O ve 1/l/I/| ayrımı zor. Bu seçenek
o karakterleri çıkarır. Entropi düşer — pratiklik için bilinçli ödün.
”Shell-safe”
Üretilen şifre bash, SQL connection string, URL veya .env dosyasına yazılacaksa,
escape gereken karakterler ($, `, ", ', \, ;, |, &, <, >, (, ))
sorun çıkarır. Bu filtre onları çıkarır — kabukta escape’ten kurtulmaya yeter, URL’de yetmez:
RFC 3986’nın rezerve saydığı karakterler (!, @, #, *, +, =, [, ], :, ,, ?,
/) ve yüzde kodlamasının kendi karakteri % filtreden geçer, hâlâ percent-encoding ister.
Bu araç ne için değildir
- Production secret yönetimi. Üretilen şifreyi hemen bir password manager’a (1Password, Bitwarden, KeePassXC) veya secret store’a (Vault, AWS Secrets Manager) kaydet — burada bırakma.
- Master password seçimi. Master password için diceware-style passphrase daha iyi: hatırlanabilir + yüksek entropi. (Bu araç V1.2 yol haritasında.)
- Paylaşılan secret üretimi. İki tarafın aynı şifreyi bilmesi gereken senaryolarda, bir key exchange protokolü (Diffie-Hellman) — çıktısının üzerine HKDF (RFC 5869) gibi bir anahtar türetme fonksiyonu ile — daha uygun.
Gizlilik
Bu araç tamamen tarayıcıda çalışır. Üretilen şifreler sunucuya gönderilmez. Yine de:
- Üretilen şifreyi clipboard’a kopyalarsanız, şifre diğer uygulamaların erişimine açık olur.
- Tarayıcı eklentilerinden bazıları DOM içeriğini okuyabilir.
- Ekran paylaşımı sırasında şifre görünürse, kaydedilebilir.
Hassas hesaplar için: üret, kopyala, password manager’a yapıştır, clipboard’u temizle.