Aiuto: sto cercando un algoritmo?

bivu1
Immagino che un titolo del genere sia disarmante e quasi offensivo per voi. Premessa: sono un completo ignorante nel campo della programmazione, figuriamoci degli algoritmi (che a malapena comprendo il concetto di cosa siano), ma avrei bisogno di una mano e quindi chiedo di proseguire questa lettura solo a chi ha voglia di dedicarsi con tanta pazienza al mio caso.

Seconda presessa (che non fa mai male): ho già fatto diverse googolate con scarsi risultati, e comunque non sto cercando di crackare programmi o ricaricarmi il telefono o qualsiasi altra cosa illegale, sto semplicemente cercando di capire se un sistema che adotto per lavoro è terribilmente vulnerabile carpendone l'algoritmo.

Adesso vediamo se riesco a spiegarmi.

Ho un fornitore di accettatori di carte magnetiche che mi fornisce anche il programma per la gestione delle carte (non ho via di scampo, devo passare sempre tramite lui). Quando gli chiedo i codici per fare delle nuove carte, lui mi chiede "da che numero a che numero" e poi mi fornisce i codici da magnetizzare nella carta coi relativi codici segreti.

Anche se sono un profano del settore, al 99% sono sicuro che c'è una connessione diretta tra il mio codice cliente (che mi ha assegnato il mio fornitore), il numero di ogni carta, e il relativo codice segreto. Da qui ho immaginato che ci sia il famigerato algoritmo (è una figata parlare di qualcosa che non si sa realmente cos'è) che genera i codici segreti. E si parla di codici numerici.

Il codice da magnatizzare nelle carte è di 37 cifre. All'interno c'è chiaramente il mio codice cliente e il numero della tessera. In tutti i codici le cifre sono uguali tranne appunto il numero della carta e solamente un'altra cifra.

Ora, non ne capirò molto di 'ste cose, ma ho paura che se un mio cliente un po' più ferrato in materia ha 4-5 o più tessere coi relativi codici segreti, potrebbe risalire all'algoritmo e clonare carte di altri clienti.

Ovviamente per il mio fornitore non è così, ma vorrei altri pareri e anzi, se possibile vorrei riuscirci io (al prossimo ordine di codici, gli anticipo già quali sarebbero i codici segreti!)

Spero di essere stato sufficientemente chiaro. Ovviamente non è facile per me esprimermi in questa materia.

Grazie a chi vorrà darmi una mano

Risposte
vict85
Craccare un algoritmo che genera 37 cifre con solo 4-5 carte direi che è altamente improbabile. Cercare di farlo sarebbe uno spreco di tempo e denaro e richiederebbe quasi sicuramente di mettere le mani sulla tua scheda (e a quel punto tanto varrebbe farne una copia). La clonazione di identità avviene nella maggior parte dei casi per errori umani. Probabilmente poi l'algoritmo si basa su dei valori che tu non possiedi e sono in possesso solo della ditta o impresse sulla scheda. O almeno io farei così...

apatriarca
Tutto dipende dall'effettivo algoritmo usato per generare i codici, ma in generale non è per niente facile e richiede molto tempo e lavoro da parte del cracker. Stai in effetti cercando di capire la forma di una funzione in due variabili o più a partire da pochi valori.

bivu1
fare una copia richiederebbe però anche scovare il codice segreto. Mentre ricreare il codice di una carta potenzialmente in uso è facilissimo! Alla fine dal codice magnetizzato basta cambiare il numero della tessera più un'altra cifra, quindi al massimo ci sono 10 opzioni... e se qualcuno lo fa, gli basta solo recuperare la password (a proposito, sempre di 4 cifre) e con questo metodo si può clonare tutte le tessere che vuole.

Non so perchè, ma ho la sensazione che la cosa non sia troppo difficile, vorrei capire se i miei timori sono fondati

bivu1
"apatriarca":
Tutto dipende dall'effettivo algoritmo usato per generare i codici, ma in generale non è per niente facile e richiede molto tempo e lavoro da parte del cracker. Stai in effetti cercando di capire la forma di una funzione in due variabili o più a partire da pochi valori.


Io ne ho migliaia, ma ho clienti che ad esempio ne hanno 30

Rggb1
Vediamo se ho capito:
- ogni tessera ha un codice magnetizzato composto da ;
- è di 4 numeri 0..9
- è di 32 numeri 0..9
- è una cifra 0..9
- il codice segreto viene generato dalla combinazione di e (ed eventualmente ) dove è di 4 cifre 0..9

