
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
Archivio: crypto@sikurezza.org Soggetto: Re[2]: One time key Mittente: Sorrow The Prince Data: 1 Feb 2001 09:26:56 -0000
ola antirez
Wednesday, January 31, 2001, 5:09:55 PM, you wrote:
a> ola'!
ciao =)
la mia idea e' questa:
1) Key n bits (grossa, anche qualche centinaio di K)
2) KeyStream = RAND (Key, offset, len)
3) C = M xor keyStream
io e il ricevente ci passiamo la chiave in maniera sicura, magari
vedendoci =) ce la passiamo grossa in modo da sfruttarla il piu'
possibile, visto che e' difficile vedersi spesso...
quando devo criptare un messaggio M, uso un pezzo di quella chiave,
a partire da offset per la lunghezza len (magari questa poi sara'
fissa...)... generando quindi il KeyStream...
faccio lo XOR del messaggio con il KeyStream...
a questo punto dovrei avere la sicurezza dell'One Time Pad: senza
chiave non mi decripti :)
devo comunicare in chiaro il nome assegnato alla chiave (nel caso
utilizzassimo piu' chiavi... per riconoscerla ecco..), l'offset dal
quale inizio ad utilizzarla, e la lunghezza che utilizzo.
cosi' che il ricevente sappia generare lo stesso KeyStream...
la sicurezza deve essere certa in (1): il canale piu' sicuro e'
vedersi di persona (esempio)... orbene siccome la key che ci
passeremmo io e l'ipotetico ricevente e' utilizzata come seme,
se questa e' grossa la potremo sfruttare molto nel tempo...
o magari affidandomi ad un RSA con key grossa come l'universo :)
sempre sperando che qualcuno non abbia trovato un sistema veloce per
fattorializzare (si dice cosi'? perdonatemi :p) un numero...
ma le speranze... sono spesso vane =)
ovviamente la sicurezza sta nel generatore e nella key...
se trovassi un generatore che sono certo non crei numeri predicibili
dopo tot passi (avevo letto che i generatori di numeri pseudo-casuali
che sfruttano i registri a retroazione lineare si ripetono dopo un
toto di passi...) e, nel caso, *so* dopo quanto si ripetono o sono
predicibili, orbene, so quanto il mio messaggio puo' essere lungo al
massimo...
ipotizziamo che questo algoritmo esista...
allora l'unico punto "debole" e' la chiave, cioe' la sua lunghezza...
perche' un brute force dovrebbe provare 2^n (dove n e' la lunghezza in
bit della chiave) chiavi e quindi generare 2^n KeyStream da poi
provare con il messaggio criptato...
teoricamente un attacco intelligente sarebbe crearsi tutti i KeyStream
possibili, in modo da averli pronti per decriptare ogni messaggio
cifrato utilizzando lo XOR...
quindi mi chiedo: quanto lunga dovrebbe essere il seme per assicurarmi
che un attacco del genere impieghi anni luce per essere portato a
termine?
non c'e' modo di trasformare questa linearita' della generazione del
KeyStream in qualcosa di piu' complesso (ad esempio due chiavi di n
bits in ingresso al RAND generator, in modo che un brute force debba
fare (2^n * 2^n) tentativi per creare un KeyStream valido)?
a> Questo e' uno "stream cipher". La chiave e' il seme, non quello che generi
a> per fare l'xor, quello e' il key stream. La sicurezza di una cifratura
a> di questo tipo sta tutta nella lunghezza della chiave e nella bonta'
a> della generazione dei numeri pseudo casuali. Puoi usare un block cipher
a> in counter mode per fare questo, o una funzione crittografica ad una via.
ho gia' implementato questo schema usando blowfish e
Hi = E(Mi)[H(i-1)] XOR H(i-1)
cioe' criptando con kiave Mi il predente blocco e xorandolo con lo
stesso (w i neologismi :)
a> C'e' un attacco abbastanza insidioso pero':
a> 1) Non puoi controllare l'integrita' dei dati senza un HMAC
beh potrei fare un SHA del messaggio in chiaro e poi criptarlo con il
messaggio... non andrebbe bene?
or che ci penzo, se uno un po' +stardo dentro mi modificasse uno dei
byte iniziali, lo SHA non tornerebbe mai...
senza che il ''ardo (^^) sia stato in grado di decifrare, puo'
comunque arrecarmi danno...
avresti un'idea? =)
a> 2) Se io penso che nel tuo testo sia presente all'inizio la parola
a> "Caro" posso fare l'Xor dei primi quattro bytes con "Caro" ed
a> ottengo quel pezzo di key stream, poi faccio l'xor tra questo
a> ed il testo che voglio "spooffare", ed ottengo un ciphertext valido.
ecco... verissimo...
ad esempio la signature... se un tizio sapesse che metto la signature
nel messaggio cifrato, avrebbe la possibilita' di generare tre righe
valide ma spoofate (con una o due efe? :)))
di certo io starei attento a ripetere del testo, ma un ipotetico
utente no... forze che con la questione di prima si risolve anche
questa?
a> ciao,
ciao e grazie
a> antirez
_.._ _.._
,','"_:./\/\,'_ `.`. Sorrow The Prince
/_:--:_ ( oo ) _:--:_\ uin( 11603828 ) - GiR 239
/ `'`vv'`' `\ www.s0rr0w.net
--------------------------------------------------------------------------
informazioni sui comandi supportati da questa ml: http://www.sikurezza.org
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005