Şifre Aracı Oluşturucuya dön

Güvenlik rehberi

Math.random Neden Şifreler İçin Güvenli Değil

Math.random'ın UI efektleri için uygun olduğunu, ancak şifreler, sıfırlama kodları, token'lar veya diğer güvenlik hassasiyeti olan sırlar için neden kullanılmaması gerektiğini öğrenin.

Özet

Math.random() genel bir JavaScript sözde rastgele fonksiyonudur. Animasyonlar, rastgele UI davranışları, örnekler, oyunlar ve simülasyonlar için kullanışlıdır. Kriptografik güvenlik için belirtilmemiştir ve şifreler, sıfırlama kodları, API sırları, imzalama anahtarları veya kurtarma token’ları oluşturmak için kullanılmamalıdır.

Sorun

Bir şifre oluşturucunun, bir saldırgana karşı öngörülemezliğe ihtiyacı vardır; sadece kullanıcıya çeşitli görünen değerler değil. Math.random() tarayıcı standardı bir kriptografik güvenlik garantisi sağlamaz ve uygulamalar motorlar arasında farklılık gösterebilir.

Daha güvenli tarayıcı seçeneği

Modern tarayıcılar, Web Crypto API aracılığıyla crypto.getRandomValues() sağlar. PwdGen bu arayüzü ve reddetme örneklemesini kullanır; bu da yanlı karakter seçimini önler. Bu API mevcut değilse, güvenli davranış oluşturmayı durdurmak ve uyumluluk gereksinimini açıklamaktır.

Bir oluşturucuyu nasıl incelemeli

Kaynak kodunda Math.random arayın. Ciddi bir şifre oluşturucu, şifre karakterleri için bunu kullanmamalıdır. Neden güvenli olmadığını açıklayan dokümantasyonda görünebilir, ancak oluşturma yolunda değil.

Detaylı rehberlik

Bu kılavuz, Math.random’ın şifreler ve sırlar için neden uygun olmadığına odaklanır. Geliştiriciler, öğrenciler ve bir oluşturucunun güvenli rastgelelik kullanıp kullanmadığını kontrol eden araç kullanıcıları için yazılmıştır; bu nedenle pratik amaç dramatik bir güvenlik iddiası oluşturmak değildir. Amaç, günlük kullanıma dayanabilecek bir şifre alışkanlığı seçmektir: giriş formları, şifre yöneticileri, mobil klavyeler, hesap kurtarma, paylaşılan cihazlar ve ara sıra garip doğrulama kuralları olan hizmetler. Güvenli bir öneri, ancak gerçek bir kişi onu tutarlı bir şekilde takip edebiliyorsa kullanışlıdır.

En güvenli başlangıç noktası rastgelelik artı benzersizliktir. Rastgelelik, değerin bir doğum günü, evcil hayvan adı, klavye deseni veya favori bir alıntıdan icat edilmediği, kriptografik olarak uygun bir rastgele kaynak tarafından geniş bir alandan seçildiği anlamına gelir. Benzersizlik, aynı şifrenin başka hiçbir yerde kullanılmadığı anlamına gelir. Uzun ancak yeniden kullanılan bir şifre, ilgisiz bir ihlalden sonra hızla başarısız olabilirken, benzersiz bir rastgele şifre hasarı yalnızca kullanıldığı tek hesaba sınırlar.

Bu konu için pratik bir ön ayar, Math.random yerine reddetme örneklemesi ile crypto.getRandomValues kullanmaktır. Bu ön ayarı Web Crypto API kılavuzu ile uygulayabilir ve ardından nihai değeri güvenilir bir şifre yöneticisinde saklayabilirsiniz. PwdGen, değerleri tarayıcıda Web Crypto ile yerel olarak oluşturur; oluşturulan şifre bir PwdGen sunucusuna gönderilmez. Bu yerel tasarım sunucu tarafı maruziyetini azaltır, ancak her tehdide karşı koruma sağlamaz. Kötü niyetli bir tarayıcı eklentisi, güvenliği ihlal edilmiş bir cihaz, bir kimlik avı sayfası veya güvenli olmayan pano işleme, bir sırrı oluşturulduktan sonra ifşa edebilir.

