KECCAK, sıfırlarla dolu bir durum dizisi üzerinde nasıl çalışır?

Aug 18 2020

Java'da bir sünger uygulamaya çalışıyorum. Durum, tamamı sıfırlardan oluşan 200 baytlık boş bir dizi olarak başlar. NIST'ten alınan KMAC örnekleri belgesinde aşağıdakiler gerçekleşir:

(siyah çizgi bir pdf sayfa sonudur)

Bunu okuma şeklim, bir grup sıfır içeren bir durumun KECCAK'a gönderilmesi ve ardından görünüşte rastgele verilere sahip bir durumun döndürülmesidir. SHA3 ​​/ KECCAK boş verileri rastgele verilere dönüştürür mü? Burada doğru soruları mı soruyorum? Herhangi bir yardım takdir edilmektedir.

Yanıtlar

7 RubenDeSmet Aug 18 2020 at 17:12

Ben şahsen Keccak.team Psuedo Kod belgesini Keccak-p.

DannyNiu'nun yorumlarda söylediği gibi, çoğu (tümü?) Kriptografik permütasyon "yuvarlak sabitler" kullanır. Bu sabitler Keccak durumunda bir şekilde karıştırılır.

Sözde kod belgesi yuvarlak sabitleri tablo olarak verir:

RC[0]   0x0000000000000001  RC[12]  0x000000008000808B
RC[1]   0x0000000000008082  RC[13]  0x800000000000008B
RC[2]   0x800000000000808A  RC[14]  0x8000000000008089
RC[3]   0x8000000080008000  RC[15]  0x8000000000008003
RC[4]   0x000000000000808B  RC[16]  0x8000000000008002
RC[5]   0x0000000080000001  RC[17]  0x8000000000000080
RC[6]   0x8000000080008081  RC[18]  0x000000000000800A
RC[7]   0x8000000000008009  RC[19]  0x800000008000000A
RC[8]   0x000000000000008A  RC[20]  0x8000000080008081
RC[9]   0x0000000000000088  RC[21]  0x8000000000008080
RC[10]  0x0000000080008009  RC[22]  0x0000000080000001
RC[11]  0x000000008000000A  RC[23]  0x8000000080008008

ve nasıl kullanıldığını açıklar. İota adımında$n^\text{th}$ Keccak-p yuvarlak $n^\text{th}$ yuvarlak sabit $RC[n]$ tanıtılır ve ilk kelime olan ilk şeritte XOR'lanır.

Yuvarlak sabitlerin yanı sıra, Keccak permütasyonu çok iyi bir difüzyona sahiptir: başlangıç ​​durumunda bir yerde tek bir bit, birçok çıktı bitine önemli ölçüde katkıda bulunacaktır.

Her ikisinin kombinasyonu, Keccak permütasyonunuzun çok rastgele göründüğü anlamına gelir . Elbette sıfır entropiyi rasgele çeviremez, çünkü hiçbir sonlu algoritma bunu yapamaz, ancak Keccak'ın amacı etrafındaki şeyleri karıştırmak ve rastgele görünmelerini sağlamaktır.

ThomasM Aug 22 2020 at 21:13

Keccak permütasyon fonksiyonu normal olarak sıfır girişini (tüm bitler 0'dır), eğer iota adımı için değilse, durumdaki bir word'ün sıfır olmayan bir sabit ile XORed olduğu sıfır çıktıya eşler.

Tam yayılma için yaklaşık üç (24) tur yeterlidir, yani durumun her biti, üç tur sonra diğer her biti etkiler. Permütasyonun durumu sekiz kez tamamen karıştırdığı söylenebilir. Bu, eğer sadece bir bit 1 ise, durum üzerinde hızlı bir şekilde yayılacağı anlamına gelir, böylece 3 tur sonra durum bitlerinin yaklaşık yarısı 1 olur.

İzin Vermek $R$makul bir şekilde "düzenli görünümlü" olarak adlandırılabilen durum değerleri kümesi olabilir (tam tanım ne olursa olsun), örneğin bitlerin tümü veya hemen hemen tümü aynı değere sahiptir veya kısa bir bit modeli düzenli olarak tekrar eder. Hepsi arasında$2^{1600}$ eyaletler, içinde olanlar $R$çok küçük bir kesirdir. Herhangi bir eyalette olması pek olası değildir$R$ aynı zamanda bir çıktıya eşlenir $R$. Bu olduğu sürece geçerli$|R| \ll 2^{800}$ (bkz. "doğum günü paradoksu").

Bu, normal görünümlü bir çıktıya eşlenen normal görünümlü bir girdi olmadığı anlamına gelir. Ve herhangi bir durumun, içindeki bir çıktıya eşlenme olasılığı$R$ önemsizdir, yani çıktı her zaman rastgele görünecektir, ancak birisi kasıtlı olarak permütasyonun tersini hesaplayarak girdiyi oluşturur.