Domanda Come posso calcolare la sicurezza della mia password?

  • Autore discussione Utente cancellato 259357
  • Data d'inizio
Stato
Discussione chiusa ad ulteriori risposte.
U

Utente cancellato 259357

Ci sono siti come questo qui che mi possono dire quanto tempo ci vorrebbe per craccare la mia password. Ma io mi chiedo il calcolo che si deve fare! Poiché ho scritto una funzione in Python che accetta password con determinati criteri, volevo quindi crearne un altra che dispone il tempo per craccare la password. Perciò sto cercando il calcolo. Non voglio cercare api o librerie perché voglio scrivere il codice da me siccome sono nuovo in Python e voglio migliorare.

37376
 
  • Mi piace
Reazioni: Herikka5566
37378


Questa è una interessantissima tabella che descrive i tempi mediamente necessari per crackare una password.
Chiaramente più si allungano i tempi più la password è complessa e tendenzialmente più sicura.
In ogni caso per testare la tua password devi fare dei test di cracking.
 
  • Mi piace
Reazioni: Herikka5566
Visualizza allegato 37378

Questa è una interessantissima tabella che descrive i tempi mediamente necessari per crackare una password.
Chiaramente più si allungano i tempi più la password è complessa e tendenzialmente più sicura.
In ogni caso per testare la tua password devi fare dei test di cracking.
Quindi non c'è un calcolo matematico? Perché proprio volevo dare risposte basate sui caratteri e la lunghezza della password rispetto a una risposta che prende in considerazione solo la lunghezza.
 
aggiungerei anche che, se la password oltre ad essere lunga contiene anche, numeri e caratteri speciali, il tempo indicato sulla tabella pubblicata da LupoBianco aumenta considerevolmente.
 
Non potrai avere un calcolo preciso perché ci sono moltissimi metodi per ricavate una password, se qualcuno buca un sito dove ti sei registrato e tenevano le password in hash MD5 non importa quanto sarà forte, ricavare la password in chiaro da un hash MD5 è molto più veloce che attaccando il sito direttamente o di trovarla da altri hash più sicuri, inoltre la potenza di computazione media aumenta di continuo quindi anche se prendessi quella come modello per calcolare un tempo medio non rimannerrebbe accurato per molto.

Il sito che hai linkato tu è open source e può essere integrato come libreria in altre applicazioni, l'unica limitazione è che è scritto in JS, altrimenti potresti tranquillamente usarla all'interno del tuo programma.
 
Non potrai avere un calcolo preciso perché ci sono moltissimi metodi per ricavate una password, se qualcuno buca un sito dove ti sei registrato e tenevano le password in hash MD5 non importa quanto sarà forte, ricavare la password in chiaro da un hash MD5 è molto più veloce che attaccando il sito direttamente o di trovarla da altri hash più sicuri, inoltre la potenza di computazione media aumenta di continuo quindi anche se prendessi quella come modello per calcolare un tempo medio non rimannerrebbe accurato per molto.

Il sito che hai linkato tu è open source e può essere integrato come libreria in altre applicazioni, l'unica limitazione è che è scritto in JS, altrimenti potresti tranquillamente usarla all'interno del tuo programma.
aggiungerei anche che, se la password oltre ad essere lunga contiene anche, numeri e caratteri speciali, il tempo indicato sulla tabella pubblicata da LupoBianco aumenta considerevolmente.
Visualizza allegato 37378

Questa è una interessantissima tabella che descrive i tempi mediamente necessari per crackare una password.
Chiaramente più si allungano i tempi più la password è complessa e tendenzialmente più sicura.
In ogni caso per testare la tua password devi fare dei test di cracking.


Grazie mille a tutti per le risposte!
 
  • Mi piace
Reazioni: lupobianco
Il numero di tentativi è simboli ^ lunghezza (elevazione a potenza, operatore ** in python). Il tempo per effettuare un tentativo dipende dall'hardware (principalmente dalle gpu) e dal software (funzioni di hash), ma è una costante che puoi stimare per difetto (per rappresentare un hardware molto buono). In crittografia generalmente si parla di tempo medio, quindi devi dividere per 2 il risultato che otterrai.

