> openssl passwd -1 "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
Toto je rozšířené crypt(3)
ve stylu Unixu syntaxe hash hesla, konkrétně jeho verze MD5.
První $1$
identifikuje typ hash, další část OKgLCmVl
je sůl použitá při šifrování hesla, za oddělovačem $
znak na konec řádku je skutečný hash hesla.
Pokud tedy vezmete solnou část z prvního šifrování a použijete ji s následujícími, měli byste vždy získat stejný výsledek:
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
Když měníte heslo , měli byste vždy přejít na novou sůl. Tím se zabrání tomu, aby někdo následně zjistil, zda nové heslo bylo skutečně stejné jako to staré. (Pokud chcete zabránit opětovnému použití starých hesel, můžete samozřejmě nového kandidáta na heslo zahašovat dvakrát:jednou se starou solí a poté, pokud se výsledek liší od starého hesla, a tedy přijatelný, znovu s novým sůl.)
Pokud používáte openssl passwd
bez možnosti získáte původní crypt(3)
-kompatibilní hash, jak popisuje dave_thompson_085. Sůl jsou dvě první písmena hash:
> openssl passwd "a"
imM.Fa8z1RS.k
> openssl passwd -salt "im" "a"
imM.Fa8z1RS.k
Tento starý hashovací styl byste neměli používat v žádné nové implementaci, protože omezuje efektivní délku hesla na 8 znaků a má příliš málo soli, aby dostatečně chránil před moderními metodami.
(Kdysi jsem vypočítal množství dat potřebných k uložení celé sady duhových tabulek pro každý klasický crypt(3)
hash. Přesný výsledek si nepamatuji, ale za předpokladu, že mé výpočty byly správné, šlo o řádově „skromný stoh víceterabajtových disků“. Podle mého názoru to patří do rozsahu „organizovaní zločinci by to mohli udělat“.)
Na rozdíl od normálních hashů heslo hash by měl používat 'salt' a by měla být pomalá (obvykle iterací), aby zabránila útočníkovi, který získá hash(e), snadno obnovit hesla. Viz canonical na security.SX a mnoho s ním souvisejících.
Původní krypta ze 70. let (3), nyní pro srozumitelnost nazývaná DEScrypt, je (lehce) solená :
sůl je dvouznakový řetězec vybraný z množiny [a-zA-Z0-9./]. Tento řetězec se používá k narušení algoritmu jedním ze 4096 různých způsobů.
O něco novější schéma MD5crypt je osolené a iterované, ale neodpovídá moderním standardům. Obě tato a některá z lepších schémat, která je nahradila na Unixech, jsou podrobně popsány v https://en.wikipedia.org/wiki/Crypt_%28C%29.
Uživatel muru má pravdu. Heslo je osolené.
Můžete přidat volbu -salt string
sebe a hash zůstane stejný.
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142