Salve,
nell’affascinante campo delle radiocomunicazioni, una delle operazioni
che ha sempre avuto un aspetto magico, è sempre stata senza dubbio
alcuno, la possibilità di poter controllare a distanza, l’accensione o
lo spegnimento di uno o più dispositivi elettronici. Anni orsono ad
esempio, ricordo che alle prese coi ripetitori VHF, una delle esigenze
principali consisteva nel poterne comandare l’accensione o lo
spegnimento a distanza. Sicuramente, il metodo più semplice per
realizzare un controllo a distanza, consiste nell’adottare una chiave
DTMF, che può essere usata via radio o via filo e per svariate
applicazioni.
Una chiave DTMF si basa sostanzialmente sulla generazione di un gruppo di non meno di quattro toni audio, trasmessi generalmente via radio ad un ricevitore, dove, con opportuni circuiti elettronici, si provvede alla loro decodifica e se riconosciuti validi, all’attivazione di determinati dispositivi. Va ricordato che i toni audio che caratterizzano tale sistema, sono identici a quelli che si odono al ricevitore del telefono quando componiamo un numero telefonico. Essi sono generati in coppia, ed associati biunivocamente ad un numero, esattamente come illustrato nella tabella di fig.1, dove le coordinate verticali ed orizzontali, corrispondono alle due frequenze generate ed a quel numero associate. |
Un
tale dispositivo, senz’altro impeccabile nel funzionamento, dal punto di
vista della sicurezza non è per nulla affidabile; nel senso che,
soprattutto quando usato via radio, chiunque ricevendone il segnale,
potrebbe registrarne il codice ed usarlo impropriamente. Da qui la
necessità di criptare il codice, per rendere la chiave altamente
affidabile e sicura da intrusioni. Col circuito che vi propongo si
raggiunge tale obiettivo, la cui peculiarità principale consiste nel
dialogo che intercorre tra ricevitore e trasmettitore, grazie al quale il
codice inviato non è mai lo stesso, ma il risultato di una serie di
complesse operazioni, che come vedremo più avanti, risultano
difficilmente replicabili da eventuali intrusi.
Per ottenere questo risultato è necessario che i codici d’accesso siano due, il secondo dei quali non sarà mai trasmesso, ma usato solamente per le operazioni di mascheramento. Per rendere più comprensibile il processo di riconoscimento dei codici, ci riferiremo allo schema a blocchi esemplificativo di fig.2, dove trasmettitore e ricevitore sono rappresentati dai due blocchi denominati come “unità di comando” ed “unità remota”. Per semplificare, supporremo che i due codici siano pari a “12345” per il primo e “67890” per il secondo. Come s’intuisce, qualunque operazione di comando si completa in tre fasi distinte e consecutive, durante le quali unità remota e di comando, si scambiano alcuni dati nell’arco di due secondi circa.
Quando
inizialmente sull’unità di comando il pulsante di avvio “TX” viene
premuto, viene inviato il primo codice, cioè “12345” completando la
prima fase. Se nell’unità remota il codice sarà riconosciuto come
valido, sarà generato in modo del tutto casuale un nuovo codice di cinque
numeri (xxxxx), che sotto forma di interrogazione sarà ritrasmesso
all’unità di comando, concludendo la seconda fase. Tale codice sarà
ricevuto integralmente dall’unità di comando ed elaborato da un
algoritmo di mascheramento, sulla base del codice “67890” residente in
memoria. Il risultato di tale operazione darà origine a cinque nuovi
numeri pseudocasuali (yyyyy), che saranno nuovamente ritrasmessi come
risposta all’unità remota, avviando la terza fase. Questo nuovo codice
criptato ricevuto dall’unità remota, sarà confrontato con altri cinque
numeri, provenienti dal risultato di una elaborazione eseguita localmente
e del tutto analoga a quella avvenuta prima sull’unità di comando,
tanto da pervenire allo stesso risultato. Quindi, se il risultato di tale
confronto sarà vero, allora vuol dire che anche il secondo codice mai
trasmesso ed usato solo per il mascheramento è corretto; di conseguenza
il comando impartito all’unità remota potrà essere eseguito, con la
chiusura od apertura del relè d’attivazione in modo bistabile,
concludendo la terza ed ultima fase.
Com’è
evidente il primo gruppo di cifre o codice d’accesso, non varia mai tra
due o più comandi successivi. Quello che varia di volta in volta è il
secondo ed il terzo gruppo di cifre o codice criptato, di cui è quasi
impossibile prevederne il valore; rendendo vano qualunque tentativo di
registrazione dei codici e di violazione della chiave. Naturalmente ognuno
può programmare i due codici a proprio piacimento, scegliendone in modo
del tutto arbitrario il valore. Inizialmente, per semplicità abbiamo
supposto di lavorare con codici costituiti da cinque cifre, in realtà sin
dalle prime fasi di progettazione ho adottato codici ad otto cifre,
utilizzando tutti i simboli del tastierino. Quindi oltre ai numeri, il
codice può contenere anche gli altri simboli, come l’asterisco, il
cancelletto e le lettere A, B, C e D, per un totale di sedici simboli, coi
quali si ottengono 16^8 combinazioni diverse, cioè 4.294.967.296 chiavi
diverse. Una chiave così concepita, sarà in grado di funzionare e può
coesistere sullo stesso canale o sullo stesso filo assieme ad altre
chiavi; purché ovviamente abbiano codici diversi.
Circuito
elettrico
Il circuito elettrico visibile in fig.5 non ha bisogno di lunghe spiegazioni. Tutte le funzioni di elaborazione e controllo, e di gestione interrupt, sono svolte dal PIC-16F628, un fantastico microcontrollore prodotto dalla Microchip, all’interno del quale troviamo anche la memoria EEPROM per conservare i dati. Il compito di generare i toni e di demodularli è invece assolto dal MT8889C, un efficientissimo generatore e decodificatore di segnali DTMF, in grado di lavorare in vari modi di funzionamento.
Nel modo “BURST” adottato in questo caso, è in grado di produrre segnali di durata pari a 51 ms., intervallati da pause anch’esse di 51 ms., come mostrato nella fig.3. Per ulteriori approfondimenti, vi assicuro vale la pena di consultare il data sheet disponibile in rete. La comunicazione tra i due chip avviene su quattro fili di dati input/output, e su quattro linee di controllo. Il segnale di B.F. in uscita dal MT8889C deve essere inviato all’apparato trasmittente, mentre il segnale in ingresso deve provenire dall’apparato ricevente. Naturalmente qualora la chiave fosse utilizzata via radio, occorrerebbe collegare anche l’uscita PTT all’apparato ricetrasmittente.
Vediamo adesso come è possibile modificare i codici di funzionamento della chiave che inizialmente sono impostati da programma a “24*03*61” per il codice d’accesso, ed a “30*01*06” per il codice dell’algoritmo di mascheramento. Per poter modificare sia il codice d’accesso sia il codice dell’algoritmo, bisogna innanzi tutto dare alimentazione alla chiave tenendo premuto il tasto “A”, l’accensione del leed1 ci confermerà che il modo programmazione è stato attivato e che possiamo rilasciare il tasto. Bisogna adesso procedere digitando uno dopo l’altro, sedici simboli preventivamente annotati su carta, onde evitare di scordarli. Dopo la digitazione del sedicesimo simbolo, automaticamente, i prime otto simboli andranno a sostituire il codice d’accesso, ed i rimanenti otto il codice dell’algoritmo. Ovviamente, bisogna effettuare lo stesso tipo di inserimento su entrambe le unità, pena il mancato funzionamento della chiave.
Per quanto riguarda l’unita remota, ricordarsi che dopo la programmazione dei codici, il tastierino va rimosso dalla basettina, ed al suo posto va inserito il connettorino della basetta dei relè, il cui schema elettrico e visibile in fig.4, con evidenziati i punti dove effettuare la connessione. Durante la digitazione sul tastierino, il leed1 si spegnerà brevemente, a conferma del riconoscimento del dato da parte del software di gestione. Essendo i codici residenti e memorizzati sulla EEPROM interna del PIC, essi non andranno mai perduti nemmeno dopo lo spegnimento della chiave per successive utilizzazioni. |
Poiché
non ci sono punti di taratura, tutto dovrà funzionare al primo colpo,
sempre che non si siano verificati errori di montaggio o di digitazione
dei codici. Occorre soltanto regolare i due potenziometri, per dosare i
segnali a livelli opportuni; durante le mie prove, ho riscontrato che il
livello ottimale del segnale di B.F. misurato nel punto “Lev.”, è di
150 mVpp. Durante il funzionamento noterete che i codici scambiati tra
unità di comando ed unità remota, non saranno mai uguali; rimanendo
comunque garantiti, il perfetto funzionamento di tutto il sistema e
l’alto grado di inviolabilità della chiave.
Non
c’è altro da aggiungere, se non sottolineare l’esiguo numero di
componenti impiegati, grazie all’adozione di circuiti a logica
programmata. Lo stesso lavoro realizzato su circuiti a logica cablata,
come accadeva qualche anno addietro, avrebbe richiesto una gran quantità
di componenti elettronici, e costi proibitivi in termini di tempo e di
denaro. Credo con questo
di aver chiarito ogni aspetto del progetto, che vuole essere soprattutto,
uno studio di base per eventuali ampliamenti futuri, ed uno stimolo, per
chi volesse iniziare a studiare gli aspetti legati alla sicurezza nelle
comunicazioni digitali, ed alle tematiche della logica programmata.
Salutandovi, auguro a tutti buon lavoro e buon divertimento; e se lo
riterrete opportuno non esitate a contattarmi al mio indirizzo e-mail.
IT9DPX
- #135 - (FRANCESCO M.)