Evrensel karma - Universal hashing

Gelen matematik ve işlem , genel karma (a randomize algoritma veya veri yapısı) bir seçimi ile ilgilidir hash fonksiyonu belirli bir matematik özelliği olan karma bir fonksiyon ailenin rastgele (tanım için aşağıya bakınız). Bu , veriler bir rakip tarafından seçilse bile , beklentide düşük sayıda çarpışmayı garanti eder . Pek çok evrensel aile bilinmektedir (tamsayıları, vektörleri, dizileri toplamak için) ve bunların değerlendirilmesi genellikle çok verimlidir. Evrensel karma, bilgisayar biliminde, örneğin karma tabloların , rastgele algoritmaların ve kriptografinin uygulanmasında sayısız kullanıma sahiptir .

Giriş

Bazı evrenden anahtarlarını eşlemek istediğiniz varsayalım içine kutuları (etiketli ). Algoritma bazı veri kümesi işlemek zorunda kalacak arasında önceden bilinmemektedir tuşları. Genellikle, karma işlemin amacı, düşük sayıda çarpışma elde etmektir ( aynı bölmedeki o karadan gelen anahtarlar ). Deterministik bir karma işlevi, boyutu ' den büyükse , rakip bir ortamda herhangi bir garanti sunamaz , çünkü rakip tam olarak bir çöp kutusunun ön görüntüsü olmayı seçebilir . Bu, tüm veri anahtarlarının aynı çöp kutusuna düştüğü ve karma işlemini işe yaramaz hale getirdiği anlamına gelir. Ayrıca, deterministik bir hash fonksiyonu yeniden hashlemeye izin vermez : bazen girdi verileri hash fonksiyonu için kötü olur (örneğin, çok fazla çarpışma vardır), bu nedenle hash fonksiyonunu değiştirmek isteyebilirsiniz.

Bu problemlerin çözümü, bir özet fonksiyon ailesinden rastgele bir fonksiyon seçmektir. Bir işlev ailesine, eğer, evrensel aile denir .

Başka bir deyişle, evrenin herhangi iki anahtarı, en fazla , hash fonksiyonu rastgele çekildiğinde olasılık ile çarpışır . Bu tam olarak, eğer hash fonksiyonu her anahtara gerçekten rastgele hash kodları atasaydı, bekleyeceğimiz çarpışma olasılığıdır. Bazen tanım, çarpışma olasılığına izin verecek şekilde gevşetilir . Bu kavram, 1977'de Carter ve Wegman tarafından tanıtıldı ve bilgisayar biliminde çok sayıda uygulama buldu (örneğin bkz. Çarpışma olasılığının bir üst sınırına sahipsek , neredeyse evrenselliğe sahip olduğumuzu söyleriz .

Hepsi olmasa da çoğu evrensel aile aşağıdaki daha güçlü tek biçimli fark özelliğine sahiptir :

Zaman aileden rasgele çekilir , fark eşit dağıtılır .

Evrensellik tanımının yalnızca çarpışmaları sayan olup olmadığına ilişkin olduğuna dikkat edin . Tekdüze fark özelliği daha güçlüdür.

(Benzer şekilde, bir evrensel aile XOR evrensel olabilir , eğer değer , bit düzeyinde dışlayıcı veya işlemin olduğu yerde düzgün bir şekilde dağıtılır . Bu, yalnızca ikinin kuvveti olduğunda mümkündür .)

Daha da güçlü bir koşul, ikili bağımsızlıktır : Herhangi bir karma değer çiftine hash olma olasılığımız tamamen rastgeleymiş gibi olduğunda bu özelliğe sahibiz : . İkili bağımsızlığa bazen güçlü evrensellik denir.

Diğer bir özellik ise tekdüzeliktir. Tüm hash değerleri eşit derecede olasıysa, bir ailenin tek tip olduğunu söylüyoruz: herhangi bir hash değeri için . Evrensellik tekdüzelik anlamına gelmez. Bununla birlikte, güçlü evrensellik tekdüzelik anlamına gelir.