Facciamo un esempio:
  • è formata da a-z, A-Z, 0-9 (26 + 26 + 10 = 62 simboli);
  • è lunga 6 simboli;
  • quindi abbiamo 62^6 = 56800235584 possibili password;
  • dobbiamo provarne più della metà (56800235584 / 2 = 28400117792) per iniziare ad avere una probabilità favorevole (più del 50%) di trovare quella della nostra vittima;
  • tra hardware e software, abbiamo fatto un benchmark che ci dice che siamo in grado di calcolare circa 1 milione di password al secondo;
  • il tempo (medio) per trovare la password della nostra vittima è di 28400117792 / 1000000 = 28400 secondi = 8 ore;
  • se al posto essere lunga 6 simboli fosse lunga 7 il tempo necessario sarebbe di circa 20 giorni, se fosse lunga 8 il tempo sale a 3 anni e mezzo.
Adesso è chiaro che 1 milione di password al secondo è un numero totalmente inventato, ma vediamo cosa succede se prendo un hardware 100 volte migliore (100 milioni di password al secondo):
  • 6 caratteri richiedono 5 secondi;
  • 7 caratteri richiedono 5 ore;
  • 8 caratteri richiedono 12 giorni;
  • 9 caratteri sono 2 anni.
Quindi un errore grossolano mi porta a consigliarti una password 1 carattere più corto: dal punto di vista dell'utente non fa tutta sta grossa differenza visto non gli stiamo consigliando di mettere password lunghissime, gli stiamo consigliando di aggiungere un altro carattere. Se avessimo più di 62 possibili caratteri, l'impatto dell'hardware e del software sarebbe ancora meno rilevante.

Se vuoi un'idea, diciamo stimare la velocità di un computer con 1 milione di password al secondo (come ho fatto primo esempio) può essere accettabile. Visto che stai scrivendo un programmino, magari segnala la scelta di default all'utente e permettigli di inserire un numero a suo piacimento.

È irrilevante avere i numeri precisi, all'utente non frega niente se al posto di 3 anni sono 3 anni, 21 giorni, 14 ore, 54 minuti e 13 secondi. Quello che importa è capire il salto temporale che ottieni complicando la tua password: intuire l'importanza di utilizzare numeri, maiuscole e minuscole, capire se è meglio allungare la password o piuttosto che scambiare un carattere con un simbolo e cose di questo tipo.

Segnala anche che i tempi che riporterai sono quelli di password random (e.g., quelle generate dal tuo programma). Il tempo per crackare Password1 è di 1 nanosecondo, non di 210 anni come il tuo programma suggerirebbe.
 
Il numero di tentativi è simboli ^ lunghezza (elevazione a potenza, operatore ** in python). Il tempo per effettuare un tentativo dipende dall'hardware (principalmente dalle gpu) e dal software (funzioni di hash), ma è una costante che puoi stimare per difetto (per rappresentare un hardware molto buono). In crittografia generalmente si parla di tempo medio, quindi devi dividere per 2 il risultato che otterrai.

Facciamo un esempio:
  • è formata da a-z, A-Z, 0-9 (26 + 26 + 10 = 62 simboli);
  • è lunga 6 simboli;
  • quindi abbiamo 62^6 = 56800235584 possibili password;
  • dobbiamo provarne più della metà (56800235584 / 2 = 28400117792) per iniziare ad avere una probabilità favorevole (più del 50%) di trovare quella della nostra vittima;
  • tra hardware e software, abbiamo fatto un benchmark che ci dice che siamo in grado di calcolare circa 1 milione di password al secondo;
  • il tempo (medio) per trovare la password della nostra vittima è di 28400117792 / 1000000 = 28400 secondi = 8 ore;
  • se al posto essere lunga 6 simboli fosse lunga 7 il tempo necessario sarebbe di circa 20 giorni, se fosse lunga 8 il tempo sale a 3 anni e mezzo.
Adesso è chiaro che 1 milione di password al secondo è un numero totalmente inventato, ma vediamo cosa succede se prendo un hardware 100 volte migliore (100 milioni di password al secondo):
  • 6 caratteri richiedono 5 secondi;
  • 7 caratteri richiedono 5 ore;
  • 8 caratteri richiedono 12 giorni;
  • 9 caratteri sono 2 anni.
Quindi un errore grossolano mi porta a consigliarti una password 1 carattere più corto: dal punto di vista dell'utente non fa tutta sta grossa differenza visto non gli stiamo consigliando di mettere password lunghissime, gli stiamo consigliando di aggiungere un altro carattere. Se avessimo più di 62 possibili caratteri, l'impatto dell'hardware e del software sarebbe ancora meno rilevante.

