Go Down

Topic: Nuova libreria pRNG (Read 2878 times) previous topic - next topic

Testato

#15
May 10, 2013, 09:40 pm Last Edit: May 10, 2013, 10:04 pm by Testato Reason: 1
il non spegnimento non esiste se parli di millis, perche' all'overload all'overflow e' come se avessi spento  :)
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

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

gpb01


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


... overflow ;)

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

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

Testato

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  XD
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

Il problema è proprio determinare quanto un evento non è deterministico  ;)
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.

Etemenanki

#19
May 11, 2013, 12:24 pm Last Edit: May 11, 2013, 12:28 pm by Etemenanki Reason: 1
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 :P :D) ... 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 :P

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 ?
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

gpb01


Il problema è proprio determinare quanto un evento non è deterministico  ;)
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". ;)

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

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 XD XD XD
Search is Your friend ... or I am Your enemy !

leo72

@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à.

gpb01


...
@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 ;) ... ma per le esigenze reali credo che quanto hai già fatto sia più che sufficiente ;)

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

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

leo72

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

Etemenanki

#24
May 11, 2013, 02:56 pm Last Edit: May 11, 2013, 02:58 pm by Etemenanki Reason: 1
>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  ]:D
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

leo72


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  ]:D

Alla fine viene fuori un superchip crittografico  ;)

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

Testato

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
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Etemenanki

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.
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

gpb01


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

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

Testato

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up