Se le cose stanno così, è un sistema classico a badge magnetico. Non è impossibile fare un RE sull'algoritmo usato, ma è assai complicato - in genere il gioco non vale la candela. Con queste lunghezze è difficile anche possedendo una trentina di schede.

Assumo ovviamente che ii codici li fornisca il fornitore, e non un programma che hai a disposizione, altrimenti puoi chiudere bottega...

Insomma, io non mi preoccuperei troppo; certo dipende anche dal denaro che ogni singola scheda può "muovere", diciamo così.

Megan00b
Oltre a quello che è stato già detto aggiungo 2 cose:
1) nei casi che ho studiato in giro e in un caso pratico che ho collaborato ad implementare durante uno stage tempo fa la trasformazione che lega i codici autorizzativi (pin e affini), i codici identificativi (numero tessera ecc) e codici ambientali (eventuali parametri dell'algoritmo come un identificativo di chi gestisce la scheda) è fortemente non iniettiva quindi il problema di invertire l'associazione più che difficile è di fatto impossibile
2) le informazioni registrate effettivamente sulla tessera magnetica o, nel caso che ho visto in pratica, sul chip identificativo di una serie di contenitori protettivi, non contiene in alcun modo riferimenti al codice segreto (codice di controllo, pin, password) e la combinazione fra i due avviene solo nella fase di autenticazione che è protetta dalla particolare architettura hardware in cui avviene.
Io dormirei sonni tranquilli.
A.

bivu1
Grazie a tutti per la collaborazione.

Comunque vedo lo stesso di spiegarmi un po' meglio, magari mi è sfuggito qualche dettaglio importante. Faccio un esempio di com'è il codice magnetizzato nelle carte:

xxxxCCCCxxxxNNNNHxxxxxxxxxxxxxxxxxxx

dove "x" sono quasi tutti zeri, "C" è il mio codice cliente, "N" è il numero della tessera, "H" è un numero che non capisco.

In tutte le carte x e C sono uguali, mentre cambiano ovviamente N (che comunque posso dedurre) e H

Per questo dicevo che arrivare a creare, ad esempio, la carta numero 3201 è facilissimo, basta solo azzeccare "H". Poi rimane da capire solo il codice segreto di 4 cifre.

Mi confermate che è quasi impossibile?

P.S.: confermo che i codici me li dà il fornitore e non li genero io

Umby2
Ma quindi il codice da "individuare" è solo la H ?
Perchè parli del codice segreto di 4 cifre ?

Se hai molte carte potresti studiare come cambia la H in base alle altre cifre. Di solito un codice di controllo si compone di una sola cifra (vedi ultimo carattere del codice fiscale), oppure ultimo carattere di un codice a barre.
L'algoritmo per la determinazione di un codice di controllo potrebbe essere stupidissimo, o molto complesso (dipende da chi lo ha pensato...)

bivu1
"Umby":
Ma quindi il codice da "individuare" è solo la H ?
Perchè parli del codice segreto di 4 cifre ?

Se hai molte carte potresti studiare come cambia la H in base alle altre cifre. Di solito un codice di controllo si compone di una sola cifra (vedi ultimo carattere del codice fiscale), oppure ultimo carattere di un codice a barre.
L'algoritmo per la determinazione di un codice di controllo potrebbe essere stupidissimo, o molto complesso (dipende da chi lo ha pensato...)


immaginavo di non essere stato perfettamente chiaro :-D

Allora, nel codice della carta variano soltanto pochi numeri, di cui appunto il numero stesso della carta e quell'altra cifra. Quando la carta viene utilizzata nell'appoito POS, viene ovviamente chiesto anche il codice segreto. Questo codice segreto secondo me è un dato legato al codice della carta (al 99% è così, non sto qui a spiegare il perchè) e per questo ho pensato ad un algoritmo.

Spero di non aver detto un mucchio di eresie.

Umby2
... il numero della carta potrebbe essere un numero progressivo ( o un numero scelto a caso..)
penso che sia importante, invece, stabilire come cambia la H al variare del numero stesso NNNN.

Se hai a disposizione, ad esempio, una decina di carte diverse, potresti tentare di trovare l'algoritmo. Hai solo bisogno di tanta pazienza, ed un pizzico di intuizione. Ripeto che dipende dalla complessità dell'algoritmo.

bivu1
"Umby":
... il numero della carta potrebbe essere un numero progressivo ( o un numero scelto a caso..)
penso che sia importante, invece, stabilire come cambia la H al variare del numero stesso NNNN.