Se vuoi un'idea, diciamo stimare la velocità di un computer con 1 milione di password al secondo (come ho fatto primo esempio) può essere accettabile. Visto che stai scrivendo un programmino, magari segnala la scelta di default all'utente e permettigli di inserire un numero a suo piacimento.

È irrilevante avere i numeri precisi, all'utente non frega niente se al posto di 3 anni sono 3 anni, 21 giorni, 14 ore, 54 minuti e 13 secondi. Quello che importa è capire il salto temporale che ottieni complicando la tua password: intuire l'importanza di utilizzare numeri, maiuscole e minuscole, capire se è meglio allungare la password o piuttosto che scambiare un carattere con un simbolo e cose di questo tipo.

Segnala anche che i tempi che riporterai sono quelli di password random (e.g., quelle generate dal tuo programma). Il tempo per crackare Password1 è di 1 nanosecondo, non di 210 anni come il tuo programma suggerirebbe.
GRAZIE GRAZIE MILLE INFINITE!!! Sei stato di molto aiuto per il mio programma.
 
Aggiungo anche che chi cerca di violare la tua password non sa la lunghezza quindi i tempi si moltiplicano ;)
È un'assunzione che il più delle volte non vale la pena fare. In primis perché in crittografia vige il principio di Kerckhoffs, ovvero devi assumere che l'attaccante sia in possesso di molte più conoscenze di quelli che pensi: conosce i tuoi dati personali, quelli dei tuoi famigliari, quelli dei tuoi amici, in caso stai cifrando un messaggio conosce in che lingua l'hai scritto (magari anche quello che c'è scritto), ecc... L'unica cosa che non sa di te, è la tua password. Ma non escluderei che tra le varie cose che potrebbe sapere, potrebbe esserci anche la lunghezza della tua password: alcuni servizi (tipo quelli statali) ti forniscono le credenziali di accesso, non sei tu a sceglierli, e la lunghezza della password è spesso uguale per tutti.

Tuttavia, anche se non conosce la lunghezza della password, poco importa. È un'assunzione che non vale la pena fare anche perché il numero di password di N simboli è solo leggermente più piccolo del numero di password di al più N simboli. Nell'esempio precedente ho calcolato che ci dobbiamo testare mediamente 28400117792 combinazioni prima di trovare una password di 6 simboli nella forma a-z, A-Z, 0-9; per fare la stessa cosa con una password di al più 6 simboli nella stessa forma dobbiamo provare 28865693493 combinazioni. Il primo digit diverso è alla terza cifra significativa e con password più lunghe diventa ancora meno rilevante, senza contare che ho assunto che sia possibile inserire password di 1 solo simbolo (quando in realtà molte applicazioni fissano una lunghezza minima).

Sostanzialmente se mi sto facendo lo sbattito di andare di bruteforce su esattamente N simboli, posso anche farmi lo sbattito di andare di bruteforce su al più N simboli. Ci metterò un po' di più, ma è una differenza molto molto lieve.
 
È un'assunzione che il più delle volte non vale la pena fare. In primis perché in crittografia vige il principio di Kerckhoffs, ovvero devi assumere che l'attaccante sia in possesso di molte più conoscenze di quelli che pensi: conosce i tuoi dati personali, quelli dei tuoi famigliari, quelli dei tuoi amici, in caso stai cifrando un messaggio conosce in che lingua l'hai scritto (magari anche quello che c'è scritto), ecc... L'unica cosa che non sa di te, è la tua password. Ma non escluderei che tra le varie cose che potrebbe sapere, potrebbe esserci anche la lunghezza della tua password: alcuni servizi (tipo quelli statali) ti forniscono le credenziali di accesso, non sei tu a sceglierli, e la lunghezza della password è spesso uguale per tutti.

Tuttavia, anche se non conosce la lunghezza della password, poco importa. È un'assunzione che non vale la pena fare anche perché il numero di password di N simboli è solo leggermente più piccolo del numero di password di al più N simboli. Nell'esempio precedente ho calcolato che ci dobbiamo testare mediamente 28400117792 combinazioni prima di trovare una password di 6 simboli nella forma a-z, A-Z, 0-9; per fare la stessa cosa con una password di al più 6 simboli nella stessa forma dobbiamo provare 28865693493 combinazioni. Il primo digit diverso è alla terza cifra significativa e con password più lunghe diventa ancora meno rilevante, senza contare che ho assunto che sia possibile inserire password di 1 solo simbolo (quando in realtà molte applicazioni fissano una lunghezza minima).

