Pages: 1 [2] 3   Go Down
Author Topic: Nuova libreria pRNG  (Read 1598 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il non spegnimento non esiste se parli di millis, perche' all'overload all'overflow e' come se avessi spento  smiley
faccio una classifica per come la vedo io:

Dal peggiore al migliore
- random senza seed o con seed fisso
- random con millis come seed
- random con analog come seed
- pRNG

« Last Edit: May 10, 2013, 03:04:17 pm by Testato » Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Switzerland
Offline Offline
Faraday Member
**
Karma: 84
Posts: 4296
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il non spegnimento non esiste se parli di millis, perche' all'overload e' come se avessi spento  smiley
...

... overflow smiley-wink

Si, ma come ti ho spiegato la sequenza è chiamata da eventi già di per se casuali, quindi ... credo che sia NECESSARIAMENTE essa stessa casuale smiley-wink

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

certo, ma qui e' come la questione degli antifurti, ogn'uno decide a che livello arrivare.
ad esempio l'affidabilita' della pRGN, che per me e' gia' un qualcosa di impressionante, di inespugnabile al solo pensiero, per altri non lo e'. Leo stesso alla fine dice che se si vuole piu' sicurezza esistono metodi di piu' alto livello.
Quindi se a te basta la millis va bene cosi', sei tu a decidere. Per me basta anche la random senza seed  smiley-lol
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema è proprio determinare quanto un evento non è deterministico  smiley-wink
In crittografia non si dà mai per scontato nulla.

A noi inserire come seed del generatore random il valore di millisecondi passati dall'accensione dell'Arduino o di un computer pare un valore molto casuale. Per i crittoanalisti invece non lo è assolutamente. Un protocollo crittografico che prende il tempo trascorso dall'accensione della macchina è considerato con un livello di sicurezza pari a zero perché è replicabile, anche se in condizioni estreme: bisognerebbe calcolare il tempo esatto al us di avvio del SO, del software e poi prendere il momento esatto in cui è stato prelevato quel valore. Ma è replicabile.

Eventi invece non dipendenti da fattori esterni sono considerati più sicuri. Certo, può capitare che i 2 oscillatori interni del micro (quello del WDT e quello del clock di sistema)  abbiano la stessa identica tolleranza per cui all'avvio girino perfettamente sincronizzati. In questo caso si potrebbe allora introdurre altra entropia leggendo ad esempio il valore del sensore di temperatura che è integrato in molte MCU della serie Atmega ed Attiny, avendo in questo modo altri 8/10 bit di entropia certa (è difficile che in 2 stanze ci sia la stessa identica temperatura ambientale esatta al centesimo di grado).
Oppure, iniziando ad usare hardware esterno, utilizzare ad esempio il rumore di uno zener amplificato con un transistor o un opamp. Ma qui si inizia ad usare componenti extra, e si esulo dallo scopo per cui ho scritto la pRNG: fare con quello che ci si ritrova in casa.
Logged


Disperso nel nauseante oceano della burocrazia
Offline Offline
Edison Member
*
Karma: 74
Posts: 2460
Io sono l'ultimo,
e parlero' al vuoto
in ascolto.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Be', il sistema che avevo progettato quando ero sotto naja prevedeva proprio una soluzione hardware di quel tipo ... la giunzione di un transistor polarizzata inversamente (che ho sempre usato anche come generatore di rumore bianco per le tarature audio) amplificata, squadrata, e conteggiata ogni secondo in una diversa banda (arrivi tranquillamente a 50KHz, quindi di numeri casuali in quel modo ne generi finche vuoi ... che piu casuali di cosi si muore smiley-razz smiley-grin) ... pero', sempre hardware esterno extra, e' ... anche facendo tutto il lavoro di filtraggio e conteggio all'interno dell'arduino, ti serve sempre il transistor, almeno un'operazionale doppio, ed un po di componenti discreti ... non molta roba, ma sempre piu di zero smiley-razz

EDIT: leo, e mettendo una ntc (se gia non hai il sensore termico di cui parli) su un paio di ingressi analogici e lasciando gli altri aperti per leggere il rumore, magari connessi a piste lunghe terminate a vuoto che facciano da "antenne", e poi usando tutti questi valori, magari scramblerando uno con l'altro con delle exor ? ... non penso che una cosa simile possa essere replicata tanto facilmente, specie la lettura di valori random delle analogiche lasciate aperte, ed i componenti esterni sarebbero semplicemente una o due pastiglie ntc, o meglio ancora una ntc ed una ptc, cosi non potrebbero essere uguali neppure per tolleranza ?
« Last Edit: May 11, 2013, 05:28:55 am by Etemenanki » Logged

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Switzerland
Offline Offline
Faraday Member
**
Karma: 84
Posts: 4296
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema è proprio determinare quanto un evento non è deterministico  smiley-wink
In crittografia non si dà mai per scontato nulla.

A noi inserire come seed del generatore random il valore di millisecondi passati dall'accensione dell'Arduino o di un computer pare un valore molto casuale. ..........

Si, ovviamente Leo, il valore di millis() è chiaramente ripetibile ed è per questo che ti parlavo di un evento esterno NON deterministico (e quindi di sua natura CASUALE) che quindi rende casuale anche il valore di millis() usato per il seed.

La mia questione nasceva difatti da UN particolare caso che stò affrontatndo in questi giorni dove ... non è comunque richiesta una sicurezza a livello "militare". smiley-wink

Se avessi bisogno di maggiore sicurezza, come sai, avrei aggiunto il chip di cui abbiamo più volte parlato ed avrei risolto smiley

Guglielmo

P.S. : Tranquillo che sono comunque conscio delle problematiche che ci sono dietro ... ho scritto il mio primo algortmo DES su ... un Apple IIe (con la scheda USCD Pascal a bordo) ... un "tot" di tempo fa ... come puoi immaginare smiley-lol smiley-lol smiley-lol
Logged

Search is Your friend ... or I am Your enemy !

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@etemenanki:
la soluzione con HW esterno è sempre la migliore, soprattutto usando dei generatori di entropia difficilmente influenzabili, e lo zener è uno di questi insieme ai termistori.
Spiegami però perché usare l'NTC, c'è qualche motivo rispetto al PTC?

Tornando al sensore integrato, molte MCU ce l'hanno, l'Atmega328 ce l'ha. Con le vecchie versioni dell'IDE era possibile leggerlo direttamente dal codice di Arduino selezionando il pin 8, con le versioni più recenti questo non è più possibile perché il core mi pare che filtri gli indirizzi che vanno oltre ai pin fisici del micro quindi bisogna lavorare a mano.

@guglielmo:
Tempo fa ho fatto dei test ed avevo anche scritto una piccola libreria (simplePRNG) prima di abbandonare la strada del sensore interno. Essa all'avvio leggeva 4 pin analogici ed il sensore interno ed usava l'entropia estratta come seme per un generatore di numeri casuali derivato da un vecchio algoritmo di 20 anni fa che avevo trovato in rete e che si basava esclusivamente sull'uso di numeri interi. I valori che dava non erano male.
Si potrebbe magari combinare il setup delle 2 lib, ossia unire la lettura delle discrepanze fra gli oscillatori interni alla lettura del sensore di temperatura e di alcuni pin analogici per avere ancor più casualità.
Logged


Switzerland
Offline Offline
Faraday Member
**
Karma: 84
Posts: 4296
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
@guglielmo:
Tempo fa ho fatto dei test ed avevo anche scritto una piccola libreria (simplePRNG) prima di abbandonare la strada del sensore interno. Essa all'avvio leggeva 4 pin analogici ed il sensore interno ed usava l'entropia estratta come seme per un generatore di numeri casuali derivato da un vecchio algoritmo di 20 anni fa che avevo trovato in rete e che si basava esclusivamente sull'uso di numeri interi. I valori che dava non erano male.
Si potrebbe magari combinare il setup delle 2 lib, ossia unire la lettura delle discrepanze fra gli oscillatori interni alla lettura del sensore di temperatura e di alcuni pin analogici per avere ancor più casualità.

Se è per divertirci si può fare smiley-wink ... ma per le esigenze reali credo che quanto hai già fatto sia più che sufficiente smiley-wink

Del resto, se uno ha proprio delle esigenze particolari ... c'è sempre quel piccolo chip che costa una miseria smiley-lol

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quel chip non lo voglio usare. Per principio  smiley-yell
Logged


Disperso nel nauseante oceano della burocrazia
Offline Offline
Edison Member
*
Karma: 74
Posts: 2460
Io sono l'ultimo,
e parlero' al vuoto
in ascolto.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

>leo: no, nessuna ragione particolare per usare ntc al posto di ptc, parlavo di usare un ptc ed un'ntc su due diversi canali cosi da avere sempre valori differenti e non prevedibili, dato che se con 2 ntc (o ptc) c'e' il rischio, per quanto remoto, di beccarne 2 dello stesso lotto di produzione e con la stessa tolleranza, usando due componenti con comportamenti opposti si elimina anche quel minimo rischio, massimizzando la casualita' ... in quanto allo zener, preferisco il transistor polarizzato inversamente, perche' gli zener in genere sono progettati per rendere il minor rumore possibile, mentre i transistor generici no ... da vecchie prove che avevo fatto (secoli fa), con lo stesso circuito, un comunissimo BC237 con la base a massa e l'emettitore polarizzato positivo mi dava quasi il triplo di banda di rumore di uno zener ...

EDIT: allora se ci mettiamo pure una fotoresistenza e' anche meglio, altra sorgente di livello casuale ... se andiamo avanti cosi, ce lo frega la cia  smiley-twist
« Last Edit: May 11, 2013, 07:58:53 am by Etemenanki » Logged

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

un comunissimo BC237 con la base a massa e l'emettitore polarizzato positivo mi dava quasi il triplo di banda di rumore di uno zener ...

EDIT: allora se ci mettiamo pure una fotoresistenza e' anche meglio, altra sorgente di livello casuale ... se andiamo avanti cosi, ce lo frega la cia  smiley-twist
Alla fine viene fuori un superchip crittografico  smiley-wink

Comunque un grosso limite è la bassa risoluzione dell'ADC: 10 bit sono veramente pochi per avere elevati valori di entropia nell'immediato periodo.
Logged


0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi chiedervo ma come funziona, giusto in due parole, l altro lato del discorso crittografico, cioe la decrittazione ?
Cioe se io metto due arduini in comunivazione, fa un lato spedisco un testo segreto, cripyato in basealla pRGN, dall altra parte ricevo il dato criptato ma non posso ricreaemi io la chiave, e nemmeno posso spedirmi la chiave in chiaro altrimenti intercettando testo e chiave sono fregato ?
Se cripto anvhe la chiave sono punto e a capo
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Disperso nel nauseante oceano della burocrazia
Offline Offline
Edison Member
*
Karma: 74
Posts: 2460
Io sono l'ultimo,
e parlero' al vuoto
in ascolto.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Be, no, dovresti usare un'algoritmo crittografico a doppia chiave ... una e' pubblica, e viene liberamente distribuita e serve SOLO per crittare, mentre l'altra la conosci solo tu e ti serve per decrittare ... il sistema e' asimmetrico, quindi la chiave che e' stata usata per crittare non potra' mai essere usata per decrittare.
Logged

"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Switzerland
Offline Offline
Faraday Member
**
Karma: 84
Posts: 4296
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi chiedervo ma come funziona, giusto in due parole, l altro lato del discorso crittografico, cioe la decrittazione ?
.................

Un'introduzione ai vari metodi di criptografia abbastanza ben fatta e scritta in modo chiaro ... http://techblog.rosedu.org/from-0-to-cryptography.html ... dagli una letta smiley-wink

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Pages: 1 [2] 3   Go Up
Jump to: