NP tam problemlerini kullanarak şifre karması


16

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:

  1. 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?

  2. 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ü?

  3. 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.


Maddelerinizi burada bir sat çözücüye (pycosat kullanarak picosat) bağladım . Nbits = 300 için en uzun yan tümceleri oluşturmaktır, pycosat örneği öldürür. 300'den fazla şey yapmadım çünkü yan tümce nesliniz aslında çok uzun. Ayrıca, 0 ... 0 her zaman neslinizde bir çözümdür. Her zaman böyle 'kolay' çözümleriniz varsa, bu işe yaramaz.
holf

Yanıtlar:


17

Ne yazık ki, bu işe yaramıyor gibi görünüyor (ayrıntılar için aşağıya bakın) ve bu tür bir fikir vermenin makul olarak güvenli bir plan yapmasının bir yolunu bulmak zor görünüyor.

Genel fikrinizle ilgili sorun

Kriptografiyi NP-tam problemlerine dayandırma fikrini ilk düşünen siz değilsiniz. Sorun şu ki, NP sertliği sadece en kötü durum sertliğini sağlar, ancak kriptografi ortalama durum sertliğini gerektirir. Kriptografiyi NP-tamamlanmış problemlere (ör. Sırt çantası kriptosistemleri) dayandırmak için birçok girişimde bulunuldu, ancak bunlar iyi sonuç vermedi. Tipik olarak, insanların en kötü durumda üstel olmalarına rağmen, ortalama olarak (veya önemsiz olmayan bir olasılıkla) genellikle etkili olan algoritmaları keşfetmeleri; NP sertliğiyle çelişmese de bu kriptoyu kırmak için yeterlidir.

Konu hakkında daha fazla bilgi vermenizi öneririm. Sen de bazı yararlı başlayan noktaları bulabilirsiniz Kriptografi NP Sert Problemleri önemi , tek yönlü fonksiyonları dışındaki Ortalama durum karmaşıklığı açık problemler , Impagliazzo en Worlds Statüsü? , Ortalama durum azaltımlarında en kötü durum .

Özel planınızla ilgili sorun

Özel teklifiniz tam olarak belirtilmedi. Bir şemayı analiz etmek için, şemanın nasıl çalıştığını tam olarak belirtmeniz gerekir. Sizin durumunuzda, genel örnekteki 7 maddeden 4'ünü nasıl seçtiğiniz belli değil. (Ve tek bir örnek, genel olarak nasıl yaptığınızı açıklayan bir belirtimin yerine geçmez.)

x0,x1,x2,x3,x4255 değişkene olası ödevler verin, bu yüzden hepsini deneyin ve 40 yan tümcesi tarafından ihlal edilen ödevleri atın. Bunun sizi tüm maddelerle tutarlı olan yalnızca bir ödevle bırakacağını tahmin ediyorum.

1/21/21025-17/8 , bu nedenle deneysel olarak olasılığı tüm 40 maddeleri hakkında bu tatmin(7/8)402-7.7(25-1)x2-7.70.15

Bu, 5 değişkenli her grup için tekrarlanabilir ve her biri için benzersiz tatmin edici atamayı benzersiz bir şekilde kurtarır. Herhangi bir belirsizlik varsa, aday ödevleri diğer maddelere göre kontrol edilebilir.

Bu şekilde, genellikle prosedürünüz tarafından oluşturulan 3SAT örneği sınıfını çözecek etkili bir algoritma olduğunu görüyoruz. Tüm 3SAT örneklerini çözmez, ancak oluşturduğunuz örneklerin özel bir yapısı vardır ve bu özel yapıya sahip örnekleri etkili bir şekilde çözer. Bu, noktayı iyi göstermektedir: 3SAT'ın bazı örnekleri diğerlerinden daha kolaydır ve 3SAT'ın sertliği (en kötü durumda karmaşıklık), oluşturduğunuz özel örneklerin sertliği veya ortalama bir 3SAT örneğinin sertliği hakkında çok az şey söyler veya hiç bir şey söylemez.


Tam özellik olarak hareket eden bir referans uygulaması vardır. Bu ilk denemede, plan gerçekten basittir. Şifreyi değiştirirken 001, 010, 100 ve 111 verecek 4 maddeyi seçtim. Bu, her bir madde için 8 üzerinden 4 geçerli kombinasyon sağlar.
Cyker

Muhtemelen bu çabuk olsa da, çözümü hızlı bir şekilde daraltmayı mümkün kılan çok fazla cümle verir. Ancak, O (n ^ 3) maddeleriyle başlıyoruz ve hangisini tutacağımızı seçmekte özgürüz. Üçüzler bağımsız olmayabilir. Bu yüzden, yan tümceler, sezgisel analizinizin hala geçerli olup olmadığı, kolay problem örneklerini kaldırmaya çalışan bir kalıpla seçilip seçilmediğini merak ediyorum.
Cyker

1
Ama daha ilginç olan şey, kabaca konuşmak gerekirse, ortalama bir durum NPC problemimiz yok mu?
Cyker

1
@Cyker, Kesinlikle haklısın. Kesin olarak, olasılıkların bağımsız olduğuna dair hiçbir garanti olmadığından olasılıkları çoğaltamazsınız. Bu, algoritmanın ne kadar iyi çalışabileceğini tahmin etmeye çalışmak için bir buluşsal yöntemdir. Buluşsal yöntem yanlış olabilir. Nihai test algoritmayı uygulamak ve çalışıp çalışmadığını görmek.
DW

2
Hızlı bir test, örneklerinizi bir SAT çözücüde denemek olabilir. SAT Çözücülerinin örneklerinizde etkili olacağını düşünüyorum, ancak spesifikasyonunuzu tam olarak anlamaya çalışmadım. 10000 değişkenlik bir örnek oluşturmaya ve bir SAT Çözücü çalıştırmaya çalışın (bu arada, dolgu / tuzlama olmadan, şifreler çok daha küçük olacaktır ...)
holf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.