La "password più sicura"


11

Ho un'app protetta da un PIN di quattro cifre e l'utente ha effettuato cinque tentativi di accesso prima che l'account sia bloccato.

Ora, uno dei miei clienti vuole "rafforzare" la sicurezza e difendere un'altra soluzione:

  • sei cifre-PIN
  • NO "stessa cifra una accanto all'altra": ad esempio: 11 3945 o 39 55 94
  • NO "numeri a tre numeri": ad es .: 123 654 o 53 789 3

Ora alla domanda: quale soluzione è la più forte?

Posso calcolare abbastanza facilmente le quattro cifre, ma come posso calcolare l'altra?

Grazie!

Aggiornare

Ottieni quello che chiedi - specialmente quando lavori con la matematica :)

Quindi, quello che chiedevo era il numero di combinazioni per entrambe le sequenze numeriche.

Leggendo le risposte e i commenti mi è venuto in mente che non importa davvero. Se hai 5 ipotesi, non importa se hai 10.000 o ~ 800.000 tra cui scegliere. Più importante è escludere il 1234 e il giorno della nascita. Nella mia situazione, ho effettivamente il giorno di nascita degli utenti, quindi ho qualcosa da controllare.

Grazie per l'ottima discussione!


4
Prendendo una prospettiva storica, dovresti familiarizzare con la crittoanalisi della macchina Enigma. In particolare, l'algoritmo Enigma non ha mai crittografato una lettera a se stesso. Ciò è stato pensato per renderlo più sicuro dai suoi ingegneri, ma ha avuto l'effetto di rendere la macchina notevolmente meno sicura. Questo fu uno dei tanti passi che permisero alle Potenze Alleate di spezzare Enigma. Non sono un esperto di crittografia in alcun modo, ma l'idea generale è che vuoi che il tuo spazio delle chiavi sia il più grande possibile.
Sycorax dice di reintegrare Monica il

2
Penso che questo appartenga alla crittografia , non qui.
gung - Ripristina Monica

2
Casper, per favore chiarisci - sei principalmente preoccupato per questo come un problema di sicurezza (ad esempio ci sono considerazioni legate a più della semplice probabilità), nel qual caso potrebbe essere una soluzione migliore altrove - o stai ponendo una domanda principalmente di probabilità (che si adatta qui)?
Glen_b

