it-swarm-tr.com

Rastgele bir nonce ne kadar olmalıdır?

NIST çeşitli algoritmalar için anahtarların ve karmaların uzunluğuyla ilgili iyi yönergeler sağlar . Ama özellikle rastgele veya sahte rastgele bir uzunluk görmüyorum nonce (bir kez kullanılan sayı).

Çeşitli kullanımlar için tek bir iyi yanıt varsa, bunu görmek isterim. Ancak bu somutlaştırmak için, sunucunun sözde rasgele yol bileşeniyle bir URL oluşturduğu ortak "e-posta yoluyla sıfırlama" durumunu kullanacağım. RFC'de örnek , 136 bit (dcd98b7102dd2f0e8b11d0f600bfb0c093) gibi görünen HTTP Özet Kimlik Doğrulaması'na biraz benziyor.

Birçok kişi sürüm 4 UUID (122 sözde rasgele bit sağlayan) veya bu gibi, tartışıldığı gibi GUIDs bir kerelik jetonlar için güvenli gibi görünüyor? , ancak kullanıcı daha önceden tahmin edilebilen UUID sürümlerinin ve Windows rasgele sayı üretecine kötü kalıcı yerel saldırılardan 2008.

Ancak UUID sürümlerinde ve uygulamalarında karışık olma riskini göz ardı ederek, URL'ye kaç sahte rastgele bit dahil edilmelidir?

35
nealmcb

64 bitlik kripto kalitesinde rasgelelikse, 64 bitlik bir nonce, çoğu pratik amaç için fazlasıyla yeterlidir.

Neden 64 bit yeterli? Bu soruyu cevaplamak için kullanabileceğiniz bir tür akıl yürütme düzenleyeyim. Bunun tek kullanımlık zaman sınırlı bir URL olduğunu varsayacağım; bir kez kullanıldıktan sonra artık geçerli değildir ve bir süre sonra (3 gün, diyelim), süresi dolar ve artık geçerli değildir. Nonce sadece sunucu için anlamlı olduğu için, bir saldırganın bir tahminde bulunabilmesinin tek yolu 64-bit tahminin sunucuya gönderilmesi ve sunucunun nasıl yanıt verdiğini görmektir. Saldırgan, nonce'nin süresi dolmadan önce kaç tahminde bulunabilir? Saldırganın saniyede 1000 HTTP isteğinde bulunabileceğini varsayalım (bu oldukça kasvetli bir saldırgan); saldırgan yaklaşık 1000 * 3600 * 24 * 3 = 2 yapabilir28 3 günlük bir süre içinde tahmin eder. Her tahminin 1/2'si vardır64 doğru olma şansı. Bu nedenle, saldırganın en fazla 1/236 düzeni kırma şansı. Bu, çoğu ayar için yeterince güvenli olmalıdır.

23
D.W.

İlk olarak, sisteminizin alacağı maksimum kullanım miktarını tahmin edin (rastgele bir nonce'nin kaç kez oluşturulacağı). Ardından, kabul edilebilir bir güvenlik seviyesine, yani bir nonce'nin eskisinin bir kopyası olması ne kadar imkansız olması gerektiğine karar verin. Bit cinsinden kullanım miktarını hesaplayın, iki katına çıkarın ve bit cinsinden ihtiyacınız olan olasılıkları ekleyin ve uzunluğunuz var.

Rastgele IV ile AES-GCM'den bir örnek. Belirli bir anahtar için rastgele IV ile izin verilen çağrı sayısı 2'dir.32. IV'ün tekrar kullanılması olasılığı 2'den az olmalıdır-32. Bunun için gereken nonce uzunluğu 32 × 2 + 32 == 96 bittir.

Varsayımsal olarak, 296 paketler, her biri rastgele bir nonce'ye sahiptir ve yinelenen bir nonce olasılığının 2'den az olmasını ister-3296 × 2 + 32 == 224 bit uzunluğunda bir nonce'ye ihtiyacınız olacaktır.

Bunu 64 bitlik yukarıdaki cevapla karşılaştırmak ... 2'den fazla varsa16 (65536) sisteminizi kullanırsa, o zaman yinelenen bir nonce olma olasılığı 2'den fazladır-32 (4 milyarda 1'den fazla, kısa ölçek). Güvenlik gereksinimlerinize bağlı olarak bu oldukça kabul edilebilir olabilir veya olmayabilir.

Tek bir beden tüm cevaplara uyar - bahsedilen rastgele UUID'ler oldukça iyi bir çözümdür.

Bu değerlerin yaklaşık olduğunu ve daha doğru hesaplamaların çok daha karmaşık olduğunu unutmayın.

7
Nakedible