Tekdüze uzaklık özelliğine sahip bir aile verildiğinde , hash fonksiyonlarına değerleri olan tekdüze dağılmış bir rastgele sabit eklenerek ikili bağımsız veya güçlü evrensel bir karma aile üretilebilir . (Benzer şekilde, eğer ikinin gücü ise, bir XOR evrensel karma ailesinden, özel veya tek biçimli bir rastgele sabit kullanarak ikili bağımsızlık elde edebiliriz.) Bir sabitle kaydırma bazen uygulamalarda önemsiz olduğundan (örn. karma tabloları) , düzgün mesafe özelliği ile ikili bağımsız arasında dikkatli bir ayrım bazen yapılmaz.

Bazı uygulamalar için (karma tabloları gibi), özet değerlerinin en az anlamlı bitlerinin de evrensel olması önemlidir. Bir aile güçlü evrensel olduğunda, bu garanti: eğer bir kuvvetle evrensel bir ailedir , daha sonra fonksiyondan oluşan aile tümü için de için kuvvetle evrenseldir . Ne yazık ki, aynısı (sadece) evrensel aileler için geçerli değildir. Örneğin, kimlik işlevinden oluşan aile açıkça evrenseldir, ancak işlevden oluşan aile evrensel olamaz.

UMAC ve Poly1305-AES ve diğer birkaç mesaj doğrulama kodu algoritması, evrensel karmaya dayalıdır. Bu tür uygulamalarda yazılım, her mesaj için o mesaj için benzersiz bir nonce'ye dayalı olarak yeni bir karma işlevi seçer.

Birkaç karma tablo uygulaması, evrensel karmaya dayalıdır. Bu tür uygulamalarda, tipik olarak yazılım, yalnızca "çok fazla" anahtarın çarpıştığını fark ettikten sonra yeni bir karma işlevi seçer; o zamana kadar aynı hash fonksiyonu tekrar tekrar kullanılmaya devam eder. ( Dinamik mükemmel karma gibi bazı çarpışma çözümleme şemaları, her çarpışma olduğunda yeni bir karma işlevi seçer. Guguklu karma ve 2 seçenekli karma gibi diğer çarpışma çözümleme şemaları, yeni bir karma işlevi seçmeden önce bir dizi çarpışmaya izin verir. ). Tamsayılar, vektörler ve diziler için bilinen en hızlı evrensel ve güçlü evrensel karma işlevlerin bir araştırması burada bulunur.

Matematiksel garantiler

Herhangi bir sabit seti için bir evrensel ailesini kullanarak tuşları, aşağıdaki özellikleri garanti eder.

  1. Herhangi bir sabit için de , çöpe tuşların beklenen sayı olduğu . Zincirleme yoluyla karma tabloları uygularken , bu sayı, anahtarı içeren bir işlemin (örneğin bir sorgu, ekleme veya silme) beklenen çalışma süresiyle orantılıdır .
  2. Şifreler çiftlerinin beklenen sayısı olarak sahip olduğu çarpmasıyla, ( ) yukarıda sınırlanan düzenin olan . Binlerin sayısı lineer olarak seçildiğinde (yani, içindeki bir fonksiyon tarafından belirlenir ), beklenen çarpışma sayısı 'dir . Çöp kutularına girerken , en az yarım olasılıkla hiçbir çarpışma olmaz.
  3. En azından içinde anahtar bulunan kutulardaki beklenen anahtar sayısı yukarıda ile sınırlandırılmıştır . Böylece, her bir kutunun kapasitesi ortalama boyutun ( ) üç katı ile sınırlandırılırsa , taşan kutulardaki toplam anahtar sayısı en fazla . Bu yalnızca, çarpışma olasılığı yukarıda ile sınırlanan bir karma ailesi için geçerlidir . ile sınırlayarak daha zayıf bir tanım kullanılırsa , bu sonuç artık doğru değildir.

Yukarıdaki garantiler herhangi bir sabit küme için geçerli olduğundan, veri kümesi bir rakip tarafından seçilirse geçerlidir. Ancak, düşmanın bu seçimi algoritmanın rastgele bir karma işlevi seçiminden önce (veya bundan bağımsız olarak) yapması gerekir. Düşman algoritmanın rastgele seçimini gözlemleyebilirse, rastgelelik hiçbir işe yaramaz ve durum deterministik karma ile aynıdır.

