[LACNIC/Seguridad] Generación de IPv6 Frag ID, etc.

Iván Arce ivan.w.arce en gmail.com
Dom Feb 12 23:50:42 BRST 2012


On 2/11/12 8:09 PM, Fernando Gont wrote:
> Para complicar la cosa aún mas:
> 
> Pese a que el "Frag ID" de IPv6 es de 32 bits, si en el medio hubiera un
> traductor IPv6/IPv4, solo los low-order 16-bits son utilizados... lo
> cual ahce que, a la practica, uno probablemente tenga que considerar que
> el Frag ID tiene un largo efectivo de 16 bits.
> 
> En tales escenarios, si uno simplemente random()iza el frag ID, las
> posibilidades de colision son bastante posibles.
> 

"bastante posibles" es una definición un tanto ambigua pero estoy de
acuerdo en general, por eso es que lo que yo pregunte originalmente es
porque no utilizaban un  Lineal Congruential Generator (LCG) para genera
una sequencia pseudoaleatoria global

Fijate que eso es lo que utiliza OpenBSD:

http://www.openbsd.org/cgi-bin/cvsweb/src/sys/netinet6/ip6_id.c?rev=1.7;content-type=text%2Fx-cvsweb-markup

Y fijate que eso es "sospechosamente parecido" a la solución que
encontramos para generar query IDs de DNS hace 15 años:

http://www.openbsd.org/advisories/res_random.txt

De más esta aclarar que el query IDs de DNS es un campo de 16bits y que
las consideraciones sobre predictibilidad y probabilidad de colisiones
que señalás eran completamente aplicables en aquel caso.


A modo de anécdota: En aquel momento, la gente del proyecto BIND decidió
adoptar su propia solución para generar query IDs, un década después
terminaron adoptando el algoritmo de OpenBSD...

saludos,
-ivan





Más información sobre la lista de distribución Seguridad