'Dönüşlü' karma algoritmalar var mı?


11

Aşağıda verilen bir tanıma göre sınıftaki bir algoritmanın 'refleksif' olarak kabul edilebileceği teorik veya pratik bir karma algoritma sınıfı var mı:

  • hash1 = algo1 ("giriş metni 1")
  • hash1 = algo1 ("girdi metni 1" + karma1)

+ Operatörü, algoritmayı (algo1) tam olarak aynı sonucu verecek şekilde çıktıyı (hash1) tekrar girişe ("girdi metni 1") birleştirmek için birleştirme veya belirtilen herhangi bir işlem olabilir. yani girdi ve girdi + çıktı üzerindeki çarpışma. + Operatörü her iki girişin tamamını birleştirmelidir ve algo girişin bir kısmını atmayabilir.

Algoritma, çıktıda yüksek entropi üretmelidir. Çıktıyı bir ya da her iki olası girişe geri döndürmek kriptografik olarak zor olabilir, ancak gerekmemektedir.

Ben bir matematikçi değilim, ama iyi bir cevap böyle bir algoritma sınıfının neden var olmadığının bir kanıtı olabilir. Ancak bu soyut bir soru değildir. Varsa, sistemimde böyle bir algoritmayı kullanmakla gerçekten ilgileniyorum.

Bu, ilk olarak /programming/4823680/reflexive-hash adresinde yayınlanan bir sorunun kopyası.


İlgili:
İlişkisel

2
Tüm girdi metinleri veya bir girdi metni için bu özellik tutma ile ilgileniyor musunuz? Tüm giriş metinleri için tutmak istiyorsanız, çarpışmalar oluşturmak tasarım açısından önemsizdir, bu yüzden iyi bir karma işlevi olarak düşünülebileceğini düşünmüyorum.
Peter Taylor

Birisi kendi karmalarını içeren karma dosyaları istiyor! ;)
Raphael

@Peter Taylor - Rasgele girdi metni için açıklandığı gibi çalışan bir işlev arıyorum. Her farklı girdi, genel olarak olası diğer girdilere karşı yüksek karşılıklı entropiye sahip bir karma üretir. Geri dönüşümsüz bir hash fonksiyonu kadar iyi çalışır. Ancak aradığım hash işlevinin geri döndürülemezlik özelliğine sahip olması gerekmez. Yüksek entropi yeterlidir.

@Raphael - Evet, bu kısa ve öz bir ifadedir.

Yanıtlar:


9

Gereksinimi karşılayan önemsiz bir yapı veriyorum . Ben sadece "dönüşlü" hash fonksiyonunun varlığına cevap vermesini sağlıyorum .

, çıktıda yüksek entropi üreten herhangi bir hash fonksiyonu olsun . G'nin rastgele uzunluktaki ikili dizeleri k- bit ikili dizelerine verdiğini varsayalım , burada k herhangi bir pozitif tamsayıdır. Let + belirtmek birleştirme operatörü ve let | x | x ikili dizesinin uzunluğunu gösterir .G,G,kk+|x|x

X girişi üzerindeki sağlama işlevini aşağıdaki gibi tanımlayın:'Hx

  1. Eğer , sonra H ( x ) def = G ( x ) .|x|k'H(x)=defG,(x)
  2. Eğer , let L ve R olmak ( | x | - k ) -bit önek ve k -bit eki arasında|x|>kLR,(|x|-k)k sırasıyla. Yani, x = L + R ve | R | = k . Eğer R ' = H ( L ) ( H ( L ) hesaplanıryinelemeli olarak), daha sonra , H ( x )xx=L+R,|R,|=kR,='H(L)'H(L); aksi takdirdeH(x) def = G(x).'H(x)=defR,'H(x)=defG,(x)

Dediğim gibi, bu önemsiz bir yapı. Pratik (teorik olarak MD5, SHA-1, ... gibi) herhangi bir hash fonksiyonuna uygulanabilir.


Kodlama alanlarında çok emin değilim, ama hala yüksek entropiye sahip mi? Yapım gereği, kesinlikle eskisi kadar iki katar için aynı hash'a sahiptir. Ve birbirlerine çok yakın çiftler halinde geliyorlar. (Oh, 2'nin ikinci satırında | R | = k olmalı )'H|R,|=k
Raphael

@Raphael: Yazım hatası (düzeltilmiş) işaret ettiğiniz için teşekkür ederiz. H, R = G (L) olduğu durumda G ile aynı entropiye sahiptir. İhtiyaca göre, bu durumda, H (x) R'ye eşit olmalıdır. Burada entropiyi arttırmak için hiçbir şey yapamayız; çünkü "refleksivite" gereksinimi çıktıyı değiştirmemizi engeller.
MS Dousti

@Sadeq: Karma işlevinin özyinelemeli olarak hesaplanması gerekli mi? Ben algoritma bu gerçek herhangi bir şekilde yararlanan?
Yasser Sobhdel

@Yasser: Sorunun geçmişine bakarsanız, ilk cevabımın tekrarlamayı gerektirmediğini fark edeceksiniz. Ancak, önceki cevap aşağıdaki gibi bir şey hesaplamak için doğru değildi: olmalıdır H ( M ) tanım gereği. 'H(M+'H(M)+'H(M)+...+'H(M))'H(M)
MS Dousti

Sadeq, teşekkür ederim. Ben buna inanıyorum olabilir o istendi olarak, soruma cevap ver. Cevabı uygun bir uyarıya oturttunuz. Pragmatik bir bakış açısından, SHA-1 gibi iyi bilinen herhangi bir algoritma için bir yer paylaşımı olmasını seviyorum. Doğru anladıysam, algoritmanız gerekli çarpışmayı vurana kadar karmaları özyinelemeli olarak hesaplamaya devam eder ve sonra durur. Bu durumda belki de bu naif çözümü dublaj yapabiliriz. Benim endişem gömülü algoritmanın (SHA-1 demek) sonunda gerekli çarpışma karmasına çarpacağına dair örtük bir varsayım var gibi görünüyor,
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.