HOME

Chiave attiva DTMF criptata

Introduzione

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.   

 

Funzionamento

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.

 I circuiti da impiegare sulle due unità, sono sostanzialmente identici, e differiscono tra loro per il solo fatto di avere il pin n° 18 del PIC collegato a massa oppure no. Nel primo caso il circuito si comporterà da unità di comando, nel secondo caso da unità remota. Anche il file HEX che utilizzerete per programmare i due PIC è unico, esso stesso testando il pin n° 18 del PIC, si predisporrà al funzionamento come unità remota oppure come unità di comando, lo potete richiedere gratuitamente al mio indirizzo e-mail.

 Descrizione dei comandi

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.

 Conclusioni

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.)