Yaygın olarak kullanılan parola karma algoritmaları bugün böyle çalışır: Parolayı tuzlayın ve bir KDF'ye besleyin. Örneğin, PBKDF2-HMAC-SHA1 kullanarak parola karma işlemi yapılır DK = PBKDF2(HMAC, Password, Salt, ...)
. HMAC, dolgulu tuşlara sahip 2 yönlü bir karma ve SHA1 bir dizi permütasyon, vardiya, rotasyon ve bitsel işlem olduğundan, temel olarak tüm süreç belirli bir şekilde düzenlenen bazı temel işlemlerdir. Temelde, hesaplamak için ne kadar zor oldukları belli değil. Muhtemelen tek yönlü işlevler hala bir inançtır ve tarihsel olarak önemli bazı kriptografik karma işlevlerinin güvensiz hale geldiğini ve kullanımdan kaldırıldığını gördük.
Daha eksiksiz bir teorik temel vermeyi umarak NP tam sorunlarının şifreleri yepyeni bir şekilde kullanmanın mümkün olup olmadığını merak ediyordum. Anahtar fikir şudur: P! = NP (P == NP sonra OWF yoksa mevcut şemalar da kırılırsa), bir NPC problemi olması, cevabın doğrulanması kolay ancak hesaplanması zor olduğu anlamına gelir. Bu özellik parola karma gereksinimlerine çok uygundur. Parolayı bir NPC sorununun cevabı olarak görürsek, NPC sorununu çevrimdışı saldırılara karşı parolanın karması olarak saklayabiliriz : Parolayı doğrulamak kolaydır, ancak kırılması zordur.
Dikkat, aynı parola bir NPC sorununun birden fazla örneğiyle eşlenebilir, muhtemelen hepsinin çözülmesi zor değildir. Bu araştırmanın ilk adımı olarak, ikili bir dizgiyi 3-SAT sorununun cevabı olarak yorumlamaya ve ikili dizenin bir çözüm olduğu 3-SAT sorununun bir örneğini oluşturmaya çalışıyordum. En basit haliyle, ikili dize 3 bit içerir: x_0, x_1, x_2. Sonra 2 ^ 3 == 8 yan tümcesi vardır:
000 ( (x_0) v (x_1) v (x_2) )
--------------------------------------
001 ( (x_0) v (x_1) v NOT(x_2) )
010 ( (x_0) v NOT(x_1) v (x_2) )
011 ( (x_0) v NOT(x_1) v NOT(x_2) )
100 ( NOT(x_0) v (x_1) v (x_2) )
101 ( NOT(x_0) v (x_1) v NOT(x_2) )
110 ( NOT(x_0) v NOT(x_1) v (x_2) )
111 ( NOT(x_0) v NOT(x_1) v NOT(x_2) )
İkili dizenin 000 olduğunu varsayalım. 8 cümlecekten sadece biri yanlış (ilki). İlk fıkrayı ve VE 7 kalan fıkrayı atarsak, 000 sonuç formülünün bir çözümüdür. Dolayısıyla, formülü saklarsak, 000'ı doğrulayabiliriz.
Sorun, 3 bitlik bir dize için, orada 7 farklı yan tümceyi görüyorsanız, hangisinin eksik olduğunu anında bilirsiniz ve bu bitleri ortaya çıkarır.
Daha sonra 3'ünü atmaya karar verdim, sadece 001, 010, 100 ve 111 ile işaretlenmiş 4'ü tutmaya karar verdim. Bu bazen çarpışmalara neden olur, ancak sorunu daha az önemsiz hale getirir. Çarpışmalar her zaman gerçekleşmez, ancak girdinin daha fazla biti olduğunda kesinlikle yok olup olmayacağı henüz bilinmemektedir.
Düzenle. İkili dizenin (000, 001, ..., 111) herhangi biri olabileceği genel durumda, 7'nin doğru ve 1'in yanlış olduğu hala 8 cümle vardır. Doğruluk değeri veren 4 maddeyi seçin (001, 010, 100, 111). Bu, aşağıdaki prototip uygulamasına yansır.
Düzenle. Aşağıda @DW tarafından gösterilen yanıt olarak, bu cümle seçme yöntemi, belirli bir değişkenler setinde değerlerinin hızla daraltılmasını mümkün kılan çok fazla cümle ile sonuçlanabilir. Toplam 7 * C (n, 3) cümlecikleri arasında cümle seçmenin alternatif yöntemleri vardır. Örneğin: Belirli bir değişken grubundan farklı sayıda cümle seçin ve bunu yalnızca bitişik değişkenler ((x_0, x_1, x_2), (x_1, x_2, x_3), (x_2, x_3, x_4), .. için yapın. .) ve böylece bir klik yerine bir döngü oluşturur. Bu yöntem de işe yaramıyor çünkü sezgisel olarak tüm cümlelerin karşılanıp karşılanamayacağını test etmek için tümevarım kullanarak ödevleri deneyebilirsiniz. Bu yüzden genel yapıyı açıklamayı kolaylaştırmak için sadece mevcut yöntemi kullanalım.
Bir n-bit dizesi için cümle sayısı 4 * C (n, 3) = 4 * n * (n - 1) * (n - 2) / 6 = O (n ^ 3) 'dir, yani karma şifre boyutunun polinomudur.
Burada Python'da bir prototip uygulaması var . Bir kullanıcı giriş ikili dizesinden 3-SAT sorunu örneği oluşturur.
Bu uzun tanıtımdan sonra, sonunda sorularım:
Yukarıdaki yapı (prototipte uygulandığı gibi) güvenli parola karması olarak mı çalışıyor, yoksa en azından umut verici görünüyorsa revize edilebilir mi? Değilse, nerede başarısız olur?
Aralarından seçim yapabileceğimiz 7 * C (n, 3) cümleciklerimiz olduğu için, muhtemelen randomizasyon yardımı ile şifre karması olarak kullanılmaya uygun güvenli bir 3-SAT örneği oluşturmak için başka bir yol bulmak mümkün mü?
Kanıtlanmış güvenli şifre karma şemaları tasarlamak için NP tamlığından yararlanmaya çalışan benzer bir çalışma var mı ve zaten bazı sonuçlar var (pozitif veya negatif)? Bazı girişler ve bağlantılar çok hoş olurdu.
Düzenle. İlk yanıtı veren ve sorun yapısının yanı sıra faydalı kaynaklar hakkında büyük fikirler veren @DW tarafından aşağıdaki yanıtı kabul ediyorum. Burada sunulan saf madde seçim şeması (Python prototipinde uygulandığı gibi) işe yaramadı çünkü küçük gruplarda değişken atamaları hızla daraltmak mümkün. Ancak, sorun NPC-PasswordHashing azaltma hiç işe yaramaz gösteren resmi bir kanıt görmedim çünkü sorun açık kalır. Bu özel 3-SAT azaltma sorunu için bile, burada numaralandırmak istemediğim maddeleri seçmenin farklı yolları olabilir. Bu nedenle, herhangi bir güncelleme ve tartışma hala kabul edilir.