Se hai a disposizione, ad esempio, una decina di carte diverse, potresti tentare di trovare l'algoritmo. Hai solo bisogno di tanta pazienza, ed un pizzico di intuizione. Ripeto che dipende dalla complessità dell'algoritmo.


Il numero della carta è progressivo per mia scelta, perchè devo inserirlo nel programma che mi gestisce le carte. Su H ci ragiono un po' su, ma ho già notato che mettendo i vari codici in successione progressiva, gli H si ripetono nello stesso ordine (cioè, parto con 9, al codice successivo c'è 7, poi 5, poi 0, poi 8, 6, ecc...) che riparte da capo dopo 19 codici. Non so se mi sono spiegato bene... mannaggia quant'è difficile per me esprimere cose così banali!

Ora, al di là di H, può essere relativamente facile arrivare a scoprire il codice segreto di 4 cifre?

vict85
"bivu":
[quote="Umby"]... il numero della carta potrebbe essere un numero progressivo ( o un numero scelto a caso..)
penso che sia importante, invece, stabilire come cambia la H al variare del numero stesso NNNN.

Se hai a disposizione, ad esempio, una decina di carte diverse, potresti tentare di trovare l'algoritmo. Hai solo bisogno di tanta pazienza, ed un pizzico di intuizione. Ripeto che dipende dalla complessità dell'algoritmo.


Il numero della carta è progressivo per mia scelta, perchè devo inserirlo nel programma che mi gestisce le carte. Su H ci ragiono un po' su, ma ho già notato che mettendo i vari codici in successione progressiva, gli H si ripetono nello stesso ordine (cioè, parto con 9, al codice successivo c'è 7, poi 5, poi 0, poi 8, 6, ecc...) che riparte da capo dopo 19 codici. Non so se mi sono spiegato bene... mannaggia quant'è difficile per me esprimere cose così banali!

Ora, al di là di H, può essere relativamente facile arrivare a scoprire il codice segreto di 4 cifre?[/quote]

Tu ignori le varie x ma sono quelle che aumentano la sicurezza. Il fatto è che quelle x sono legate a te mentre H è legato alla particolare carta. Una persona che ha delle carte ma ha un codice identificativo diverso avrà le varie x diverse dalle tue. Quindi ha bisogno di 2 cose:
1) come varia H a secondo delle x, del codice identificativo e del numero della carta.
2) i tuoi valori delle x (o il loro legame con il tuo codice identificativo).

bivu1
"vict85":
Il fatto è che quelle x sono legate a te mentre H è legato alla particolare carta. Una persona che ha delle carte ma ha un codice identificativo diverso avrà le varie x diverse dalle tue.


perfetto, fino qui l'avevo immaginato anch'io. Mi scoccia un po' che N sia così palesemente visibile, ma le x dovrebbero comunque garantirmi una certa seicurezza

Quindi ha bisogno di 2 cose:
1) come varia H a secondo delle x, del codice identificativo e del numero della carta.
2) i tuoi valori delle x (o il loro legame con il tuo codice identificativo).


Qui non capisco (abbi pietà...).

Va bene il discorso su H, anche se per un potenziale truffatore il problema è relativo come spiegavo prima, perchè andando anche solo a tentativi basta provare al massimo 10 volte...

Mentre vorrei capire se è così difficile (o quasi impossibile come scritto precedentemente) arrivare a capire il rapporto tra il codice di ogni carta e il suo relativo codice segreto di 4 cifre per effettuare le transazioni

vict85
Beh... è una funzione che manda 36 cifre in una. Il numero di funzioni di questo tipo è altissimo. Inoltre senza avere più di un codice cliente è impossibile determinare come cambia rispetto alle x. Anche se tu scoprissi facilmente come H è legato al numero della carta nel momento in cui cambiassi codice cliente saresti al punto di partenza.

DemoneRoss
tu stai supponendo che le X sulla tua carta siano una funzione della password giusto?

Se fosse vero sarebbe teoricamente possibile ricavarla semplicemente "vedendo" il codice della carta.

Questo può anche essere, in fondo abbinare il codice cliente alla carta farebbe risparmiare evitando un database interno di clienti e semplificando alcuni elementi logistici di tutta la procedura. Sicuramente le carte di credito non funzionano così altrimenti ci sarebbe chi riesce a decifrarle e a fregare tanti tanti soldi. In fondo ipotizza 100 sportelli. O li colleghi via internet (facilmente intercettabili i dati in questo modo) o periodicamente crei database locali in ogni sportello. Il modo più semplice è fare sportelli in grado di funzionare autonomamente senza la necessità di verificare "on-line" se la password inserita sia giusta realmente.

