Keccak

Dari BitcoinWiki
Lompat ke: navigasi, cari

Enjoyed the article? Share:


SHA-3 ("'Keccak"') adalah algoritma variabel-bit hashing dikembangkan oleh sebuah kelompok yang dipimpin oleh Joan Dimen pada tahun 2012. Pada 5 Agustus 2015, algoritma ini disetujui dan diterbitkan sebagai FIPS 202 standar. Algoritma Sha-3 berdasarkan prinsip dari kriptografi spons.

Riwayat[sunting]

Pada tahun 2004-2005, beberapa algoritma hashing diserang, termasuk serangan serius terhadap algoritma SHA-1 yang disetujui oleh Institut Nasional Standar dan teknologi (NIST).

Dalam respon, NIST mengadakan seminar terbuka dan mengumumkan kompetisi untuk mengembangkan algoritma hashing baru pada 2 November 2007.

Pada 2 Oktober 2012, pemenang kontes adalah algoritma Korcak dan standardisasi sebagai algoritma SHA-3 baru.

Pada 5 Agustus 2015, algoritma ini disetujui dan diterbitkan sebagai FIPS 202 standar.

Algoritma dikembangkan oleh Guido Bertoni, Joan Dimen, Gilles van Asche dari Stmicroelektronik dan Michael Peters dari NXP.

Algoritmanya didasarkan pada fungsi hash sebelumnya Panama dan Radogatún. Panama dikembangkan oleh Dimen dan Craig Clapp pada tahun 1998, RadioGatún dilaksanakan atas dasar Panama Dimen, Peters dan van Ashe pada tahun 2006.

Selama kontes, kontestan diizinkan untuk membuat perubahan algoritma mereka untuk memperbaiki masalah yang terdeteksi. Perubahan dibuat untuk algoritma Korcak:

  • Jumlah putaran meningkat dari 12 + l ke 12 + 2l;
  • Padding has been changed from a complex shape to a simpler one, explained below;
  • Kecepatan (r) " r " telah ditingkatkan ke batas keamanan (sebelumnya dibulatkan ke kekuatan terdekat dari 2).

Keterangan algoritm[sunting]

Fungsi dari Keccak consists of the berikut: Keccak[r,c](M) {

 Initialization and padding
 for(int x=0; x<5; x++)
   for(int y=0; y<5; y++)
     S[x,y] = 0;
 P = M || 0x01 || 0x00 || … || 0x00;
 P = P xor (0x00 || … || 0x00 || 0x80);
 //Absorbing phase
 forall block Pi in P
 for(int x=0; x<5; x++)
   for(int y=0; y<5; y++)
     S[x,y] = S[x,y] xor Pi[x+5*y];
   S = Keccak-f[r+c](S);
 //Squeezing phase
 Z = empty string;
do
{
 for(int x=0; x<5; x++)
   for(int y=0; y<5; y++)
     if((x+5y)<r/w)  
       Z = Z || S[x,y];
   S = Keccak-f[r+c](S)
}  while output is requested
 return Z;
}

Tahap menyerap[sunting]

Tahap menyerap dapat diwakili sebagai fungsi berikut: Keccak-f[b](A)

{
 forall i in 0…nr-1
   A = Round[b](A, RC[i])
 return A
}
  • Disini b adalah nilai dari fungsi yang dipilih (baku 1600).
  • Dan fungsi putaran () adalah semutasi semu-acak diterapkan pada setiap putaran. Jumlah putaran "' nr "' dihitung dari nilai-nilai r dan c.

Operasi yang dilakukan pada setiap putaran mewakili fungsi berikut: Round[b](A,RC)

{
 θ step
 for(int x=0; x<5; x++)
   C[x] = A[x,0] xor A[x,1] xor A[x,2] xor A[x,3] xor A[x,4];
 for(int x=0; x<5; x++)
   D[x] = C[x-1] xor rot(C[x+1],1);
 for(int x=0; x<5; x++)
   A[x,y] = A[x,y] xor D[x];

 ρ and π steps
 for(int x=0; x<5; x++)
   for(int y=0; y<5; y++)
     B[y,2*x+3*y] = rot(A[x,y], r[x,y]);

 χ step
 for(int x=0; x<5; x++)
   for(int y=0; y<5; y++)
     A[x,y] = B[x,y] xor ((not B[x+1,y]) and B[x+2,y]);

 ι step
 A[0,0] = A[0,0] xor RC

 return A
}Ada 4 langkah pada masing-masing dimana sejumlah tindakan logis dilakukan pada data yang masuk.

Di sini,fungsi membusuk(X, n) menunjukkan pergeseran siklik elemen X oleh posisi n.

R[] array adalah set nilai yang telah ditentukan berapa banyak bytes untuk shift di setiap putaran:

Mekah pertambangan

Lihat juga di BitcoinWiki[sunting]

HitBTC

X16R