Kaçınılması gereken en yaygın sorunlar, tahmin edilebilir sözde rastgele diziler, modulo yanlılığı, özel rastgele fonksiyonlar ve üretime kopyalanan demo kodlardır. Bu sorunlar önemlidir çünkü saldırganlar, insan alışkanlıkları onlara bir kısayol sağladığında nadiren her olası şifreyi kaba kuvvetle denemek zorunda kalır. Kimlik bilgisi doldurma, kimlik avı, sızdırılmış şifre listeleri ve hesap kurtarma kötüye kullanımı, genellikle saf bir matematiksel aramadan daha gerçekçidir. Bu nedenle en iyi tavsiye, şifre kalitesini MFA, geçiş anahtarları, kurtarma kodu depolama ve kurtarma e-postası veya telefon ayarlarının düzenli olarak gözden geçirilmesi gibi hesap düzeyindeki kontrollerle birleştirir.

Öneriyi uygularken bu kontrol listesini kullanın:

Bir web sitesi ideal ayarı reddederse, şifreyi elle daha zayıf bir desene zorlamayın. Bir seferde bir değişkeni ayarlayın. Semboller reddedilirse, büyük harf, küçük harf ve sayıları etkin bırakın ve uzunluğu artırın. Maksimum uzunluk düşükse, kabul edilen en büyük uzunluğu kullanın ve değerin benzersiz olduğundan emin olun. Bir şifre yüksek sesle okunacak, yazdırılacak veya bir televizyon veya yönlendirici ekranında yazılacaksa, kafa karıştırıcı karakterleri hariç tutmayı ve daha küçük alfabeyi telafi etmek için uzunluğu artırmayı düşünün.

Son olarak, şifre tavsiyesinin sınırını unutmayın. Güçlü bir şifre bir savunma katmanıdır, bir garanti değildir. Bir kimlik avı sayfasını güvenli hale getiremez, kötü amaçlı yazılımı düzeltemez veya kimlik bilgilerini kötü depolayan bir hizmeti telafi edemez. Yararlı alışkanlık sıkıcı ama dayanıklıdır: benzersiz bir değer oluşturun, güvenli bir şekilde saklayın, kurtarma yolunu koruyun ve maruziyetten şüpheleniyorsanız hızla değiştirin.

Güvenli bir sonraki adım

Bu kılavuzu okuduktan sonra, her şeyi bir kerede düzeltmeye çalışmak yerine küçük bir hesap denetimi yapın. Ele geçirilmesi en çok soruna yol açacak hesabı seçin, şifresinin benzersiz olduğunu onaylayın ve kurtarma e-postasını, kurtarma telefonunu, MFA yöntemini ve yedek kod depolamayı kontrol edin. Zincirin herhangi bir parçası zayıfsa, düşük riskli hesaplara geçmeden önce o parçayı iyileştirin. Bu sıralama, işi yönetilebilir tutar ve saldırganların bir basamak olarak kullanma olasılığı en yüksek olan hesapları korur. Math.random’ın şifreler için neden güvenli olmadığı konusunda en iyi sonuç, tekrarlanabilir bir alışkanlıktır: yerel olarak oluşturun, dikkatlice saklayın ve yeniden kullanımdan kaçının.

Sıkça sorulan sorular

Math.random hiç uygun mudur?

Evet, görsel efektler, simülasyonlar ve sıradan UI rastgeleliği için, ancak kimlik bilgileri veya güvenlik token’ları için değil.

Şifre oluşturucular bunun yerine ne kullanmalı?

Tarayıcıda crypto.getRandomValues() gibi kriptografik bir rastgele kaynak kullanmalıdırlar.

PwdGen Math.random’a geri döner mi?

Hayır. Web Crypto mevcut değilse, PwdGen bir uyumluluk uyarısı gösterir ve Math.random() ile şifre oluşturmaz.

Kaynaklar