Pagina 1 di 2

Algoritmo per generare codice PIN

MessaggioInviato: 07/01/2020, 21:47
da aurigo
Buonasera, sono un programmatore di PLC.
Vorrei chiedere qualche consiglio per la generazione di un piccolo algoritmo. (Possibilmente molto semplice)
Stò realizzando un programma dove il mio cliente ha chiesto di poter abilitare alcune funzioni della macchina per un determinato periodo di tempo (giorni) inserendo un codice PIN.
Il codice PIN verrà fornito al manutentore o all’utilizzatore della macchina quando necessario .
Il codice, verrà generato sulla base di tre elementi:
1) ID univoco che identificherà o la macchina o il tecnico manutentore (Questo lo si deciderà successivamente), ma credo che faccia poca differenza se uno o l’altro. La lunghezza dell’ID sarà indicativamente composto da 2 - 3 cifre
2) Giorno e mese di inizio della validità del codice
3) Giorno e mese di fine validità del codice.

E’ la prima volta che mi trovo a gestire una tipologia di un codice del genere, e non ho idea di come farlo. Potreste aiutarmi gentilmente a comprendere come creare un piccolo algoritmo di codifica – decodifica del codice?
Non necessitano un sistema inattaccabile. Solo un sistema semplice ed efficiente.
La macchina lavorerà in modalità stand-alone, quindi non ha collegamenti in rete o altro.
Ringrazio anticipatamente.

Re: Algoritmo per generare codice PIN

MessaggioInviato: 07/01/2020, 22:39
da axpgn
Penso che dovresti far spostare il thread nella stanza di Informatica, riceverai più risposte e sicuramente più significative.
Però devi chiedere ad un moderatore, solo lui può farlo.

Cordialmente, Alex

Re: Algoritmo per generare codice PIN

MessaggioInviato: 09/01/2020, 11:29
da Raptorista
Ciao, credo che tu stia cercando una cosa come una funzione hash o una checksum intelligente.
Il codice PIN dev'essere inserito solo una volta, per esempio il primo giorno, giusto?

Re: Algoritmo per generare codice PIN

MessaggioInviato: 09/01/2020, 16:47
da aurigo
Ciao e grazie della risposta.
In realtà cerco qualche cosa tipo OTP "one-time password" (almeno credo che si chiama cosi).
Il codice deve essere inserito tutte le volte che l'operatore autorizzato deve intervenire sulla macchina.
Se l'operatore (in genere il manutentore) si allontana dalla macchina su cui stà facendo manutenzione, il programma dopo un tempo X lo disconnette. Per riaccedere deve re-inserire il codice.
Grazie

Re: Algoritmo per generare codice PIN

MessaggioInviato: 10/01/2020, 11:30
da Raptorista
Allora è già deciso cosa ti serve.
La cosa più semplice è di usare gli standard per OTP:
https://en.wikipedia.org/wiki/HMAC-base ... _algorithm
https://en.wikipedia.org/wiki/Time-base ... _algorithm

Ci sono applicazioni per smartphone gratuite, come Google Authenticator, che possono generare i codici di accesso.

Re: Algoritmo per generare codice PIN

MessaggioInviato: 10/01/2020, 11:50
da vict85
aurigo ha scritto:1) ID univoco che identificherà o la macchina o il tecnico manutentore (Questo lo si deciderà successivamente), ma credo che faccia poca differenza se uno o l’altro. La lunghezza dell’ID sarà indicativamente composto da 2 - 3 cifre


2 o 3 cifre? Mi pare piuttosto corso come numero identificativo. L'identificativo è relativo alla singola azienda?

Comunque, riguardo al tuo problema, se il PIN rimane lo stesso per un tempo medio-lungo non è necessario usare la complessità di un OTP. Insomma potresti persino richiedere al manutentore di decidere lui il pin e richiederli di cambiarlo ogni X giorni.

Re: Algoritmo per generare codice PIN

MessaggioInviato: 10/01/2020, 14:22
da aurigo
2 o 3 cifre? Mi pare piuttosto corso come numero identificativo. L'identificativo è relativo alla singola azienda?

L'ID è relativo al tecnico o macchina all'interno dell'azienda. In realtà avrei pensato di inserire una chiave che potrebbe anche essere il codice cliente, per verificare che ci sia corrispondenza tra codice cliente e macchina, ma in realtà non so come creare l'algoritmo.
Ho pensato a qualcosa, ma mi viene fuori un password troppo lunga.
potresti persino richiedere al manutentore di decidere lui il pin e richiederli di cambiarlo ogni X giorni.

Il manutentore non deve essere a conoscenza della chiave o di come generarla, sopratutto se interno all'azienda.

Re: Algoritmo per generare codice PIN

MessaggioInviato: 10/01/2020, 16:08
da Sergio
Chiedo scusa, ma non ci sto capendo nulla e provo a mettere un po' a fuoco.

aurigo ha scritto:Stò realizzando un programma dove il mio cliente ha chiesto di poter abilitare alcune funzioni della macchina per un determinato periodo di tempo (giorni) inserendo un codice PIN.

