spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Elettronica > E. Digitale

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 09-11-2013, 13.36.36
L'avatar di aldofad
aldofad aldofad non è collegato
Robottaro sostenitore
 
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 42
Messaggi: 936
Potenza reputazione: 85
aldofad Il suo nome è noto a tutti
Invia un messaggio via MSN a aldofad Send a message via Skype™ to aldofad
Predefinito Codificatore seriale

Ciao a tutti,
qualcuno sa se esiste sul mercato un piccolo micro che posto in coppia come bridge in una comunicazione seriale è in grado di criptarla <--> decriptarla?

Ciao!
Rispondi citando
  #2  
Vecchio 21-11-2013, 04.01.36
L'avatar di aldofad
aldofad aldofad non è collegato
Robottaro sostenitore
 
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 42
Messaggi: 936
Potenza reputazione: 85
aldofad Il suo nome è noto a tutti
Invia un messaggio via MSN a aldofad Send a message via Skype™ to aldofad
Predefinito

Allora, in questo tempo ho ricercato parecchio e non ho trovato nulla, quindi bisogna fare da se'.
Ho adottato due Arduini Uno in modalità standalone a 8 MHz per criptare una comunicazione seriale bidirezionale.
Essendo bidirezionale ci sono piu' opzioni rispetto ai sistemi crittografici monocanale (ad esempio Wiegand), è pertanto pensabile l'adozione di un sistema a chiave pubblica/privata.
Ecco allora l'implementazione a chiave pubblica/privata per Arduino tradotta in modo diretto dalla teoria matematica di base.
Ognuno dei due Arduini ai capi della comunicazione possiede una chiave pubblica e una privata:
Codice:
struct CryptPublic {
  long n;
  long e;
};

struct CryptPrivate {
  long n;
  long d;
};
All'inizio della comunicazione i due Arduini rendono note in chiaro le loro chiavi pubbliche.
A questo punto ognuno dei due Arduini puo' criptare una cifra utilizzando la chiave pubblica dell'altro.
Codice:
long crypt(CryptPublic cryptPublic, long in) {
  long powME = in^cryptPublic.e;
  return powME mod cryptPublic.n;
}
La cifra criptata potrà essere decriptata solo dal destinatario utilizzando la propria chiave privata:
Codice:
long decrypt(CryptPrivate cryptPrivate, long in) {
  long a = in^cryptPrivate.d;
  return a mod cryptPrivate.n;
}
La vera difficoltà sta nel fatto che dobbiamo scegliere correttamente n, e, d (che si chiamano coprimi) in modo tale da cozzare dritti nel più grande mistero di tutte le scienze, i numeri primi. Da secoli si cerca una formula che ritorni il numero primo successivo a un numero primo noto. Una leggenda dice che Riemann l'avesse scoperto ma la domestica butto vià gli appunti dopo la sua morte. Oggi ci resta solo la capacità di calcolare la densità di probabilità di trovare un numero primo in certo range (Ipotesi di Riemann). In questo caso sfruttiamo la nostra incapacità matematica di ricavare i fattori di una moltiplicazione da un prodotto noto nel caso in cui i fattori siano due primi diversi tra loro.
Un range iniziale di coprimi l'ho già calcolato io ed è pronto all'uso in tre array:
Codice:
#define TOT_CRYPT_COMB 7
/* questa selezione e' stata prodotta utilizzando CoprimeSelector un mio algoritmo */
/* Gli n */
const long cryptNarr[TOT_CRYPT_COMB] = {14, 22, 26, 15, 21, 33, 39};
/* Gli e */
const long cryptEarr[TOT_CRYPT_COMB] = { 5,  3,  5,  7,  5,  7,  5};
/* I d */
const long cryptDarr[TOT_CRYPT_COMB] = { 5,  7,  5,  7,  5,  3,  5};
Con i valori sopra è possibile inizializzare correttamente le classi:
Codice:
CryptPublic cryptPublic = {cryptNarr[cryptIdx], cryptEarr[cryptIdx]};
CryptPrivate cryptPrivate = {cryptNarr[cryptIdx], cryptDarr[cryptIdx]};
Questo è tutto ma teniamo presente di alcuni limiti imposti da Arduino.
Utilizzando Arduino con questa basilare implementazione ci si imbatte subito nel limite massimo della cifra rappresentabile da un long quando si fa il calcolo della potenza, pertanto i coprimi che ho fornito vanno bene solo per criptare una cifra fino a 12, ed è il massimo che si può fare. Non è quindi possibile criptare un byte poichè varia da 0 a 255. Tuttavia questo sistema va comunque benissimo per criptare velocemente un codice numerico immesso da un tastierino utente. Teniamo anche presente l'ottima velocità in esecuzione per essere un sistema a chiave pubblica/privata.
Se qualcuno vuole il sorgente completo, incluso l'algoritmo per selezionare i coprimi, chieda.

ciao

Ultima modifica di aldofad : 21-11-2013 alle ore 04.15.07
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Seriale su pgc pgd gyppe E. Digitale 0 17-03-2010 13.47.34
comunicazione seriale deusexmachina P. in C, C++ 19 01-02-2009 18.25.37
Serie f18, pwm e seriale... Milton E. Digitale 46 09-11-2008 18.51.43
Seriale Cyber'93 Elettronica 14 20-04-2005 14.01.21
seriale Iguana Elettronica 4 18-06-2004 22.38.18


Tutti gli orari sono GMT. Adesso sono le: 18.09.45.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB