Hallo!

Als ik wachtwoorden zoals: test hash en controleer met de volgende code:

$password = password_hash(md5(hash('sha256', sha1(md5('test')))), PASSWORD_DEFAULT);


    if (password_verify(md5(hash('sha256', sha1(md5('test')))), $password))
    {
        echo 'test';
    }


Dan zou dit toch hartstikke veilig moeten zijn? Want wie komt er nou achter zulke ritmes (als ik dat bv. 10 keer achter elkaar door elkaar haal).

En van de link https://crackstation.net/hashing-security.htm
snap ik het niet helemaal.

Dus wie zou mij kunnen uitleggen waarom dit niet veilig is?
Waarom zou je nog eens hash(), sha1() en md5() erratum toe willen voegen? Het standaard geheel is al veilig zat. En anders kan je de 'cost' iets ophogen.
Als je een lange hash nog eens door een algoritme voor een kortere hash haalt, maak je het geheel onveiliger.

Als je bijvoorbeeld 10.000 wachtwoorden door een hash met maar 1.000 mogelijke combinaties haalt, houd je niet 10.000 maar slechts 1.000 combinaties over. Iets soortgelijks gebeurt wanneer je md5(sha1(…)) gebruikt: je beperkt het grotere aantal combinaties van SHA-1 tot het kleinere aantal combinaties van MD5.

Daarom is jouw variant md5(hash('sha256', sha1(md5('test')))) technisch eigenlijk gewoon even erg, maar veroorzaakt die daarnaast nog schijnveiligheid: je lijkt sterk te coderen met SHA-256, maar verzwakt de boel tot MD5.
Dit soort dingen vind ik zelf ook altijd lastig te begrijpen.

>> Als je bijvoorbeeld 10.000 wachtwoorden door een hash met maar 1.000 mogelijke combinaties haalt, houd je niet 10.000 maar slechts 1.000 combinaties over.

Ward, mag ik even van de gelegenheid gebruik maken om je te complimenteren met je duidelijke antwoord. Hoe je het hier uitlegt, is erg helder. Een ketting is zo sterk als z'n zwakste schakel ... in dit geval dus die md5.
Maar als ik sha256 nou eerst doe, dan sha1 en dan md5, is het toch juist veiliger?

[size=xsmall]Toevoeging op 04/04/2017 20:37:28:[/size]

Want dan moet een hacker 3 combinaties van 3 verschillende hashes achterhalen, right?
Nee natuurlijk is dat niet veiliger, het maakt voor de volgorde niets uit, alleen de zwakste schakel telt.
Een hacker die sha256 kan achterhalen kan de rest ook achterhalen.
Dan blijf ik gewoon lekker password_hash(ww, PASSWORD_DEFAULT) gebruiken :)
Ik zou voor de zekerheid ook geen PASSWORD_DEFAULT gebruiken, wat zal er namelijk gebeuren als de default verandert? Dan werkt je login routine opeens niet meer met bestaande accounts.
Wat moet ik dan gebruiken?

[size=xsmall]Toevoeging op 04/04/2017 20:46:31:[/size]

PASSWORD_BYCRYPT?
Bcrypt is momenteel de default, dus dat is momenteel gelijk aan wat je toch al had. Wel zo veilig dan dus.
Oké, maar dan wordt het dus password_hash(ww, PASSWORD_BYCRYT) ipv password_hash(ww, PASSWORD_DEFAULT)
Maar is sha256 niet veiliger? Of maakt dat niet zo veel uit?

Reageren