Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Re: Algoritmo per generare codice PIN

10/01/2020, 17:27

@Sergio
Testo nascosto, perché contrassegnato dall'autore come fuori tema. Fai click in quest'area per vederlo.
Sergio ha scritto:In fondo, la codifica/decodifica del PIN è la parte più semplice, perché gestire aspetti quali la modifica dell'elenco degli ID validi richiede anche la messa a punto di idonei processi organizzativi.

Il problema è che questa parte del "lavoro" non la conosce nessuno (in pochi, diciamo … ), quello che "conta" sono i programmi e i costi … detto da uno che ha lavorato "qualche anno" a realizzare "idonei processi organizzativi" :D
Scusate l'intromissione.


Cordialmente, Alex

Re: Algoritmo per generare codice PIN

10/01/2020, 21:14

aurigo ha scritto:Ciò che mi manca è la modalità su come crittografare o de-crittografare il codice.

Sono passati molti anni da quando mi occupavo di crittografia e quello che sto per dire potrebbe non essere corretto, ma sicuramente altri sapranno intervenire.
Il "problema" è che normalmente un algoritmo di cifratura funziona "a blocchi" e questi blocchi sono via via diventati sempre più lunghi per ragioni di sicurezza. In parole povere, un codice di 7 cifre, una volta cifrato, diventa nettamente più lungo.
Potresti utilizzare il vecchio DES, con i suoi blocchi di soli 64 bit. Non è più usato da tempo per la crittografia "seria", ma potrebbe andare bene nel tuo caso e si trovano in rete diverse implementazioni dell'algoritmo in C, C++, Java, Python e magari altro.

Per gioco, solo per gioco, ti propongo un algoritmo decisamente stupido (diciamo che potrebbe servire per fare subito qualcosa che funzioni, in modo da poter testare il sistema completo, aspetti organizzativi compresi, mentre lavori sul DES):
Il codice di 8 caratteri (vedrai subito perché non 7) è così composto:
a) due cifre per il giorno: vanno da 1 a 31, rimangono liberi i 68 numeri da 32 a 99 (liberi nel senso che se sommi al giorno un numero compreso tra 1 e 68 non superi mai 99, non superi cioè le due cifre);
b) due cifre per il mese: vanno da 1 a 12, rimangono liberi gli 87 numeri da 13 a 99;
c) due cifre per la durata di validità: va da 1 a 9, rimangono liberi i 90 numeri da 10 a 99 (se fosse una sola cifra, non rimarrebbero numeri liberi);
d) due cifre per l'ID: va da 1 a 10, rimangono liberi gli 89 numeri da 11 a 99.
Un codice può essere 01020708 (1 febbraio, durata 7 giorni, ID=8).
Scegli un numero così composto:
a) un numero di due cifre da 1 a 68;
b) un numero di due cifre da 1 a 87;
c) un numero di due cifre da 1 a 90;
d) un numero di due cifre da 1 a 89.
Ad esempio: 21324528. Questa è la chiave.
Il codice cifrato è 01020708+21324528=22345236.
Il manutentore immette il codice, la macchina sottrae la chiave e ottiene: 22345236-21324528=01020708. :-D

Oppure, anche più semplice: dal momento che il codice comincia con due cifre che vanno da 1 a 31, aggiungi al tuo codice di 7 cifre un numero di 7 cifre minore di 6800000. La macchina poi sottrae quello stesso numero.
Ad esempio, se la chiave è 3245623: 0102708+3245623=3348331, poi 3348331-3245623=0102708. :-D

EDIT: Ripensandoci, nonostante la rozzezza sarebbero entrambi varianti numeriche del cifrario di Vernam, un cifrario di Vigenère con chiave di lunghezza pari a quella del testo da cifrare. Roba molto semplice ma non proprio da buttare via, soprattutto se si prevede il cambiamento periodico della chiave. Tra l'altro, ho fatto qualche prova col DES ma vengono fuori codici un po' troppo lunghi. Sentiamo altri più freschi di me, ma ci farei un pensierino...

PS: Un sorriso di piena comprensione ad Alex.
Ultima modifica di Sergio il 10/01/2020, 23:54, modificato 2 volte in totale.

Re: Algoritmo per generare codice PIN

10/01/2020, 22:25

Grazie :D

Re: Algoritmo per generare codice PIN

11/01/2020, 22:27

E' un pò quello a cui avevo pensato, ma con 7 cifre.
Sommare alla password in chiaro un numero di 7 cifre conosciuto sia dalla macchina che da chi lo genera.
Solo che speravo di trovare qualcosa di pocopiù complesso e/o efficiente.
Comunque grazie

Re: Algoritmo per generare codice PIN

12/01/2020, 10:03

aurigo ha scritto:Solo che speravo di trovare qualcosa di pocopiù complesso e/o efficiente.

Lo capisco. Quel metodo funzionerebbe (e anche piuttosto bene) solo se il manutentore cambiasse la chiave ad ogni suo intervento e lo potesse fare senza conoscerla, ad esempio sostituendo un dispositivo tamper-proof nella macchina. Diventerebbe un po' complicato.
L'unica alternativa "poco più complessa" mi sembra il DES.
Ad esempio, usando il codice python che trovi qui e scrivendo un programmino prova.py come questo:
Codice:
from pydes import des

chiave = "abcdefgh" # deve essere di 8 caratteri
pin = "0102708"
d = des()
codice = d.encrypt(chiave, pin, padding=True)
print "Codice %r" % codice
chiaro = d.decrypt(chiave, codice, padding=True)
print "Codice decifrato: ", chiaro

ottieni:
Codice:
$ python prova.py
Codice 'r\xc3\xde\x14\xc9\x8di\xbf'
Codice decifrato:  0102708

