sql >> Databasteknik >  >> RDS >> Mysql

Är det att jämföra strängar i MySQL sårbart för timingattacker?

Ja, strängjämförelsen (och/eller indexuppslagningen) kan i princip läcka hur många identiska inledande byte lösenords-hashen lagras i databasen och den som beräknas från den angivna lösenordsandelen.

I princip kan en angripare använda detta för att iterativt lära sig ett prefix för lösenordshash, byte för byte:först hittar de en hash som delar sin första byte med hashen i databasen, sedan en som delar sina första två byte och så vidare.

Nej, detta kommer nästan säkert inte att spela någon roll.

Varför? Tja, av ett antal anledningar:

  1. En timingattack kan tillåt angriparen att lära sig en del av användarens lösenordshash. Ett väldesignat lösenordshashingschema (med hjälp av en salt- och key stretching ), bör dock förbli säkra (förutsatt att lösenorden i sig inte är lätta att gissa) även om angriparen känner till hela lösenords-hash. Således, även om timingattacken lyckas, kommer själva lösenorden att vara säkra.

  2. För att utföra attacken måste angriparen skicka in lösenord vars hashvärde de känner till. Hashvärdet beror på saltet. Således, om inte angriparen på något sätt redan känner till saltet, är denna attack inte möjlig.

    (Det är sant att saltet i de flesta säkerhetsanalyser av lösenordshashing antas vara offentlig information. Detta beror dock bara på att sådana analyser antar det värsta scenariot som nämnts ovan, där angriparen redan har skaffat en kopia av hela användardatabasen, salter och hash och allt. Om angriparen ännu inte känner till hashen, finns det ingen anledning att anta att de skulle känna till saltet.)

  3. Även om angriparen känner till saltet, för att utföra den iterativa attacken som beskrivs ovan, måste de generera lösenord som hash till ett värde med ett önskat prefix. För alla säker hashfunktioner är det enda praktiska sättet att göra detta genom att testa ett fel, vilket innebär att tiden som behövs för att göra det skalas exponentiellt med längden på prefixet.

    Vad detta betyder i praktiken är att för att extrahera tillräckligt många bitar av hashen för att kunna utföra en offline brute force attack mot den (som inte behöver vara alla, bara mer än den effektiva mängden entropi i lösenord), angriparen behöver utföra ungefär så mycket beräkning som krävs för att knäcka själva lösenordet. För ett väldesignat lösenordshashingschema och ett säkert valt lösenord är detta inte möjligt.

  4. Vad den iterativa attacken kan ge angriparen, i princip, är förmågan att göra det mesta av brute force-beräkningen lokalt i slutet, samtidigt som du bara skickar ett ganska litet antal lösenord till ditt system. Men även detta gäller bara om de får detaljerad och tillförlitlig tidsinformation tillbaka från var och en lösenord inlämnat. I praktiken är real timing attacker extremt ineffektiva , och kräver många (ofta tusentals eller miljoner) frågor för att ge någon användbar information överhuvudtaget. Detta kommer med stor sannolikhet att eliminera eventuella prestandafördelar som timingattacken kan ge angriparen.

    Den här punkten är förstärkt att du använder ett korrekt hash-schema för nyckelutsträckande lösenord, eftersom sådana system är avsiktligt utformade för att vara långsamma. Strängjämförelsen i databasen kommer därför troligen att ta en försumbar tid jämfört med att hasha lösenordet i första hand, och eventuella tidsvariationer som orsakas av det kommer därmed att gå förlorade i bruset.



  1. lavaral 5 FEL{ (SQLSTATE[HY000] [1045] Åtkomst nekad för användaren 'root'@'localhost' (med lösenord:YES)}

  2. Vad är varaktigheten för referenser och anslutningar i MySQL?

  3. Hur man inaktiverar MySQL strikt läge

  4. Ställer in klasssökvägen för JAR-filer