İlişkisel karma karıştırma


14

Tamamen işlevsel bir ortamda, tek başına bağlı olmayan listeyi düşünün. Övgüler dağ tepelerinden söylenmiştir ve söylenmeye devam edecektir. Burada birçok güçlü yönünden birini ve bunun ağaçlara dayanan daha geniş bir tamamen işlevsel sekans sınıfına nasıl genişletilebileceği sorusunu ele alacağım.

Sorun şudur: O (1) zamanında neredeyse kesin yapısal eşitliği güçlü bir karma ile test etmek istersiniz. Karma işlevi yapısal olarak özyinelemeli, yani karma (x: xs) = mix x (karma xs) ise, listelerde karma değerlerini önbelleğe alabilir ve bir öğe varolan bir listeye eklendiğinde bunları O (1) zamanında güncelleyebilirsiniz . Hash listelerinin çoğu algoritması yapısal olarak özyinelemelidir, bu nedenle bu yaklaşım pratikte oldukça kullanılabilir.

Ancak tek tek bağlantılı listeler yerine O (log n) zamanında iki uzunluk O (n) dizisini birleştirmeyi destekleyen ağaç tabanlı dizilere sahip olduğunuzu varsayalım. Karma önbelleğin burada çalışması için, bir ağacın aynı doğrusal diziyi temsil etme özgürlüğüne saygı göstermek için karma karıştırma fonksiyonunun birleştirici olması gerekir. Karıştırıcı alt ağaçların hash değerlerini almalı ve tüm ağacın hash değerini hesaplamalıdır.

Altı ay önce, bu sorunu araştırmak ve araştırmak için bir gün geçirdim. Veri yapıları ile ilgili literatürde dikkat çekmemiş gibi görünmektedir. Kriptografiden Tillich-Zemor karma algoritmasına rastladım. 0 ve 1 bitlerinin, bir Galois alanındaki girişleri olan bir alt cebrenin iki jeneratörüne karşılık geldiği 2x2 matris çarpımına (ilişkilendirilebilir) dayanır.

Sorum şu: Neyi kaçırdım? Hem kriptografi literatüründe hem de araştırmamda bulamadığım veri yapılarıyla ilgili makaleler bulunmalıdır. Bu sorun ve keşfedilecek olası mekanlarla ilgili herhangi bir yorum çok takdir edilecektir.

Düzenleme: Ben spektrumun hem yumuşak hem de kriptografik olarak güçlü uçlarında bu soru ile ilgileniyorum. Daha yumuşak tarafta, çarpışmalardan kaçınılması gereken ancak felaket olmayan karma tablolar için kullanılabilir. Daha güçlü tarafta, eşitlik testi için kullanılabilir.

Yanıtlar:


2

Eklendi : Per'in yorumlarını okuduktan sonra, bu cevabın, soruda daha önce bahsedilen Tillich-Zemor karma algoritmasının sadece (zayıf) bir varyasyonu olduğunu düşünüyorum. Bu cevabı geri çekiyorum, ancak bazı okuyucular için (ve yorumların) bilgilendirici olabileceğini umarak bırakıyorum.


Düzenleme : Bu yanıtın daha önceki bir revizyonu [ m ] üzerinde bir monoid işlemi kullanılması önerdi , ancak bir yorumda belirtildiği gibi, bir grup işlemi kullanmak istenir.

Bu cevap, uygulanması kolay karma tablolar için bir karma işlevi oluşturmakla ilgilidir. Kalitede kanıtlanabilir bir garanti beklenmemektedir.

Zaten sonlu bir dizi içinde [bir dizisinin her bir elemanı için bir karma işlev olduğunu varsayarak m ] = {1, ..., m }, ne [her bir elemanın yorumlanması ilgili m sonlu grup bir unsur olarak] G kullanılarak G üzerinde grup çalışması ? [ M ] ila G arasında herhangi bir eşleme kullanabilirsiniz , ancak her öğenin karma değerindeki bilgileri kaybetmemek için eşlemenin amaçsız olması istenir. Grubun değişmeli olmaması da arzu edilir, böylece hash fonksiyonu bir dizideki elemanların sırasındaki farkı yakalayabilir.

Hızlı işlemlere izin veren sonlu gruplar hakkında çok şey bilmiyorum, ama sanırım bu gruplar kodlama teorisinde biliniyor. Simetrik düzen grubunun en az m kullanılması o kadar da kötü olmayabilir.