3
Teoricamente --- se ti concentri esclusivamente sugli attacchi di forza bruta --- più possibilità significano più sicurezza, quindi restrizioni come la non-stessa cifra o la no-run-of-3 riducono il numero di possibilità, quindi sono strettamente più deboli. Tuttavia, praticamente (come l'utente777 tocca) le persone non scelgono pin casuali. Se gli utenti sono più pigri di quanto siano paranoici, molti di loro possono scegliere pin come "000000" o "123456", il che rende le cose meno sicure.
Gregor Thomas,

2
Sto votando per chiudere (temporaneamente) questa domanda come poco chiara, sulla base del fatto che le intenzioni del PO non sono ancora ovvie. Preferirei davvero vedere la risposta alla domanda di @ Glen_b, quindi sappiamo se questo dovrebbe essere trattato come una domanda combinatoria / di probabilità o come qualcosa che è meglio migrato.
Silverfish,

Risposte:


8

Hai chiesto aiuto a un forum di statistici su questa domanda, quindi fornirò una risposta statisticamente basata. Quindi è ragionevole supporre che tu sia interessato alla probabilità di indovinare un PIN a caso (per qualche definizione di casuale), ma questo sta leggendo più nella domanda di quanto venga fornito.

Il mio approccio sarà quello di enumerare tutte le opzioni possibili senza restrizioni, quindi sottrarre le opzioni vuote. Questo ha un angolo acuto, tuttavia, chiamato principio di inclusione-esclusione, che corrisponde all'idea intuitiva di non voler sottrarre la stessa cosa da un set due volte!

In un PIN di sei cifre senza restrizioni e un sistema di numeri decimali, ci sono combinazioni possibili, da a ogni cifra ha 10 opzioni.106000000999999:

Considera l'aspetto di "due cifre adiacenti, identiche": , dove le posizioni contrassegnate con sono uguali e può essere qualsiasi cifra decimale. Ora considera quanti altri modi in cui la stringa può essere disposta in sei cifre: , , e . Quindi, per ogni ordine particolare (una di quelle opzioni), ci sono almeno combinazioni, poiché ci sono cifre senza restrizioni. Ora, quante sono le scelte di ? Stiamo lavorando con cifre decimali, quindi ci devono essere 10. Quindi ci sonoAAXXXXAXAAXAAXXXXXAAXXXXXAAXXXXXAA104104A105scelte per un ordine particolare. Esistono cinque ordini di questo tipo, quindi ci sono disposizioni che soddisfano questa definizione. (Che cosa ciò significhi in termini di sicurezza potrebbe essere misurato in termini di una misura teorica dell'informazione di quanto ciò riduce l'entropia dello spazio PIN.)5×105

Ora considera come appaiono i numeri consecutivi. Nella stringa , se conosciamo A, conosciamo anche B e C *: se A è 5, allora B è 6 e C è 7. Quindi possiamo enumerare queste opzioni:ABCXXX

  • 012XXX
  • 123XXX
  • 234XXX
  • 456XXX
  • 789XXX

e a questo punto non è chiaro se ci sia un "avvolgimento". Se esiste, includiamo anche

  • 890XXX
  • 901XXX

Ogni soluzione ha combinazioni associate, con lo stesso ragionamento di cui sopra. Quindi basta contare quante soluzioni ci devono essere. Ricorda di contare gli ordini alternativi, come103XABCXX.

Ora arriviamo all'angolo acuto, che è il principio di inclusione-esclusione. Abbiamo creato il set di tutti i PIN a sei cifre in tre set:

A. PIN consentiti B. Annulla PIN a causa di "cifre adiacenti" C. Annulla PIN a causa di "cifre sequenziali"

Ma c'è una sottigliezza aggiuntivo, vale a dire che vi sono alcuni numeri 6 cifre che possono essere attribuiti ad entrambi e . Quindi, se calcoliamo sottraggiamo quei numeri due volte e la nostra risposta è errata. Il calcolo corretto è dove è l'insieme di elementi sia in e . Quindi dobbiamo determinare quanti modi può un certo numero calo sia e .C | S | = | A | - | B | - | C | , | S | = | A | - | B | - | C | + | B C | , B C B C B CBC|S|=|A||B||C|,|S|=|A||B||C|+|BC|,BCBCBC

Esistono diversi modi in cui ciò può accadere:

  • AABCXX
  • ABCXDD e così via. Quindi devi elaborare un approccio sistematico anche a questo, oltre a un modo per tenere traccia di ordini alternativi. Utilizzando la stessa logica che ho applicato sopra, questo dovrebbe essere molto trattabile, anche se leggermente noioso. Ricorda solo quanti modi alternativi potrebbero esserci per soddisfare sia B che C.

Approcci leggermente più avanzati trarrebbero vantaggio dai risultati combinatori di base e dal teorema fondamentale del conteggio, ma ho scelto questa strada in quanto pone il più piccolo onere tecnico sul lettore.

Ora, affinché questa sia una domanda di probabilità ben formata, dobbiamo avere una certa misura di probabilità per ogni accordo. Nell'ipotesi di un attacco ingenuo, si potrebbe presumere che tutte le combinazioni di cifre abbiano pari probabilità. In questo scenario, la probabilità di una combinazione scelta casualmente è Se questo è il tipo di attacco che ti interessa maggiormente prevenire, tuttavia, l'insieme di criteri proposto indebolisce ovviamente il sistema, perché alcune combinazioni sono vietate, quindi solo un muto attaccante potrebbe provarle. Lascio il resto dell'esercizio al lettore.1|S|

La ruga di "cinque fino al blocco" è decisamente la migliore protezione contro l'accesso non autorizzato, dato che nello schema a 4 o 6 cifre, esiste un numero molto elevato di opzioni e anche cinque diverse ipotesi casuali hanno un basso probabilità di successo. Per una domanda di probabilità ben posta, è possibile calcolare la probabilità che un tale attacco abbia successo.

Ma altri fattori oltre alla probabilità di sequenze di numeri possono influenzare la sicurezza del meccanismo PIN. Principalmente, le persone tendono a non scegliere i PIN a caso! Ad esempio, alcune persone usano la propria data di nascita o DOB ​​dei bambini o un numero simile in modo personale come PIN. Se un utente malintenzionato conosce il DOB dell'utente, probabilmente sarà tra le prime cose che provano. Quindi, per un particolare utente, alcune combinazioni potrebbero essere più probabili di altre.

* Le sequenze che elenchi sono in costante aumento e non è chiaro se sia in aumento che in diminuzione quando si dice "numero con tre sequenze".


1

Ottenere una formula chiusa sembra complesso. Tuttavia, è abbastanza facile elencarli. Esistono 568 916codici possibili per la seconda soluzione. Che è maggiore del numero di soluzioni con un codice PIN a quattro cifre. Il codice per enumerarli è di seguito. Sebbene non ottimizzato, bastano pochi secondi per essere eseguito.

Nota. Ho assunto che la sequenza dovesse essere in ordine crescente (che può essere facilmente modificata in three_running)

N = 999999

candidates = range(N)

def same_consecutive_digits(x):
    x_string = str(x).zfill(6)
    for i in range(1,len(x_string)):
        if x_string[i] == x_string[i-1]:
            return True
    return False

def three_running(x):
    x_string = str(x).zfill(6)
    for i in range(2,len(x_string)):
        if int(x_string[i]) == int(x_string[i-1]) + 1 and int(x_string[i-1]) == int(x_string[i-2]) + 1:
            return True
    return False

def valid(x):
    return not same_consecutive_digits(x) and not three_running(x)

assert(same_consecutive_digits(88555))
assert(same_consecutive_digits(123))
assert(not same_consecutive_digits(852123))
assert(three_running(123456))
assert(not three_running(4587))
assert(valid(134679))
assert(not valid(123894))
assert(not valid(111111))
assert(not valid(151178))
assert(valid("031278"))

accepted = [i for i in range(N) if valid(i)]
print(len(accepted))

Implicito nel codice, ma non nella descrizione, si presuppone che i PIN non inizieranno mai con la cifra "0". Questo di solito non è vero per PIN o password. La risposta corretta, consentendo tali zeri, è 568.916. Teniamo presente, tuttavia, che la risposta pertinente considererebbe che gli attacchi al PIN in questo problema vincolato possono essere resi molto più efficienti sfruttando i vincoli, il che implica che questa semplice enumerazione delle possibilità non rappresenta adeguatamente la "forza" di il sistema, come sottolineato nei commenti alla domanda.
whuber
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.