GNU/Linux >> Znalost Linux >  >> Linux

Proč je výstup openssl passwd pokaždé jiný?

> 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

Linux
  1. Správa uživatelů Linuxu pomocí příkazu passwd

  2. Přesměrovat výstup příkazu v „příkazu času“?

  3. Výstup do Stdout a zároveň Grep do souboru?

  1. Proč má Ls -l na výstupu jinou velikost než Ls -s?

  2. Předávání hash pomocí vzdálené plochy

  3. Použití příkazu passwd ze skriptu shellu

  1. jaká je maximální délka hesla v systému unix/linux?

  2. Jak donutím uživatele, aby si změnil heslo při prvním přihlášení pomocí ssh?

  3. Jaký je rozdíl mezi „passwd“ a „chpasswd“?