it-swarm-eu.dev

Jak velká by měla být sůl?

Budu používat scrypt k ukládání hesel v mé aplikaci. Proto budu používat krypto primitiva SHA-256 a Salsa20 (s PBKDF2).

S ohledem na to, jakou velkou sůl mám použít? Mělo by to být stejné jako velikost výstupu SHA-256: 256 bitů nebo by se mělo rovnat počtu bitů, které vezmu z této funkce protahování heslem: 512 bitů?

Vzhledem k tomu, že SSHA, jak ji používá OpenLDAP, obsahuje pouze 32bitovou sůl a Linux crypt () používá 48bitovou sůl, zdá se, že moje soli jsou poměrně velké ...

Obecně: Jaké je pravidlo pro velikost soli?


Příbuzný:

Co by mělo být použito jako sůl?

Co je to dost dobrá sůl pro SaltedHash?

30
Hubert Kario

Soli musí být jedinečné ; to je jejich jediná práce. Měli byste se snažit, jak je to jen možné, nikdy znovu použít hodnotu soli; příležitostné opakované použití je zřídka kritické , ale mělo by se mu stále vyhýbat). U rozumně navržených schémat hesel neexistuje žádná další užitečná vlastnost v solích kromě jedinečnosti; můžete si je však vybrat, pokud nechcete reprodukovat přesně stejnou posloupnost bitů. Jedinečnost musí být chápána po celém světě.

(U špatně navržených schémat hašování hesel může mít sůl některé požadované další vlastnosti, ale pokud použijete schéma špatně navrženého hesla, máte již větší problémy. Všimněte si, že sůl není úplně stejná jako Initialization Vector) pro symetrické šifrování, kde obvykle platí přísné požadavky, jako je nepředvídatelná stejnoměrná náhodnost.)

běžný způsob mít více či méně jedinečných hodnot solí je jejich generování náhodně, s dobrým generátorem (řekněme ten, který je vhodný pro kryptografické použití, jako je /dev/urandom). Pokud je sůl dostatečně dlouhá, jsou rizika kolizí (tj. Opětovné použití hodnoty soli) nízká. Pokud použijete n - bitové soli, šance na kolizi se stanou nezanedbatelnými, jakmile dosáhnete 2n/2 generované hodnoty. Na této planetě je asi 7 miliard lidí a zdá se bezpečné předpokládat, že každý z nich vlastní v průměru méně než 1000 hesel, takže celosvětový počet hashovaných hesel musí být o něco nižší než 242.7. Proto by mělo stačit 86 kousků soli. Protože se nám podobá tzv. „Bezpečnostní rezerva“ a navíc, protože programátoři jen milují síly dvou, pojďme na 128 bity . Podle výše uvedené analýzy je to více než dost, aby byla zajištěna celosvětová jedinečnost s vysokou pravděpodobností, a nic víc chceme od soli než jedinečnosti.

Jedinečnost může být také zajištěna jinými prostředky, např. pomocí zřetězení názvu serveru (celosvětový systém DNS již zajišťuje, aby si každý mohl získat svůj vlastní název serveru, odlišný od jména kohokoli jiného na této planetě) a počítadlo pro celý server. To vyvolává některé praktické problémy, např. udržování hodnoty čítače, která se neopakuje, a to ani v případě nesprávného načasování a restartu serveru a/nebo několika front-endů s vyrovnáváním zátěže. Náhodná sůl s pevnou délkou je snadnější.

33
Thomas Pornin

"Měl by být dlouhý nejméně osm oktetů (64 bitů)." od: http://www.ietf.org/rfc/rfc2898.txt

7
woliveirajr