Quanto "strong" è una password generata usando PostgreSQL "random ()"?

0

Devo generare password per la creazione di righe in PostgreSQL. Ho una soluzione come questa:

ALTER TABLE sippeers ALTER secret    
SET DEFAULT trim(both from (encode(decode(md5(random()::text || current_timestamp || random()),'hex'),'base64')), '=');

E le password assomigliano a questo:

select trim(both from (encode(decode(md5(random()::text || current_timestamp || random()),'hex'),'base64')), '=') FROM generate_series(1,15);
         btrim          
------------------------
 MVve5ziDWUweBcNHpZU0zA
 ERPkHr407VvQUoxLNmsg9A
 zi6+zYGTFl5EqxvQTuIfsw
 vXJRb2RJzaikQDXCWYWKFg
 LHfAYJkrFJzKGRR1mAyeqA
 +JQIcr+CkYsFDH6HaGQTeQ
 gEeZjD/6zI5btzRfaKebYw
 Qi7jyLadnQ3FXBYLhU2TaQ
 DR70MoyHHyLHlUmBCj9Lzg
 87gaalFYGgs76N02/CLfLw
 93407RcVXT5+ei9KeuejXA
 C5iONK9ef4jHFrj1oNrxSQ
 +JZaWNtjRFUbdMCGIxdQgw
 3AOUzdeqIL2qS2YfAXSDhg
 +giwgzxkEa6gvman4Ccujw
(15 wierszy)

Conosco random() in non proprio casuale. Non posso usare pgcrypto.

Come saranno generate le password "forti" in questo modo?

    
posta Dariusz Bączkowski 27.05.2017 - 14:59
fonte

2 risposte

2

Secondo questo post , il random di PostgreSQL è un LCG a 48 bit. Ciò significa che ha uno stato a 48 bit e uno stato a 48 bit. Una volta che qualcuno indovina uno di questi, può generare gli stessi numeri come te, quindi anche le stesse password.

Per quanto ne so, in PostgreSQL il seme è sempre lo stesso (a meno che non si chiami setseed). Ciò significa che un utente malintenzionato può creare un elenco di password semplicemente eseguendo la stessa funzione utilizzata per creare le password. Può quindi utilizzare questo elenco per forzare la tua applicazione.

Se un utente malintenzionato ottiene una delle password, è in grado di dedurre tutte le altre password, anche se si esegue il seeding della funzione casuale correttamente.

    
risposta data 28.05.2017 - 10:42
fonte
1

La vera risposta dipenderà dal livello di sicurezza di cui hai bisogno per il tuo sistema. Come giustamente fai notare, questa funzione non porta l'entropia che fa una buona funzione pseudocasuale crittograficamente valida. Ma come dico questo potrebbe essere "abbastanza buono" per il tuo scenario che solo tu conoscerai.

Come nota a margine ho sempre lavorato con i sistemi in cui l'applicazione gestisce il manomissione delle password, suppongo che ci sia un motivo per cui le stai facendo a livello di database

    
risposta data 27.05.2017 - 15:10
fonte

Leggi altre domande sui tag