İkinci ve üçüncü garanti tipik olarak yeniden hasat etme ile birlikte kullanılır . Örneğin, birkaç çarpışmayı ele almak için rastgele bir algoritma hazırlanabilir . Çok fazla çarpışma gözlemlerse , aileden rastgele bir tane daha seçer ve tekrar eder. Evrensellik, tekrar sayısının geometrik bir rastgele değişken olmasını garanti eder .

İnşaatlar

Herhangi bir bilgisayar verisi bir veya daha fazla makine kelimesi olarak temsil edilebildiğinden, genellikle üç tür etki alanı için karma fonksiyonlara ihtiyaç duyulur: makine kelimeleri ("tamsayılar"); makine kelimelerinin sabit uzunluklu vektörleri; ve değişken uzunluklu vektörler ("dizeler").

Hashing tamsayıları

Bu bölüm, makine sözcüklerine uyan tamsayıları karma durumuna atıfta bulunur; bu nedenle çarpma, toplama, bölme vb. işlemler ucuz makine düzeyinde komutlardır. Hash edilecek evren olsun .

Carter ve Wegman'ın orijinal önerisi bir asal seçmek ve tanımlamaktı.

modulo ile rastgele seçilen tamsayılar nerede . (Bu, lineer uyumlu bir üretecin tek bir yinelemesidir .)

Bunun evrensel bir aile olduğunu görmek için , yalnızca şu durumlarda geçerli olduğuna dikkat edin:

ve arasında bir tam sayı için . Yana ise, onların fark sıfır olmadığı ve ters modulo sahiptir . İçin çözme verimleri

.

Sağ taraf için ( hariç tutulduğundan) ve izin verilen aralıkta değişen olası sıfır olmayan değerler için olası seçenekler vardır . Böylece çarpışma olasılığı

.

Evrensel bir aileyi görmenin başka bir yolu da istatistiksel uzaklık kavramıdır . Farkı olarak yazın

.

Yana sıfır olmadığı ve eşit şekilde dağıtılır , bu aşağıdaki modulo da eşit dağıtılır . Bu nedenle dağılımı , numuneler arasındaki olasılık farkı kadar, neredeyse tekdüzedir . Sonuç olarak, tek tip bir aileye istatistiksel uzaklık , olduğunda ihmal edilebilir hale gelir .

Daha basit hash fonksiyonları ailesi

sadece yaklaşık olarak evrenseldir: herkes için . Ayrıca, bu analiz neredeyse sıkıdır; Carter ve Wegman bunu her zaman gösteriyor .

Modüler aritmetikten kaçınma

Tamsayıları karıştırmak için tekniğin en son durumu, Dietzfelbinger ve diğerleri tarafından açıklanan çoklu vardiya şemasıdır. Modüler aritmetikten kaçınarak, bu yöntemin uygulanması çok daha kolaydır ve pratikte önemli ölçüde daha hızlı çalışır (genellikle en az dört kat). Şema, kutu sayısının ikinin kuvveti olduğunu varsayar . Bir makine sözcüğündeki bit sayısı olsun . Daha sonra hash fonksiyonları, tek pozitif tamsayılar (bir bit kelimesine uyan) üzerinden parametrelendirilir . Değerlendirmek çarpın tarafından modülo ve sonra yüksek mertebeden tutmak karma kodu olarak bitlerini. Matematiksel gösterimde, bu

ve C benzeri programlama dillerinde şu şekilde uygulanabilir :

(size_t) (a*x) >> (w-M)

Bu düzen yok değil üniforma fark özelliğini tatmin ve sadece -neredeyse-evrensel ; herhangi için , .

Durumunda, verilen uyarı hash fonksiyonu davranışını anlamak ve aynı yüksek sipariş 'M' bit olması, daha sonra en yüksek mertebeden M bitleri gibi tüm 1'ler veya tüm 0'lar ya sahiptir (olmadığına bağlı veya büyüktür). En az anlamlı set bitinin pozisyonda göründüğünü varsayın . Yana rasgele tek tamsayıdır ve tek tam sayı olarak tersleri sahip halka , aşağıdaki homojen arasında dağıtılacak konumda en az önemli bit kümesi ile -bit tamsayılar . Bu bitlerin tümünün 0'lar veya tüm 1'ler olma olasılığı bu nedenle en fazla . Öte yandan, eğer , o zaman yüksek dereceli M bitleri hem 0'ları hem de 1'leri içerir, bu nedenle . Son olarak, eğer bu durumda bit arasında 1 olduğu ve eğer bit yalnızca olasılıkla olur ki, aynı zamanda 1 olduğu .

