CubeHash - CubeHash

CubeHash er en kryptografisk hash-funktion, der sendes til NIST hash-funktionskonkurrencen af Daniel J. Bernstein . CubeHash har en 128 byte-tilstand, bruger bred rørkonstruktion og er ARX-baseret . Meddelelsesblokke er XORed i de indledende bits i en 128-byte-tilstand, som derefter gennemgår en r-rund bijektiv transformation mellem blokke. Det oprindelige NIST-forslag ("Cubehash8 / 1") krævede ca. 200 cyklusser pr. Byte . Efter præciseringer fra NIST ændrede forfatteren forslaget til Cubehash16 / 32, som "er cirka 16 gange hurtigere end CubeHash8 / 1, hvilket let fanger op til både SHA-256 og SHA-512 på referenceplatformen" og samtidig opretholder en "behagelig sikkerhedsmargen ".

CubeHash gik videre til anden runde af konkurrencen, men blev ikke valgt som en af ​​de 5 finalister. Bernstein har siden afstemt parametrene yderligere, og hans hovedanbefaling er CubeHash512, defineret som CubeHash16 + 16/32 + 32–512.

Operation

Denne beskrivelse henviser til den seneste specifikation og ikke til NIST-indsendelsen.

CubeHash har 5 parametre, en bestemt forekomst er betegnet med CubeHash i + r / b + f - h .

  • i er antallet af indledende runder
  • r er antallet af runder pr. blok
  • b er blokstørrelsen i byte, defineret for {1, 2, 3, ... 128}
  • f er antallet af sidste runder
  • h er størrelsen på hash-output i bits, defineret for {8, 16, 24, 32, ... 512}

I den originale NIST-indsendelse blev i og f fastsat til 10 r . Den forældede notation CubeHash r / b - h angiver, at jeg og f implicit er 10 r .

Den interne tilstand er defineret som et femdimensionelt matrix af ord (fire-byte heltal), 0-1 i begge dimensioner. Ordene henvises til med deres koordinater [00000] til [11111]. Ordene behandles som lille-endian.

Den interne tilstand initialiseres ved at indstille de første tre ord ([00000], [00001], [00010]) til h / 8, b og r , alle andre ord til nul. Staten køres derefter igennem i runder, og initialiseringsfasen er afsluttet. Staten er nu initialiseringsvektoren (IV). IV kan gemmes og genbruges til en given kombination af h , b , r .

Meddelelsen er polstret og delt til b- byte-blokke. Polstringen tilføjer en 1 bit efterfulgt af så mange 0 bits som nødvendigt for at lave en komplet blok.

Hver blok indgives af XORing til de første b bytes i tilstanden og udfører derefter r runde af transformation.

Endelig er 1 XORed til tilstandsordet [11111], og derefter udføres f transformationsrunder.

Output hash er nu indeholdt i de første h / 8 bytes i denne endelige tilstand.

Rund funktion

Illustration af blandingsfunktion
Blandingsfunktionens ti trin. To af de fem dimensioner rulles ud.

CubeHash runde funktion består af følgende ti trin:

  1. Tilføj x [ 0 jklm] til x [ 1 jklm] modulo 2 32 for hver (j, k, l, m).
  2. Drej x [ 0 jklm] op med 7 bit for hver (j, k, l, m).
  3. Byt x [ 00 klm] med x [ 01 klm] for hver (k, l, m).
  4. Xeller x [ 1 jklm] til x [ 0 jklm] for hver (j, k, l, m).
  5. Byt x [ 1 jk 0 m] med x [ 1 jk 1 m] for hver (j, k, m).
  6. Tilføj x [ 0 jklm] til x [ 1 jklm] modulo 2 32 for hver (j, k, l, m).
  7. Drej x [ 0 jklm] opad med 11 bits for hver (j, k, l, m).
  8. Byt x [ 0 j 0 lm] med x [ 0 j 1 lm] for hver (j, l, m).
  9. Xeller x [ 1 jklm] til x [ 0 jklm] for hver (j, k, l, m).
  10. Byt x [ 1 jkl 0 ] med x [ 1 jkl 1 ] for hver (j, k, l).

Eksempel på hash

Dette eksempel bruger CubeHash80 + 8/1 + 80-512. Initialiseringsvektoren er den samme for alle 80 + 8/1 + f -512 hashes og er som følger:

5df39869c73009fb108994600f1626e6f37c07360c0d8bb53d19cf57b8e74133\ 
5b8034a3eff9892014c4ff315038ef2a391812fe52a440e9a293527d12ca4570\ 
6e0958933470bf814aa4909adb3ec39384e9c314d0db874af21d45bcacb31252\ 
1ce5ab6a3bf6f05de88abbdd0fcfd3fafb8225d546242eada52540095c3da221 

Hashing af ASCII- meddelelsen "Hej" (hex: 0x48, 0x65, 0x6c, 0x6c, 0x6f) bruger 6 meddelelsesblokke. Der er 5 blokke fra meddelelsen, og da dette er en bytejusteret input, er der 1 blok til polstring. 512 bit hash-værdien er:

7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\
8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

En lille ændring i meddelelsen, såsom at vende en enkelt bit, vil vildt ændre hash-output på grund af lavineeffekten . Hashing af meddelelsen "hej" (som kun adskiller sig fra "Hej" i 1 bit position) giver følgende hashværdi:

01ee7f4eb0e0ebfdb8bf77460f64993faf13afce01b55b0d3d2a63690d25010f\
7127109455a7c143ef12254183e762b15575e0fcc49c79a0471a970ba8a66638