1
Evet, Tillich-Zemor hashing de matris çarpımı kullanıyor. Önerdiğiniz şey, a Tillich-Zemor'da başka değişiklikler yapılmadan çalışamaz. Örneğin, tekil matrislerden kaçınmalısınız veya karma istatistiklerini bozarak 0'da birikim elde etmelisiniz. Tillich-Zemor bir Galois tarlası üzerinde çalışır; algoritmalarının daha önceki bir versiyonunda sorunlar vardı, çünkü yetersiz istatistiklere sahip bir üreten polinom kullandılar, bu nedenle belirli Galois alanı çok önemli olabilir.
Per Vognsen

@Per: Anlıyorum. Açıklama için teşekkür ederim. Peki sonlu gruplar kullanmaya ne dersiniz? Bunun cevabını değiştirdim.
Tsuyoshi Ito

Katılıyorum. Sonsuz grup aileleri oluşturmanın en iyi yolu, sonlu alanlar üzerinde matris gruplardır (sonlu basit gruplar için sınıflandırma teoremi), bu yüzden bu formun algoritmaları Tillich-Zemor tipinde olacaktır.
Per Vognsen

@Per: Grup teorisine aşina değilim ve sonlu alanlar üzerindeki matris gruplarının neden bu bağlamda simetrik gruplardan daha iyi olduğunu göremiyorum. Bunu biraz açıklayabilir misiniz?
Tsuyoshi Ito

1
Bunun birkaç nedeni var. Birincisi, büyük simetrik gruplarda verimli bir şekilde hesaplayamazsınız ve çarpışma direnci için grupların 2 ^ 128 civarında olmaları gerekir. Aksine, özellikle seyrek bir jeneratör polinomu seçerseniz, karakteristik 2 sonlu alan üzerindeki matrisleri çok verimli bir şekilde hesaplayabilirsiniz; sadece bir grup bit manipülasyonu.
Per Vognsen

1

Neredeyse evrensel hash fonksiyonları ailesi

{ha(x)=aiximodp:aZp}

burada güzel bir özelliği var: , burada " " birleştirme anlamına gelir. Her ağacın kökünde hem hash değerini hem de önbelleğe alırsanız , üzerinde işlemlerinde iki ağacın birleşmesinin karmasını hesaplayabilirsiniz. .a| xha(x)+a|x|ha(y)=ha(xy)a|x|O(1)Zp

Bu hem çağrışımsal hem de oldukça hızlı. Çarpışma olasılığı olduğu . Bkz. "Polinom Karma Fonksiyonları Güvenilir" başlıklı CLRS veya Dietzfelbinger ve ark. O(dk(|x |,|y |)/p)xyO(min(|x|,|y|)/p)


1

Bir çözüm Merkle karma kullanmaktır. Değişmez / kalıcı bir ikili ağaç veri yapısı kullanın. Her bir yaprak düğümüne, o yaprakta bulunan verilerin karmasıyla açıklama ekleyin. Her iç düğüme, iki çocuğundaki karmaların karmasıyla açıklama ekleyin. Başka bir deyişle, , öğelerine sahip bir iç düğümse ve karma değerlerine ek açıklama eklenmişse, iç düğümüne karma değerine açıklama eklemeniz gerekir. , burada bir karma işlevidir. Bu , tüm ağaç işlemlerine oluşturulan düğüm başına yalnızca fazladan iş ekler . Örneğin, iki ağacın zamanında birleştirilmesini destekleyebilirsiniz .ny , y n y = H ( y , y ) H O ( 1 ) O ( lg n )n,ny,yny=H(y,y)HO(1)O(lgn)

Diğer bir yaklaşım değişmeli, çağrışımsal bir karma kullanmaktır. Ağacın kökünü ; burada , ağacın yapraklarındaki değerleri temsil eder . Ardından, değişmeli, ilişkilendirilebilir özelliğe sahip olduğundan emin olmak için /crypto//q/11420/351 adresinde önerilen sağlama işlevi yapılarından birini kullanın . Şimdi iki ağaç verildiğinde, onları birleştirebilir ve kökleri üzerinde hash değerini etkili bir şekilde oluşturabilirsiniz.x 1 , , x m mH(x1,,xm)x1,,xmm

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.