Questo non vuol dire che risalire dalle X alla password sia semplice. Il modo più semplice è "aprire lo sportello" e fare il reverse eng partendo dall'hardware. Se si tratta di sportelli online, vorrebbe dire mettere le mani sul codice del server (e quindi attaccarlo). Se poi sai come fare ad usare solo ed unicamente le carte dovresti averne a disposizione parecchie migliaia e dovresti avere a disposizione una enorme potenza di calcolo.

bivu1
"DemoneRoss":
tu stai supponendo che le X sulla tua carta siano una funzione della password giusto?


Sì, molto probabilmente insieme a C, N e H. Ma è solo una teoria e tieni presente che sono profondamente ignorante in materia, è una deduzione maturata da quella che per me è la logica

Se fosse vero sarebbe teoricamente possibile ricavarla semplicemente "vedendo" il codice della carta.

Questo può anche essere, in fondo abbinare il codice cliente alla carta farebbe risparmiare evitando un database interno di clienti e semplificando alcuni elementi logistici di tutta la procedura. Sicuramente le carte di credito non funzionano così altrimenti ci sarebbe chi riesce a decifrarle e a fregare tanti tanti soldi. In fondo ipotizza 100 sportelli. O li colleghi via internet (facilmente intercettabili i dati in questo modo) o periodicamente crei database locali in ogni sportello. Il modo più semplice è fare sportelli in grado di funzionare autonomamente senza la necessità di verificare "on-line" se la password inserita sia giusta realmente.


Bingo! E' proprio di questo che ho paura.

Le carte di credito e i bancomat hanno un codice segreto che viene riconosciuto e autorizzato da un server remoto, mentre io lavoro con dei terminal "off-line"

Questo non vuol dire che risalire dalle X alla password sia semplice. Il modo più semplice è "aprire lo sportello" e fare il reverse eng partendo dall'hardware. Se si tratta di sportelli online, vorrebbe dire mettere le mani sul codice del server (e quindi attaccarlo). Se poi sai come fare ad usare solo ed unicamente le carte dovresti averne a disposizione parecchie migliaia e dovresti avere a disposizione una enorme potenza di calcolo.


Risalire alle X è facilissimo per chiunque abbia un lettore di bande magnetiche. Per questo mi chiedevo se per qualcuno con con un tot di codici potesse essere "facile" risalire all'algoritmo che crea la password di 4 cifre. Se dovessi fare un esperimento io, di codici coi relativi codici segreti ne ho a centinaia, ma non saprei proprio da che parte iniziare... probabilmente esistono programmi in grado di farlo, ma ignoro la loro esistenza. Una persona un po' più "tagliata" invece potrebbe farcela?

Rggb1
"bivu":
Le carte di credito e i bancomat hanno un codice segreto che viene riconosciuto e autorizzato da un server remoto, mentre io lavoro con dei terminal "off-line"

Veramente anche il bancomat funziona così. Il codice segreto viene riconosciuto "in locale" - diciamo così - ovvero è associato alla carta. Non viene spedito - nè in chiaro nè criptato - a nessun server remoto.

"bivu":
Risalire alle X è facilissimo per chiunque abbia un lettore di bande magnetiche.

Certo, ma non basta.

Ti faccio un esempio. Chi "clona" i bancomat deve avere l'informazione che è archiviata sul bancomat stesso (la tessera) INSIEME al pincode, che non è memorizzato da nessuna parte. Come agisce allora?
Semplice (si fa per dire): mette un lettore vicino/dentro alla fessura bancomat, e una bella tastiera thin sopra la tastiera del bancomat; secoli fa usavano telecamere... dilettanti! :-D

Insomma nel tuo caso è lo stesso, e come ho già detto: in teoria non è impossibile calcolare i pincode, in pratica è assai difficile. La totalità delle frodi in questo senso avvengono con due modalità: furto del pincode (v. sopra) oppure un complice all'interno del sistema (cd. "talpa").

bivu1
Ok, adesso mi è chiaro. Pensavo di non essermi spiegato bene prima.

Avevo informazioni errate sui bancomat, e forse da un lato la cosa mi tranquillizza perchè vuol dire che il metodo che sto utilizzando in un certo senso è simile.

Non ho il rischio che vengano applicati altri lettori sulle mie apparecchiature come succede coi bancomat, da questo lato sono tranquillo. Mi basta sapere che se anche una persona è un possesso di 20 carte coi relativi codici segreti, gli risulterebbe quasi impossibile scovare il nesso tra il 2 codici.

Vi ringrazio moltissimo.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.