C'è una macchina che normalmente svolge alcune funzioni, ma può svolgere altre.
La macchina deve essere in grado di abilitare queste altre funzioni quando viene immesso un PIN.

aurigo ha scritto:Il codice PIN verrà fornito al manutentore o all’utilizzatore della macchina quando necessario .
Il codice, verrà generato sulla base di tre elementi:
1) ID univoco che identificherà o la macchina o il tecnico manutentore (Questo lo si deciderà successivamente), ma credo che faccia poca differenza se uno o l’altro. La lunghezza dell’ID sarà indicativamente composto da 2 - 3 cifre
2) Giorno e mese di inizio della validità del codice
3) Giorno e mese di fine validità del codice.

Il PIN non è fisso, ma generato all'occorrenza e deve contenere giorno e mese di inizio validità, giorno e mese di fine validità.
Inoltre il PIN deve consentire di identificare la macchina (mi pare che abbia senso solo se ci sono più macchine dello stesso tipo in funzione e se solo alcune di essere devono abilitare le funzioni extra) oppure il manutentore. In entrambi i casi, occorre conoscere il numero delle macchine o dei manutentori per capire quante cifre occorrono. Se ci sono al più cento macchine o matutentori, bastano due cifre per l'ID.
Per contenere però anche giorno/mese di inizio validità e giorno/mese di fine validità servono altre 6 cifre (anche con una codifica esadecimale).
Il PIN, quindi, dovrebbe essere lungo almeno 8 cifre.
Diciamo pure che il PIN potrebbe essere del tipo IDGGMMGGMM, da convertire in altro per un minimo di sicurezza (o magari IDAAAZZZ codificando giorni e mesi in tre cifre). E per fare questo i metodi sono infiniti...

Il vero problema mi pare un altro: la macchina dovrebbe essere in grado di:
a) risalire dal PIN codificato a IDGGMMGGMM (o IDAAAZZZ);
b) accettare la parte "ID" solo se corretta; ad esempio, se l'ID identifica uno dei manutentori abilitati, dovrebbe conoscere l'elenco degli ID di tutti i manutentori abilitati e, inoltre, si dovrebbe poter modificare quell'elenco;
c) riconoscere le date, validarle (ad es. rifiutare date di inizio o di fine validità già trascorse), abilitare e poi disabilitare le funzioni extra.

A naso, soluzioni tipo OTP non risolvono perché non vedo come la macchina potrebbe ricavare le informazioni necessarie (ID, giorno/mese inizio, giorno/mese fine).
Invece, visto che non si richiedono livelli di sicurezza particolarmente elevati, direi che per la codifica/decodifica del PIN la cosa più semplice sia un algoritmo di cifratura simmetrica non troppo sofisticato, basato su una chiave nota solo alla macchina e a chi genera i PIN (si può comunque prevedere il cambiamento periodico della chiave).
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.

Se ci ho capito qualcosa, of course...

Re: Algoritmo per generare codice PIN

MessaggioInviato: 10/01/2020, 17:14
da vict85
Mi sembra effettivamente che tu abbia bisogno più di un sistema di licenza che un PIN (generamente usato semplicemente per controllare che chi acceda sia abilitato a farlo).

Re: Algoritmo per generare codice PIN

MessaggioInviato: 10/01/2020, 17:24
da aurigo
Si Sergio, in linea di massima quello che tu hai scritto è corretto.
Per maggior chiarezza, nelle macchine vi sono parametri che possono essere modificate solo da personale qualificato. Ad esempio il reset delle ore di funzionamento, che per ovvi motivi può essere paragonato al conta chilometri dell'auto. Vi sono macchine che se date in affitto gestione, la remunerazione viene quantificata in funzione della loro produttività, oppure se è necessario bypassare delle sicurezze sul funzionamento ecc. Questi solo solo alcuni esempi.
Come ID avrei pensato ad un ID a solo due cifre che identifica la macchina in quell'azienda. Normalmente in un'azienda possono esserci più macchine identiche, ma parliamo di un numero limitato. Normalmente massimo una decina. Poco importa se esistono più macchine con lo stesso ID. L'importante che esse non siano nella medesima azienda.
Avrei pensato di creare un codice a 7 cifre tipo questo:
Giorno di partenza di validità (2 cifre)
Mese di partenza della Validità (2 Cifre)
Durata di validità del codice (1 cifra). Permette di avere una validità fino a 9 giorni partendo dalla data su indicata. 9 Giorni direi più che sufficienti. Se poi dovesse essere necessario, viene creato un nuovo codice valido per altri 9 giorni.
ID della macchina (2 cifre)
Una Chiave di crittografia comune a tutte le macchine presenti in quell'azienda, che potrebbe essere anche ad esempio il codice cliente. Ovviamente la chiave di crittografia è conosciuta (inserita nelle macchine) in quell'azienda perchè identifica l'azienda e dal costruttore o chi dovrà generare la chiave.
Ciò che mi manca è la modalità su come crittografare o de-crittografare il codice.