Parameterændringer

CubeHash giver mulighed for at bruge mange forskellige parametre til at bestemme hash-output. Det er op til brugeren at beslutte, hvilke parametre de ønsker at bruge. Her er flere eksempler på hashes af forskellige meddelelser ved hjælp af forskellige parametre. Beskederne er alle i ASCII.

message: ""  (the zero-length string)
CubeHash160+16/32+160-512: 4a1d00bbcfcb5a9562fb981e7f7db3350fe2658639d948b9d57452c22328bb32\
                           f468b072208450bad5ee178271408be0b16e5633ac8a1e3cf9864cfbfc8e043a

CubeHash80+8/1+80-512: 90bc3f2948f7374065a811f1e47a208a53b1a2f3be1c0072759ed49c9c6c7f28\
                       f26eb30d5b0658c563077d599da23f97df0c2c0ac6cce734ffe87b2e76ff7294

CubeHash10+1/1+10-512: 3f917707df9acd9b94244681b3812880e267d204f1fdf795d398799b584fa8f1\
                       f4a0b2dbd52fd1c4b6c5e020dc7a96192397dd1bce9b6d16484049f85bb71f2f

CubeHash160+16/32+160-256: 44c6de3ac6c73c391bf0906cb7482600ec06b216c7c54a2a8688a6a42676577d

CubeHash80+8/1+80-256: 38d1e8a22d7baac6fd5262d83de89cacf784a02caa866335299987722aeabc59

CubeHash10+1/1+10-256: 80f72e07d04ddadb44a78823e0af2ea9f72ef3bf366fd773aa1fa33fc030e5cb
message: "Hello"
CubeHash160+16/32+160-512: dcc0503aae279a3c8c95fa1181d37c418783204e2e3048a081392fd61bace883\
                           a1f7c4c96b16b4060c42104f1ce45a622f1a9abaeb994beb107fed53a78f588c

CubeHash80+8/1+80-512: 7ce309a25e2e1603ca0fc369267b4d43f0b1b744ac45d6213ca08e7567566444\
                       8e2f62fdbf7bbd637ce40fc293286d75b9d09e8dda31bd029113e02ecccfd39b

CubeHash10+1/1+10-512: 13cf99c1a71e40b135f5535bee02e151eb4897e4de410b9cb6d7179c677074eb\
                       6ef1ae9a9e685ef2d2807509541f484d39559525179d53838eda95eb3f6a401d

CubeHash160+16/32+160-256: e712139e3b892f2f5fe52d0f30d78a0cb16b51b217da0e4acb103dd0856f2db0

CubeHash80+8/1+80-256: 692638db57760867326f851bd2376533f37b640bd47a0ddc607a9456b692f70f

CubeHash10+1/1+10-256: f63041a946aa98bd47f3175e6009dcb2ccf597b2718617ba46d56f27ffe35d49
message: "The quick brown fox jumps over the lazy dog"
CubeHash160+16/32+160-512: bdba44a28cd16b774bdf3c9511def1a2baf39d4ef98b92c27cf5e37beb8990b7\
                           cdb6575dae1a548330780810618b8a5c351c1368904db7ebdf8857d596083a86

CubeHash80+8/1+80-512: ca942b088ed9103726af1fa87b4deb59e50cf3b5c6dcfbcebf5bba22fb39a6be\
                       9936c87bfdd7c52fc5e71700993958fa4e7b5e6e2a3672122475c40f9ec816ba

CubeHash10+1/1+10-512: eb7f5f80706e8668c61186c3c710ce57f9094fbfa1dbdc7554842cdbb4d10ce4\
                       2fce72736d10b152f6216f23fc648bce810a7af4d58e571ec1b852fa514a0a8e

CubeHash160+16/32+160-256: 5151e251e348cbbfee46538651c06b138b10eeb71cf6ea6054d7ca5fec82eb79

CubeHash80+8/1+80-256: 94e0c958d85cdfaf554919980f0f50b945b88ad08413e0762d6ff0219aff3e55

CubeHash10+1/1+10-256: 217a4876f2b24cec489c9171f85d53395cc979156ea0254938c4c2c59dfdf8a4

Initialiseringsvektorerne for de fire viste varianter er alle også forskellige. For eksempel kan initialiseringsvektoren til CubeHash80 + 8/1 + 80-512 ses ovenfor, og IV for CubeHash80 + 8/1 + 80-256 er:

830b2bd5273d616fd785876a4a500218a5388963eeb702fb47547842459f8d89\
8727a1c8ba40bd48cef47fe82543c2735c033052ae9fcd632d4541bde6b6cb0d\
cb8a9cdf579f5b67b2ae00968180af6e51ebdf0ca597cd2bf91f981f7ab29a62\
01ad72d946e6c075c6d1337e0a293d6f90c438ac38be153f32aa288ffc5eca8a

Sikkerhed

Styrken af ​​denne funktion øges, når b falder mod 1, og når r øges. Så CubeHash 8 / 1-512 er stærkere (mere sikker) end CubeHash 1 / 1-512, og CubeHash 1 / 1-512 er stærkere end CubeHash 1 / 2-512. Den svageste mulige version af denne algoritme er CubeHash 1 / 128- h . Der er dog en sikkerhed i forhold til tidsafvejning. En mere sikker version tager længere tid at beregne en hash-værdi end en svækket version.

Referencer

eksterne links