Sostanzialmente se mi sto facendo lo sbattito di andare di bruteforce su esattamente N simboli, posso anche farmi lo sbattito di andare di bruteforce su al più N simboli. Ci metterò un po' di più, ma è una differenza molto molto lieve.


perdonami ma non sono d'accordo :nono:
Quasi mai la password deve essere di una lunghezza fissa. E' proprio il range tra min e max a far crescere il calcolo anche di molto, se tipo hai una password minima di 4 e max di 8, se per quella di 6 caratteri ci metti (inventiamo) 1 anno, poi devi aggiungere 1/62 di anno per quella di 5, 1/(62^2) per quella di 4, e fin qui poca roba ma per quella di 7 ci vorranno 62 anni, sbaglio ? per quella di 8 invece 62x62=3844 anni. Cioe' aggiungi un fattore 62 a ogni carattere in piu' :sisi:
 
perdonami ma non sono d'accordo :nono:
Quasi mai la password deve essere di una lunghezza fissa. E' proprio il range tra min e max a far crescere il calcolo anche di molto, se tipo hai una password minima di 4 e max di 8, se per quella di 6 caratteri ci metti (inventiamo) 1 anno, poi devi aggiungere 1/62 di anno per quella di 5, 1/(62^2) per quella di 4, e fin qui poca roba ma per quella di 7 ci vorranno 62 anni, sbaglio ? per quella di 8 invece 62x62=3844 anni. Cioe' aggiungi un fattore 62 a ogni carattere in piu' :sisi:
Supponiamo che hai una password composta da 8 simboli a-z, A-Z, 0-9 scelta in modo random tra tutte le password possibili. Come detto in uno dei miei messaggi precedenti, supponiamo che il mio hardware mi consente di provare 1 milione di password al secondo. Adesso supponiamo che io (l'attaccante) sono a conoscenza della lunghezza della tua password. Calcolatrice alla mano, ci vogliono 3 anni, 5 mesi e 18 giorni.

Adesso, senza cambiare la tua password, supponiamo che io non sono a conoscenza della sua lunghezza. L'unica cosa che posso fare è provare tutte le password di tutte le lunghezza finché non la trovo: parto dalle password lunghe 1 carattere, poi provo tutte le password di 2 caratteri, ecc... Quando arriverò alle password di 8 caratteri troverò la tua e mi fermo. Quanto ci metto? Calcolatrice alla mano, ci vogliono 3 anni, 6 mesi e 9 giorni.

Se ho la pazienza di aspettare 3 anni, 5 mesi e 18 giorni ragionevolmente ho anche la pazienza di aspettare 3 anni, 6 mesi e 9 giorni. Come ho detto nel messaggio precedente, la differenza c'è... ma è lieve!
 
  • Mi piace
Reazioni: ^Erika^
Supponiamo che hai una password composta da 8 simboli a-z, A-Z, 0-9 scelta in modo random tra tutte le password possibili. Come detto in uno dei miei messaggi precedenti, supponiamo che il mio hardware mi consente di provare 1 milione di password al secondo. Adesso supponiamo che io (l'attaccante) sono a conoscenza della lunghezza della tua password. Calcolatrice alla mano, ci vogliono 3 anni, 5 mesi e 18 giorni.

Adesso, senza cambiare la tua password, supponiamo che io non sono a conoscenza della sua lunghezza. L'unica cosa che posso fare è provare tutte le password di tutte le lunghezza finché non la trovo: parto dalle password lunghe 1 carattere, poi provo tutte le password di 2 caratteri, ecc... Quando arriverò alle password di 8 caratteri troverò la tua e mi fermo. Quanto ci metto? Calcolatrice alla mano, ci vogliono 3 anni, 6 mesi e 9 giorni.

Se ho la pazienza di aspettare 3 anni, 5 mesi e 18 giorni ragionevolmente ho anche la pazienza di aspettare 3 anni, 6 mesi e 9 giorni. Come ho detto nel messaggio precedente, la differenza c'è... ma è lieve!

...ok adesso è chiaro ;)
 
Stato
Discussione chiusa ad ulteriori risposte.