Un codice come "r\xc3\xde\x14\xc9\x8di\xbf" potrebbe essere reso più maneggevole nella forma: "c3 de 14 c9 8di bf".
Per decifrarlo, basterebbe prima aggiungere "r\x" all'inizio e sostituire gli spazi con "\x".
In generale, si tratterebbe di convertire in formato "umano" il codice, che è in binario.

Re: Algoritmo per generare codice PIN

12/01/2020, 10:58

È un po' acrobatico immaginare soluzioni senza conoscere nei dettagli le macchine. Comunque, assumendo che le macchine abbiano un orologio interno (devono saper riconoscere le date e contare i giorni) e che abbiano una capacità di memoria non ridotta all'osso, c'è un'altra possibilità.
La debolezza della chiave "semplice" (un numero da sommare al PIN per cifrarlo e da sottrarre dal codice per decifrarlo) è che gli elementi del PIN sono facilmente conoscibili e una volta noti gli elementi del PIN (data inizio abilitazione funzioni extra, durata, ecc.) risalire da PIN e codice alla chiave è banale. Sarebbe tutta un'altra musica se la chiave cambiasse a ogni intervento.
Immaginiamo che gli interventi di manutenzioni non siano frequentissimi, diciamo che tra due interventi passino almeno 7 giorni.
Invece di memorizzare nella macchina una chiave, si memorizza una tabella con le date di inizio delle 52 settimane di ciascun anno e corrispondenti chiavi "semplici" .
L'ufficio che incarica il manutentore gli consegna un codice uguale al PIN più la chiave della settimana corrente, la macchina cerca la chiave della settimana corrente e decifra il codice.
In occasione dell'intervento successivo la chiave sarà un'altra.

Re: Algoritmo per generare codice PIN

12/01/2020, 20:10

È un po' acrobatico immaginare soluzioni senza conoscere nei dettagli le macchine. Comunque, assumendo che le macchine abbiano un orologio interno (devono saper riconoscere le date e contare i giorni) e che abbiano una capacità di memoria non ridotta all'osso, c'è un'altra possibilità.

Si, la macchina è dotata di RTC interno. L'RTC è anche di sincronizzarsi con un server NTP.
Non è un problema ricavare la data, il giorno della settimana, e tutto quello che occorre, compreso calcoli matematici.
Normalmente gli interventi di manutenzione non sono frequenti, ma può anche capitare che venga richiesto con cadenza di 1-2 giorni per un determinato periodo affinché non si setta correttamente o non si risolve il problema.
Anche creare una tabella non è un problema. L'idea delle 52 settimane mi piace, ma mi chiedo cosa accade quando la settimana cambia, in vecchio codice non è più valido, quindi se il manutentore dovrà fare l'intervento a cavallo della domenica, dovrà avere due codici.
Vorrei si qualche cosa di affidabile, ma non troppo complicato onde evitare che di creare confusione.
Che ne so, un calcolo matematico. Un pò simile al calcolo di CRC.

Re: Algoritmo per generare codice PIN

12/01/2020, 20:52

aurigo ha scritto:Vorrei si qualche cosa di affidabile, ma non troppo complicato onde evitare che di creare confusione. Che ne so, un calcolo matematico. Un pò simile al calcolo di CRC.

Ma qual è l'esigenza?
Se si vuole evitare che qualcuno non autorizzato acceda alla macchina semplicemente digitando il codice in chiaro si deve ricorrere alla crittografia. Se si vuole evitare che chi digita il codice commetta un errore allora serve un CRC.

Re: Algoritmo per generare codice PIN

12/01/2020, 21:37

Ho fatto solo un esempio. A me necessita semplicemente un codice crittografato che al suo interno contenga i dati come descritto nel precedente post.
L'esempio del CRC, era solo un esempio. (Scusa il gioco di parole).
Intendevo semplicemente dire che sarebbe sufficiente un calcolo matematico che possa essere reversibile per crittografare il PIN.

Re: Algoritmo per generare codice PIN

12/01/2020, 23:48

aurigo ha scritto:Ho fatto solo un esempio. A me necessita semplicemente un codice crittografato che al suo interno contenga i dati come descritto nel precedente post.
L'esempio del CRC, era solo un esempio. (Scusa il gioco di parole).
Intendevo semplicemente dire che sarebbe sufficiente un calcolo matematico che possa essere reversibile per crittografare il PIN.

In teoria è semplicissimo, in pratica i problemi sono due:
1) se usi un algoritmo a blocchi, come il DES o migliori suoi successori, il PIN cifrato è certamente più lungo di 7 caratteri; ad esempio, cifrando "0102708" col DES si ottiene qualcosa del tipo "e8d848a73295f213" e il motivo è semplice: sono solo 8 byte, ma per rappresentarli occorre convertirli in caratteri appartenenti a un insieme ristretto (tipicamente le 10 cifre decimali e qualche carattere alfanumerico); per poter digitare un codice di 8 byte con 8 battute servirebbe una tastiera con 256 tasti;
2) se usi un algoritmo che ti produca un codice lungo quanto il PIN, bastano il codice (ovviamente noto) e il PIN (facilmente indovinabile) per rendere la cifratura inutile, a meno di non cambiare ogni volta la chiave. Tanto per chiarire, esistono algoritmi detti FEP che in teoria farebbero al caso tuo: un PIN di 7 cifrato diventa un codice di 7 cifre. Alla fine, però, tutto (o quasi) si riduce a una permutazione delle 7 cifre. Se si permuta sempre nello stesso modo (se non si cambia ogni volta la chiave) risalire dal codice al PIN è semplice.
Quindi o un codice più lungo di 7 caratteri, oppure una cosa da ridere (a meno di non prevedere il frequente cambiamento della chiave).
Ad altre soluzioni non arrivo.
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.