Escribo
este artículo a raíz de la noticia publicada hace un par de semanas sobre
el uso por parte de la Guardia Civil de hashes para identificar contenidos
pedófilos en las redes P2P.
Que es una
función hash? Una función hash es la que con uno o varios
parámetros de entrada (los que se corresponderían a una la clave primaria
identificadora del elemento en cuestión) vuelve un resultado. Dicho
resultado suele ser una posición dentro de una estructura de tamaño
prefijado (habitualmente se usa un vector o array).
Para que se
usa un hash?
Se usa para
conseguir un acceso directo (más técnicamente un acceso de coste 1) a la
información que se busca a partir de una clave primaria identificadora, y
mediante el resultado de la función hash se accede a la posición dentro
del array. Dicho array contendrá además de la clave primaria (luego
explicaremos porque es necesario almacenarlo), un apuntador a donde se
encuentra el elemento al que hace referencia.
Problemática
Por desgracia
la función de hash dado un parámetro o conjuntos de parámetros de entrada
(clave primaria) devuelve siempre un mismo número fijo de bits constante
(es decir el tamaño del array). Ahora supongamos que fijemos los bits
que devuelve una función hash a n. Con lo cual sabemos que existen
2^n-1 combinaciones posibles que pueda devolver la función de hash. Lo más
habitual para que quepa dentro de nuestro array es aplicar a dicho
resultado la función mod (resto de la división). Si existen muchísimos
más elementos diferentes que queremos buscar que el tamaño del array, al
aplicar el resto de la división, nos producirán colisiones, es decir,
elementos que estarán guardados en la misma posición del vector. Es por
eso que una solución es que en cada posición del vector este compuesta de
una lista con pares (clave primaria, apuntador a elemento) y así poder
buscar dentro de la posición del vector el elemento que estábamos
buscando.
Propiedades que ha de cumplir un sistema que use hash
Entre otras,
unas de las propiedades que ha de ofrecer una buena función hash es tanto
el algoritmo que use, como el tamaño del vector, como el que para entradas
muy parecidas ofrezca salidas totalmente diferentes (por contra, entradas
totalmente diferentes podrán devolver una misma posición del array). En
resumidas cuentas, ha de proporcionar una buena dispersión, lo que quiere
decir que no podemos permitirnos el lujo de tener zonas del vector con
colisiones y otras vacías, ya que no conseguiríamos ninguna ventaja si
siempre para buscar tuviéramos que estar buscado elementos en la lista de
colisiones de una posición concreta del array. De hay que sea muy
interesante aplicar a la buena función hash un modulo sobre un número
primo, es decir, que el tamaño del array normalmente tendrá un número
primo de posiciones.
Ejemplo de un sistema con hash de busquedas
de ficheros en redes p2p
Pongamos un
ejemplo sutilmente matemático para la demostración: Supongamos que
fijemos los bits que devuelve una función hash a n. Con lo cual sabemos
que existen 2^n-1 combinaciones posibles que pueda devolver la función de
hash. Finalmente aplicamos un modulo de un numero primo para saber donde
almacenarlo dentro del array. Si existen muchísimos más ficheros
diferentes en el mundo informático, en algún momento, que el tamaño del
vector de la función hash, tendremos posiblemente colisiones. Si usamos
como parametro de entrada de la función hash el checksum (sha, md5, etc)
de un fichero como identificador (clave primaria y única identificadora
del fichero) corremos en un grave error, ya que un buen sistema de cheksum
comparte propiedades similares a una buena función de hash, como que a
partir de el contenido de un fichero, pequeñas modificaciones nos den como
resultado un checksum totalmente diferente pero nada impide que cosas
totalmente diferentes devuelvan un mismo checksum. Nota: Es curioso de
apreciar que los sistemas basados en contraseñas suelen usar algunos o los
mismos algoritmos que se usan para cheksums y que por todos debe ser
sabido, el resultado de un checksum no corresponde a una única entrada, es
decir, puede existir varias contraseñas totalmente diferentes que
devuelvan el mismo checksum del algoritmo de contraseñas y que se pueda
acceder al sistema indiferentemente con una u otra. Conclusión:
comprobar el resultado de una función hash no implica que se corresponda a
una entrada determinada única (en este ejemplo un fichero o el contenido
de él), sino que esa entrada es una de las posibles que da como resultado
ese mismo resultado.
Con esto queremos hacer referencia a noticias
que pudimos leer en algunos lugares que se hacía echo de la aparición del
buscador "hispalis" de la Guardia Civil con cosas como: "El buscador
'Hispalis' es capaz de rastrear las redes P2P tras el rastro de estas
imágenes, que son 'inequívocamente' de contenido pedófilo."
Matemáticamente esta frase es erronea y esta fundamentada en una mala
deducción y lógica ya que: Si a->b no necesariamente b->a, eso
solo sucedería si a<->b. Fácil ejemplo de lenguaje coloquial para
entender estas funciones matemáticas:
Si se te mete
algo en el ojo lloras. Si lloras es porque se te mete algo en el
ojo. A mi entender no puede ser por otros motivos que uno
llore?
Volviendo a lo que queremos explicar, diferentes entradas
pueden dar lugar un checksum idéntico. Con esto no queremos espantar a la
gente sino explicar que podemos admitir o confesar que es altamente
improbable o estadísticamente apenas sucederá esta situación, pero nada
impide decir que existe alguna posibilidad de que suceda.
De
momento no tenemos acceso a Hispalis para saber si es este el único método
que usan, pero pueden llegar a incurrir en un error si así es. Es por este
mismo motivo me sorprende que diga la G.C. que considera que han de haber
varias coincidencias para considerar que se poseen contenidos pederastas
(5 o más) alegando que puedan ser descargas "accidentales".
Estaría más de acuerdo en afirmar que estas 5 coincidencias es
para evitar las colisiones, es decir, coincidencias en los resultados del
sistema hash en caso de ficheros diferentes. Así ya podríamos decir que
sería altamente improbable, pero no imposible, que tengamos en nuestra
posesión 5 ficheros que coincidan en el resultado hash y que además no
sean de nada relacionado con la pederastia. Por esto queremos entender
que ha sido más una mala deducción a la hora de informar sobre el
procedimiento de uso del sistema de hispalis por parte de algunos que
conforman el gremio periodístico tecnológico sensacionalista y que en el
ámbito técnico hace ver que el uso de un servidor por parte de la G.C.
pueda acusar bajo pruebas circunstanciales de algo que posiblemente no se
posee o no se pretendía poseer (sobretodo cuando puede ser el caso de una
simple coincidencia).
Fallos no contrastados pero probables
de acusar a gente inocente
¿Que sucedería
si alguien se dedicase a renombrar las fotos o videos pederastas por
nombres de fotos de actrices de moda o porno? ¿Nadie ha bajado una foto,
canción o película alguna vez que nada tenía que ver con su
nombre?
Formas sutiles que harían que el sistema hispalis no
fuera tan eficaz
Por ejemplo,
cambiar siempre los X primeros bits de un fichero harían cambiar el hash
pero seguirían pudiéndose buscar por el nombre y circulando estando fuera
del marco de alcance del servidor hispalis.
Posibles
modificaciones en los servidores actuales
Almacenar no
solo un hash único sino un conjunto de hash relacionado con la posible
modificación voluntaria de los X primeros bits.
En definitiva y
tratando temas colaterales: El hacking ético a sitios pederastas sigue
estando en la misma situación de antes y en el mismo punto de mira,
intentar asaltar, denunciar y destruir sitios privados de pederastas que
solamente son accesibles por contraseña y mediante pago y
acreditación. La nota de prensa solo favorece a la evolución de los
sistemas de servidores y clientes de búsquedas que usan dichos pederastas
estando de esta forma en sobreaviso.
Finalmente
sucederá algo parecido como lo que pasaba en el pasado con la droga? Es
más fácil coger al pequeño traficante o al que consume habitualmente o
esporádicamente sin ningún tipo de precaución que al que hace negocio y
distribuye los contenidos, para finalmente hacer público su detención y
finalmente dictaminar una sentencia judicial públicamente ejemplar y
desmotivadora para quien siga los pasos de este último.
También me
parece más bien hacer popular y así conseguir una buena forma de implantar
un servidor que finalmente sea usado para controlar y espiar quién y con
que frecuencia consume contenidos bajo copyrigth con la escusa de querer
acabar con los auténticos pederastas.
Personalmente, escribo esto
por haberme solicitado realizar un articulo técnico, y en ningún momento
tengo nada que esconder, es más, los que han tenido charlas conmigo con
webcam se han sorprendido por la cantidad de música original, dvd's y
libros que poseo.
Estáis todos
invitados a charlar conmigo de estos y otros temas que finalmente
acabaremos todos a tratar en la base del problema. El problema reside más
que nada en la ética de lo que se hace o de lo que está bien o mal visto a
juicio de otros. O se tiene o no se tiene (una buena ética).
Personalmente
opino que por desgracia sin dinero no se puede llegar a hacer apenas nada
en este mundo y nadie trabaja a cambio de nada (sentirse orgulloso de
realizar algo o obtener un reconocimiento también es una forma de pago por
tu trabajo). Así que deberíamos estar dispuestos de pagar por lo que
consumimos, pero eso si, por un precio justo y razonable. De ahí que mi
consumo sea en gran parte como apoyo y soporte como fan y seguidor tanto
de grupos musicales como de directores para seguir disfrutando de sus
aportaciones al mundo del arte.
DoN Miembro de la
AIH
 Esta obra está bajo una licencia de
Creative Commons.
|