Bu analiz, örnekte gösterilebileceği gibi sıkıdır ve . Gerçekten 'evrensel' bir karma işlevi elde etmek için çarpma-ekleme-kaydırma şeması kullanılabilir.

C benzeri programlama dillerinde uygulanabilen

(size_t) (a*x+b) >> (w-M)

ile rastgele bir tek pozitif tam sayı ve ile rastgele negatif olmayan bir tam sayıdır . Bu seçimlerle ve , herkes için . Bu, İngilizce makaledeki yanlış çeviriden biraz ama önemli ölçüde farklıdır.

vektörler

Bu bölüm, makine sözcüklerinin sabit uzunlukta bir vektörünün hash edilmesiyle ilgilidir. Bir vektör olarak giriş yorumlama ve makine kelime (tamsayılardır bit) ekstrakte edildi. Tek tip fark özelliğine sahip bir evrensel aile ise, aşağıdaki aile (Carter ve Wegman'a kadar uzanan) aynı zamanda tek tip fark özelliğine sahiptir (ve dolayısıyla evrenseldir):

, burada her biri bağımsız olarak rastgele seçilir.

İkinin gücü ise, toplama, özel veya ile değiştirilebilir.

Pratikte, eğer çift kesinlikli aritmetik mevcutsa, bu, çok vardiyalı hash fonksiyonlarının hash ailesi ile somutlaştırılır. Her bir bit üzerinde rastgele tek tamsayılardan oluşan bir vektörle karma işlevini başlatın . O zaman kutu sayısı için ise :

.

Pratikte kabaca iki kat hızlanma anlamına gelen çarpma sayısını yarıya indirmek mümkündür. Her bir bit üzerinde rastgele tek tamsayılardan oluşan bir vektörle karma işlevini başlatın . Aşağıdaki karma ailesi evrenseldir:

.

Çift duyarlıklı işlemler mevcut değilse, girdi yarım sözcüklerden ( -bit tamsayılar) oluşan bir vektör olarak yorumlanabilir . Algoritma daha sonra vektördeki yarım kelimelerin sayısı olan çarpmaları kullanır . Böylece, algoritma, girdi kelimesi başına bir çarpma "hızında" çalışır.

Aynı şema, bitlerini bayt vektörleri olarak yorumlayarak tam sayıların hash edilmesi için de kullanılabilir. Bu varyantta, vektör tekniği tablolama karma olarak bilinir ve çarpma tabanlı evrensel karma şemalara pratik bir alternatif sağlar.

Yüksek hızda güçlü evrensellik de mümkündür. Bitler üzerindeki rastgele tamsayılardan oluşan bir vektörle karma işlevini başlatın . hesaplama

.

Sonuç, bitlerde güçlü bir şekilde evrenseldir . Deneysel olarak, son Intel işlemcilerde bayt başına 0,2 CPU döngüsünde çalıştığı bulundu .

Hashing dizeleri

Bu, değişken boyutlu bir makine sözcükleri vektörünün hash edilmesi anlamına gelir . Dizinin uzunluğu küçük bir sayı ile sınırlandırılabiliyorsa, vektör çözümünü yukarıdan kullanmak en iyisidir (kavramsal olarak vektörü üst sınıra kadar sıfırlarla doldurmak). Gerekli alan, dizenin maksimum uzunluğudur, ancak değerlendirme süresi yalnızca . Dizede sıfırlar yasak olduğu sürece, karma işlevi değerlendirilirken evrenselliği etkilemeden sıfır doldurma göz ardı edilebilir. Dizede sıfırlara izin veriliyorsa, doldurmadan önce tüm dizelere sıfırdan farklı bir hayali (örn. 1) karakter eklemek en iyisi olabilir: bu, evrenselliğin etkilenmemesini sağlayacaktır.

Şimdi , iyi bir sınırın önceden bilinmediği yerde hash istediğimizi varsayalım . Tarafından önerilen evrensel bir aile, dizeyi bir polinom modulo büyük bir asalın katsayıları olarak ele alır . Eğer , asal olsun ve tanımlayın:

burada tek tip rastgeledir ve evrensel bir aile eşleme tamsayı etki alanından rastgele seçilir .

Modüler aritmetiğin özelliklerini kullanarak, büyük diziler için büyük sayılar üretilmeden yukarıdaki gibi hesaplanabilir:

uint hash(String x, int a, int p)
	uint h = INITIAL_VALUE
	for (uint i=0 ; i < x.length ; ++i)
		h = ((h*a) + x[i]) mod p
	return h

Bu Rabin-Karp yuvarlanan hash , lineer uyumlu bir üreteci temel alır . Yukarıdaki algoritma, Çarpımsal karma işlevi olarak da bilinir . Pratikte, mod operatörü ve p parametresi , birçok programlama dilinde mod ( Max-Int-Value + 1) ile eşdeğer olduğundan, tamsayı taşmasına izin verilerek tamamen önlenebilir . Aşağıdaki tablo, bazı popüler uygulamalar için h ve a'yı başlatmak için seçilen değerleri gösterir .

uygulama BAŞLANGIÇ DEĞERİ bir
Bernstein'ın karma işlevi djb2 5381 33
STLPort 4.6.2 0 5
Kernighan ve Ritchie'nin karma işlevi 0 31
java.lang.String.hashCode() 0 31

İki dize düşünün ve daha uzun olanın uzunluğu olsun ; analiz için, daha kısa dize kavramsal olarak uzunluğa kadar sıfırlarla doldurulur . Uygulamadan önceki bir çarpışma , bunun katsayılı polinomun bir kökü olduğunu ima eder . Bu polinomun en fazla modulo kökü vardır , dolayısıyla çarpışma olasılığı en fazla olur . Rastgele çarpışma olasılığı, toplam çarpışma olasılığını . Bu nedenle, asal , hash edilen dizelerin uzunluğuna kıyasla yeterince büyükse, aile evrensele çok yakındır ( istatistiksel uzaklık olarak ).

Bilinmeyen uzunluktaki dizeleri sabit uzunluktaki özet değerlere hash etmek için kullanılan diğer evrensel hash fonksiyonları aileleri arasında Rabin parmak izi ve Buzhash bulunur .

Modüler aritmetikten kaçınma

Modüler aritmetiğin hesaplama cezasını azaltmak için pratikte üç numara kullanılır:

  1. Biri , Mersenne üssü gibi, ikinin kuvvetine yakın olacak şekilde asal seçilir . Bu, aritmetik modulo'nun bölme olmaksızın uygulanmasına izin verir (toplama ve kaydırma gibi daha hızlı işlemler kullanılarak). Örneğin, modern mimarilerde 'ler 32-bit değerler iken, ile çalışılabilir .
  2. Bloklara vektör karması uygulanabilir. Örneğin, dizenin her 16 kelimelik bloğuna vektör karma işlemi uygulanır ve sonuçlara dize karma işlemi uygulanır . Daha yavaş dizi hash işlemi büyük ölçüde daha küçük bir vektöre uygulandığından, bu esasen vektör hash işlemi kadar hızlı olacaktır.
  3. Biri, bölen olarak ikinin kuvveti seçilerek , aritmetik modulonun bölünme olmaksızın uygulanmasına izin verilir (daha hızlı bit maskeleme işlemleri kullanılarak ). NH karma fonksiyonlu ailesi bu yaklaşım getiriyor.

Ayrıca bakınız

Referanslar

  1. ^ a b c d e Carter, Larry; Wegman, Mark N. (1979). "Karma Fonksiyonların Evrensel Sınıfları" . Bilgisayar ve Sistem Bilimleri Dergisi . 18 (2): 143–154. doi : 10.1016/0022-0000(79)90044-8 . STOC'77'deki konferans versiyonu.
  2. ^ Miltersen, Peter Bro. "Evrensel Karma" (PDF) . Arşivlenmiş orijinal (PDF) 24 Mayıs 2011 tarihinde . Erişim tarihi: 24 Haziran 2009 .
  3. ^ Motwani, Rajeev; Raghavan, Prabhakar (1995). Rastgele Algoritmalar . Cambridge Üniversitesi Yayınları. s. 221. ISBN'si  0-521-47465-5.
  4. ^ David Wagner, ed. "Kriptolojideki Gelişmeler - CRYPTO 2008" . s. 145.
  5. ^ Jean-Philippe Aumasson, Willi Meier, Raphael Phan, Luca Henzen. "Karma İşlev BLAKE" . 2014. s. 10.
  6. ^ Thorup, Mikkel (2015). "Tamsayılar ve Dizeler için Yüksek Hızlı Hashing". arXiv : 1504.06804 [ cs.DS ].
  7. ^ a b Baran, İlya; Demaine, Erik D.; Patraşcu, Mihai (2008). "3SUM için İkinci dereceden Algoritmalar" (PDF) . algoritma . 50 (4): 584-596. doi : 10.1007/s00453-007-9036-3 .
  8. ^ Dietzfelbinger, Martin; Hagerup, Torben; Katajainen, Jyrki; Penttonen, Martti (1997). "En Yakın Çift Problemi için Güvenilir Bir Rastgele Algoritma" (Postscript) . Algoritmalar Dergisi . 25 (1): 19–51. doi : 10.1006/jagm.1997.0873 . Erişim tarihi: 10 Şubat 2011 .
  9. ^ Thorup, Mikkel . "SODA'da ders kitabı algoritmaları" .
  10. ^ Woelfel, Philipp (2003). Über die Komplexität der Multiplikation in eingeschränkten Branchingprogrammmodellen (PDF) (Ph.D.). Universität Dortmund . Erişim tarihi: 18 Eylül 2012 .
  11. ^ Woelfel, Philipp (1999). Verimli Güçlü Evrensel ve Optimal Evrensel Hashing . Bilgisayar Biliminin Matematiksel Temelleri 1999. LNCS. 1672 . s. 262–272. doi : 10.1007/3-540-48340-3_24 .
  12. ^ a b c d Thorup, Mikkel (2009). Doğrusal yoklama için dize karması . Proc. 20. ACM-SIAM Ayrık Algoritmalar Sempozyumu (SODA) . s. 655-664. CiteSeerX 10.1.1.215.4253 . doi : 10.1137/1.9781611973068.72 .  , bölüm 5.3
  13. ^ a b Dietzfelbinger, Martin; Gil, Yusuf; Matias, Yossi; Pippenger, Nicholas (1992). Polinom Hash Fonksiyonları Güvenilirdir (Genişletilmiş Özet) . Proc. 19. Uluslararası Otomatlar, Diller ve Programlama Kolokyumu (ICALP) . s. 235–246.
  14. ^ Siyah, J.; Halevi, S.; Krawczyk, H.; Krovetz, T. (1999). UMAC: Hızlı ve Güvenli Mesaj Kimlik Doğrulaması (PDF) . Kriptolojideki Gelişmeler (CRYPTO '99) . , Denklem 1
  15. ^ Patraşcu, Mihai ; Thorup, Mikkel (2011). Basit tablolama karmasının gücü . Bilgi İşlem Teorisi üzerine 43. yıllık ACM Sempozyumu Tutanakları (STOC '11) . s. 1–10. arXiv : 1011.5200 . doi : 10.1145/1993636.1993638 .
  16. ^ a b Kaser, Owen; Lemire, Daniel (2013). "Güçlü evrensel dize karma hızlıdır". Bilgisayar Dergisi . Oxford Üniversitesi Yayınları. 57 (11): 1624-1638. arXiv : 1202.4961 . doi : 10.1093/comjnl/bxt070 .
  17. ^ "İbranice Üniversite Ders Slaytları" (PDF) .
  18. ^ Robert Uzgalis. "Kütüphane Karma İşlevleri" . 1996.
  19. ^ Kankovski, Peter. "Karma işlevleri: ampirik bir karşılaştırma" .
  20. ^ Yiğit, Ozan. "Dize karma işlevleri" .
  21. ^ Kernighan; Ritchie (1988). "6". C Programlama Dili (2. baskı). sayfa  118 . ISBN'si 0-13-110362-8.CS1 bakımı: birden çok ad: yazar listesi ( bağlantı )
  22. ^ "Dize (Java Platformu SE 6)" . docs.oracle.com . 2015-06-10 alındı .

daha fazla okuma

Dış bağlantılar