2015-08-12 11 views
5

Gelecekteki istekleri doğrulamak için bir dize/jeton oluşturmanız gerekiyorsa (ör. Bir API anahtarı, bir e-posta doğrulama URL'si, vb), hangi faktörler dikkate alınmalıdır? ÖzellikleBir ip/jeton kriptografik olarak güvenli kılan nedir?

dize/"çok sert tahmin etmek" "güvenli" yapan şey

  • ?
  • "Güvenlik miktarı" nasıl ölçülür/tahmin edilir?
  • Buradaki ana standartlar nelerdir?

Basit bir örnek

en NodeJS bu iki çıkış dizeleri ele alalım.

String (Node crypto aracılığıyla) 1

var crypto = require('crypto'); 
crypto.randomBytes(48, function (ex, buf) { 
    console.log(buf.toString('hex')); 
}); 

Yaylı bir daha güvenli ve neden olur yukarıda belirtilen kavramlar, dayanarak

var uuid = require('node-uuid'); 
console.log(uuid.v4()); 

(Node UUID aracılığıyla) 2?

Ayrıca, bu çevrimiçi makaleleri kolayca bulamadığım için, konuyla ilgili iyi bir tanıtım materyali önermekten lütfen çekinmeyin.

+0

Bilgilerinize ve kullanım amacına göre bir farklılık olduğunu düşünmüyorum. – marekful

+0

@marekful, teşekkürler! Buraya gelmeye çalıştığım yer şu: Bir farkı nasıl anlayabiliriz? – Pensierinmusica

+1

Bu sayfayı [kripto-dayanıklılık rasgele] (http://www.cs.berkeley.edu/~daw/rnd/) adresinden kontrol edin. –

cevap

5

Dizeyi "güvenli"/"tahmin etmek çok zor" yapan nedir? o static çünkü

bir dize veya jeton, kriptografik olamaz.

Kriptografik olarak güvenli (sözde) rasgele sayı üreteci (CS (P) RNG) kavramı, üretilen sayıların öngörülebilir olmadığını açıklar. Prosedürün bir özelliğidir ve bireysel sayıların değil.

"Güvenlik miktarı" nasıl ölçülür/tahmin edilir? Bazıları bir kara kutu olduğu için kullanılan rasgelelik kaynaklarına bağlıdır. Çok fazla rassallık üretebilir ve orada bazı kalıplar bulup bulmayacağınızı görebilirsiniz. some test suites available vardır, ancak daha sonra uygulamanız hakkında düşünmeniz gerekir ve bu rastgele sayılara ne kadar hızlı ihtiyacınız vardır. Çok fazla rastgele talep edilmesinin havuzun tükenmesi ve ardından yetersiz rastgele sayılar üretmesi mümkündür.

Buradaki ana standartlar nelerdir?

Sisteminizin/çerçevenin belirlenmiş kriptografik rasgelelik kaynakları kullanın. Belgelere güvenmek istiyorsanız, Node.js 'crypto.randomBytes() bunlardan biridir.

Basit bir örnek

düğüm Uuid crypto.randomBytes()internally kullanır, bu nedenle bunun arkasında aynı rasgelelik gücü esas vardır, ancak crypto.randomBytes() mevcut değilse bu Math.random() çare olacak. Math.random() is not cryptographically secure. Tarayıcıda şifreli olarak güvenli bir rastgele değerlere sahip olmak istiyorsanız, Web Şifreleme API'sı getRandomValues()'u sorgulamanız gerekecektir.

+0

Maalesef, node-uuid [güvenli olmayan bir PRNG'ye sessizce geri dönecektir] (https://github.com/broofa/node-uuid/blob/4ff82d52f9c9026fbacfb31eebb92c37efc460b2/uuid.js#L38-L52). –

+0

Evet, güvenli olmayan PRNG'ye geri dönecek, ancak yalnızca tarayıcı ortamları veya gerçekten eski node.js sürümleri için geri dönecektir. –

+0

Şahsen, "bu güvenli olmayan bir platformda güvenle kullanılamaz, lütfen yazılımınızı güncelleyin" diyerek hata yapmasını tercih ederim. –

İlgili konular