Domanda

Sono stato a guardare attraverso affollatissime documentazione hashlib ma non ho trovato nulla a parlare con sale quando hashing dei dati.

aiuto sarebbe grande.

È stato utile?

Soluzione

La risposta di Samir è corretto, ma un po 'criptico. In sostanza, il sale è solo un po 'derivata in modo casuale di dati che si prefisso o Postfix i dati con per aumentare drasticamente la complessità di un attacco di dizionario sul valore di hash. Quindi, dato un s sale e dati d si era appena eseguire le seguenti operazioni per generare un hash salata dei dati:

import hashlib
hashlib.sha512( s + d ).hexdigest()

wikipedia articolo per ulteriori dettagli

Altri suggerimenti

Basta aggiungere il sale per i dati sensibili:

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update('salt')
>>> m.update('sensitive data')
>>> m.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> n = hashlib.sha512()
>>> n.update('%ssensitive data' % 'salt')
>>> n.hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'
>>> hashlib.sha512('salt' + 'sensitive data').hexdigest()
'70197a4d3a5cd29b62d4239007b1c5c3c0009d42d190308fd855fc459b107f40a03bd427cb6d87de18911f21ae9fdfc24dadb0163741559719669c7668d7d587'

La salatura non è un processo magico che le esigenze biblioteca per aiutarvi con: è solo dati aggiuntivi forniti ai tavoli fermata arcobaleno di lavorare.

>>> import hashlib
>>> m = hashlib.sha512()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\xd0\xf4\xc1LH\xadH7\x90^\xa7R\x0c\xc4\xafp\x0fd3\xce\t\x85\xe6\xbb\x87\xb6\xb4a|\xb9D\xab\xf8\x14\xbdS\x96M\xdb\xf5[A\xe5\x81+:\xfe\x90\x89\x0c\nM\xb7\\\xb0Cg\xe19\xfdb\xea\xb2\xe1'
>>> m.update(b"My super-secret salt.")
>>> m.digest()
b'\xcd\xd7K\xd9!~\xa8\x1d6\x9b\xa6\xde\x06\t\x02\xa1+}\xaeNA\x94a`\xaa\xf4\xe9\xb5\xff\x1f\x9cE\x84m\xbb\x98U\xb4z\x92\x9e\xe8\xc9\xc2\xc8\x8f\x068e\xb0\r\xed\xb7\xde\x80\xa6,\n\x111w{\xa2\x9b'

Se siete alla ricerca di un sostituto di crypt (), le versioni più recenti di glibc Hanno SHA-512-based "$ 6 $" con un numero variabile di iterazione (vedi la pagina di Ulrich Drepper , che ha una descrizione e link a una completa implementazione C di sha512_crypt_r()).

Scrivere un proprio crypto è altamente sconsigliabile -. È possibile che questo sha512(salt+password) non aiuta contro un attacco a forza bruta

Per la generazione di sale, l'uso qualcosa come os.urandom(16) per i byte casuali o ''.join(map(lambda x:'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'[ord(x)%64], os.urandom(16))) per caratteri base64-alike casuali (per l'uso con crypt () - alike).

(dico base64-alike non è lo stesso del Base64 in PEM / MIME.)

uso passlib, scrivere il proprio crypto password è un modo quasi sicuro al fallimento.

SHA512 non è un ottimo modo per memorizzare le password hash in questi giorni. Si deve usare bcrypt o qualcosa di simile. Quello che è importante è che la salatura è costruito in e che l'algoritmo ha un fattore significativo di lavoro.

Se ti sale le password SHA512 semplicemente aggiungendo (o anteponendo) il sale per il testo in chiaro, chiunque si metta le mani su una serie di le password hash e applica uno strumento di cracking moderno ( http://arstechnica.com/security/2013/05/how -crackers-make-carne macinata-out-of-your-password / ) sarà in grado di vedere i valori + password salt concatenati e probabilmente, tramite pattern matching banale, essere in grado di separare la porzione di password la porzione di sale per la maggior parte, se non tutti i conti in questione.

Non ho pensato questo attraverso tutta la strada, e io sono in alcun modo un esperto di sicurezza, ma mi sembra che se si dovesse crittografare (utilizzando, ad esempio, AES256) la password utilizzando il sale come il chiave, e quindi hash che con SHA512, saresti al sicuro dalla vulnerabilità che ho descritto sopra.

Tuttavia, a quel punto hai messo in uno sforzo maggiore di quanto sarebbe necessario per passare a bcrypt e ancora non avrebbe la protezione di un fattore di lavoro, quindi vi consiglio solo un approccio del genere se l'ambiente si sta lavorando in non offre questa opzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top