Problem med att hitta klo
Problemet att hitta klo är ett klassiskt problem inom komplexitetsteorin , med flera tillämpningar inom kryptografi . Kort sagt, givet två funktioner f , g , betraktade som orakel , är problemet att hitta x och y som f ( x ) = g ( y ). Paret ( x , y ) kallas då en klo . Vissa problem, särskilt inom kryptografi, löses bäst när de ses som ett problem att hitta klös, därför ger alla algoritmiska förbättringar för att lösa problemet att hitta klös en bättre attack mot kryptografiska primitiver som hashfunktioner .
Definition
Låt vara ändliga mängder, och , två funktioner. Ett par kallas en klo om . Problemet att hitta en klo definieras som att hitta en sådan klo, givet att en sådan finns.
Om vi ser som slumpmässiga funktioner, förväntar vi oss att det finns en klo om . Mer exakt, det finns exakt par av formen med ; sannolikheten att ett sådant par är en klo är . Så om , det förväntade antalet klor är minst 1.
Algoritmer
Om klassiska datorer används liknar den bästa algoritmen en Meet-in-the-middle-attack, som först beskrevs av Diffie och Hellman . Algoritmen fungerar enligt följande: anta . För varje sparar du paret i en hashtabell indexerad med . Sedan, för varje , slå upp tabellen vid . Om ett sådant index finns, hittade vi en klo. Detta tillvägagångssätt tar tid och minne .
Om kvantdatorer används, visade Seiichiro Tani att en klo kan hittas i komplexitet .
Shengyu Zhang visade att asymptotiskt är dessa algoritmer de mest effektiva möjliga.
Ansökningar
Som nämnts visas de flesta tillämpningar av problemet med att hitta klo i kryptografi . Exempel inkluderar:
- Kollisionsfynd på kryptografiska hashfunktioner .
- Meet-in-the-midten-attacker : med denna teknik kan k bitar av runda nycklar hittas i tiden ungefär 2 k/2+1 . Här f kryptering halvvägs och g dekrypterar halvvägs. Det är därför Triple DES tillämpar DES tre gånger och inte bara två.