Algoritmos HASH

Algoritmos HASH

Un hash es un algoritmo matemático el cual obtiene de un archivo, un texto, un número, un lo que sea, una secuencia de caracteres con una longitud fija, es decir mediante un valor de entrada de longitud indefinida, obtenemos como salida una secuencia con una longitud fija de caracteres. Por ejemplo la palabra “Arithmos” le corresponde un hash con el algoritmo md5 de “fc79f1497d77cefc60ddde4345ea7437″ y a estas dos palabras “Joaquín Martínez” le corresponde el hash md5 “80e3ac98136b907181702294c9a7b0a4″.Lo importante de un algoritmo hash es que es muy fácil transformar los datos de entrada en los de salida, pero muy difícil, por no decir imposible, hacerlo al contrario, es decir con el hash obtener el valor de entrada, de modo que estamos representando unívocamente un conjunto de datos.

función hash(mensaje)= hash

hash-flow.png

Su uso varía desde la aseguración de la integridad de mensajería, se genera un hash antes de su envío y se compara con otro hash generado cuando se ha recibido, si ambos hash son iguales, el mensaje no ha variado, validación de documentos comprobando que su hash inicial coincide a posteriori validando que el documento no se ha modificado, firma, autenticación y validación de contraseñas, un servidor guarda el hash de la contraseña y cuando el usuario introduce la contraseña, se genera su hash y se compara con el almacenado en el servidor de modo que no se guardan contraseñas en los servidores evitando su robo, si todavía existe alguno que no lo hace … 😦

Con todo esto ya nos podemos hacer una idea de cuáles pueden ser sus características.

  • Imposibilidad de obtener el elemento de entrada a partir del hash
  • Imposibilidad de encontrar un conjunto de datos diferentes con el mismo hash (matemáticamente es improbable pero puede ocurrir)
  • Transformación de un elemento de tamaño indefinido en otro de tamaño fijo
  • Facilidad de cálculo

Los algoritmos de generación hash más conocidos son el MD5, SHA-1 y SHA-2 aunque hay unos pocos más ;-).

MD5. Es un algoritmo de 128 bits el cual no es seguro actualmente y no se usa a no ser para usos donde no sea necesaria mucha seguridad. El código hash se genera en 64 pasos y al final obtendremos un texto de 32 caracteres.

Existen páginas con millones de hash y su asociación hash y en cuestión de segundos, estaría al descubierto la palabra. He realizado una prueba en md5online.es y el hash F81AA6CEBB7F4B382F153383DD15695D de la palabra “palíndromo” ha sido descifrado en un par de segundos.

Arithmos -> FC79F1497D77CEFC60DDDE4345EA7437

SHA-1. Parecido al MD5 pero con 160 bits y necesita 80 pasos para obtener un hash de 40 caracteres. Como el algoritmo MD5, se han encontrado colisiones y no es seguro utilizarlo.

Arithmos -> SHA-1 -> 40 caracteres -> A58A0B92E639465AE50F4D14B4578CA5355087A5

SHA-2. Basado en SHA-1 pero su diseño es diferente y el rango de salida es mayor. De este, existen variedades como el SHA-224, SHA-256, SAH-384 o el SHA-512. Este último con 80 rondas y una palabra de 160 bits y 128 caracteres de longitud

Arithmos -> SHA-256 -> 64 caracteres -> 9F0C067C868304FF6BEA9F087DFCE52E4A4ADB433AA72AA0536388BFF52B4BC4

Arithmos -> SHA-512 -> 128 caracteres ->

C27460343460AF645D0731498BF69F85A63635F80A260A667A6DB72596F8E602CF8A9894889B0F9F9FAC4B3441CAD73D9F69D2A05924CEC2E46C8BCAD2C75893

Desde la WEB passwordsgenerator.net podréis genera cuantos hash queráis.

En hashtoolkit.com he realizado la obtención de la entrada mediante el hash con la palabra “palíndromo” mediante bases de datos de palabra y hash para md5, SHA-1, SHA-256, SHA-384 y SHA-512 con resultado positivo, es decir tienen un conocimiento previo de la palabra y su hash de ahí que se pueda comparar y encontrarla.

Pd: Existen bases de datos de hash de contenidos maliciosos para su consulta, lo guardamos todo!

Probabilidad en el bingo

Probabilidad en el bingo
En una partida de bingo existen muchas matemáticas escondidas, la más clara es la probabilidad que tenemos para que nos toque un bingo en una partida y es fácil, o lo que es lo mismo al cociente del número de casos posibles, es decir el número de cartones que jugamos y el número de casos totales o el número total de cartones jugados. Si yo juego 2 cartones y se han vendido 200 cartones, tengo un 1% de probabilidad que me toque el bingo, pero existe otra probabilidad más curiosa;
¿podemos preguntarnos ¿Qué probabilidad existe que se cante bingo (de 90 bolas, aplicable al de 75) en una determinada bola ? en otras palabras que probabilidad existe para que algún jugador cante bingo en la bola 57.
Pues esto se calcula mediante la distribución hipergeométrica, donde k sería los elementos que presentan la característica de éxito (cantidad de números del cartón, 15), x es el valor de la variable o el número de aciertos en cada extracción, N es el tamaño de la muestra, 90 bolas o 75 para Bingo 75 y n es en nuestro caso la bola actual en cada extracción.
FormulaHipergeometrica.png
Sustituimos y para un solo cartón:
hipergeometrica01.png
(con esto podríamos calcular también la probabilidad de acertar 6 números en la bola 40 por ejemplo)

Por ejemplo la probabilidad para un cartón de cantar bingo en la bola 65, sería de 0,00452826 o de un 0,45% para un cartón jugado,

hipergeometrica02.png

por tanto

hipergeometrica03.png

 

bingo02

A continuación un ejemplo de distribución hipergeométrica para 250 y 1000 cartones (en azul y rojo respectivamente) en el que se aprecia que para el caso de 250 a partir de la bola 63 estamos jugando a la cara o cruz (50%) mientras que para 1000 cartones, se produce este efecto en la bola 58.

bingo03

En base a la teoría, vamos a ver un caso real de partidas de bingo en el que se puede apreciar la probabilidad que existía de cantar bingo en cada partida

bingo04

Y el número de bola en el que se cantó bingo en cada una de estas partidas.

bingo05

En azul podemos apreciar la probabilidad que existía en cada partida para alguien que cantó un bingo. El bingo más tempranero, lo encontramos con la bola 52 con un 2,8% de probabilidad y el más tardío con la bola 71 y un 99,57% (Sí o sí). Para el más tempranero, en una situación real de un bingo comercial, es posible que el jugador además de optar al premio de bingo, lo hiciera también al bingo acumulado, ya que en una sala comercial suele estar en ese entorno de extracciones.

Para finalizar y siguiendo con el tema bonguero, les obsequio con una aplicación desarrollada por un servidor y que como no puede ser de otro modo, se trata de un bingo.
bingo01

Entre otras características se pueden enunciar:

  • Interfaz en español e inglés
  • Interfaz gráfica Windows 10
  • Alta visualización del panel numérico, número extraído y últimos números
  • Sencillez de uso mediante control de un solo botón
  • Dictado automatizado de recaudación y expresiones de bingo
  • Configuración predeterminada. Por defecto tiene opciones válidas de juego para ambos idiomas
  • Inclusión de otro tipo de recaudaciones o premios configurables
  • Configuración avanzada. Permite configurar datos de la aplicación , voces, expresiones dictadas por la aplicación o impresión de cartones
  • Inclusión de expresiones configurables por el usuario sobre los números que se van cantando durante la partida, por ejemplo 22 los patitos, 90 el abuelo, 5 por el…, etc. Los que uno quiera 😉
  • Cálculo de progresión de partida y probabilidad de obtención de bingo.
  • Manual de ayuda

La pueden descargar gratuitamente desde mi página WEB wakicode.com, y donde pueden encontrar el enlace de descarga al final del último artículo. Las mates y el desarrollo de software que bien se llevan 😉 !!

Existe un fantástico libro escrito por el matemático Miguel Córdoba Bueno llamado Anatomía del Juego en el que pueden ver y disfrutar el desarrollo matemático de los resultados y del que en otro momento les haré un pequeño resumen sobre las probabilidades de los juegos de azar.

anatomia del juego

La ley de Moore

La ley de Moore

Antes de nada, voy a introducirles en contexto. Allá por el año 1947, dos investigadores estadounidenses, llevaron a cabo investigaciones con materiales semiconductores (en este caso el Germanio) descubriendo el transistor y no fue hasta 1954 cuando se creó el primer transistor de Silicio. El transistor, grosso modo, se trata de un conductor gobernado por un tercer conductor, es decir como si tuviéramos una goma de agua para regar el jardín y entre medias hubiera un pequeño grifo con el que pudiéramos controlar el caudal; esta funcionalidad nos permitió realizar amplificaciones de señales pequeñas que gobernaban otras más grandes mostrando un reflejo de la pequeña en la grande entre otras funciones y como todo artefacto físico contiene en su interior matemáticas que nos asombrarían. Más tarde el hombre se aventuró a crear circuitos integrados y se llamaban así porque integraban varios transistores y aquí es donde el ingeniero Gordon Moore (el señor tan simpático de la foto) en el año 1965 cuando era director de Fairchild Semiconductor (luego fue cofundador de INTEL) escribió un artículo en el que se aventuraba a predecir que el número de transistores se duplicaría cada dos años; si es verdad que el propio Moore fue cambiando la Ley adecuando los valores al futuro, pero no llegó a equivocarse mucho.

Moore

En 1971 el procesador Intel 4004 albergaba en su interior 2300 transistores, los cuales se unían con hilos de 10.000 nanómetros (que para que se hagan una idea, unas 10 veces mayor que un cabello humano). Para el que no esté habituado al nanómetro, en un milímetro caben 1.000.000 de nanómetros! 1m=109 nm, 1mm=106nm

La sexta generación de procesadores del fabricante Intel se encuentra fabricada con tecnología de 14 nanómetros, de modo que en un milímetro caben unos 71500 transistores ( y se están desarrollando chips con tecnología de 7nm), lo que ocurre que además de aprovechar las dos dimensiones, se hace con las tres, de modo que el número de transistores que alberga actualmente un microprocesador doméstico es de 1.300.000.000 transistores o lo que es lo mismo, unos 4.800.000 de transistores en un milímetro cuadrado, (cifras increíbles, aunque para microprocesadores de ámbito profesional, las cifras son mayores).
En cuanto a la velocidad, el procesador 4004 a 740KHz, después de 50 años ha llegado a los 4GHz incrementándose en 5400 veces o en cuanto al rendimiento, los procesadores actuales son 90000 más eficientes que el 4004, ya que el consumo se ha reducido de igual modo. Las operaciones por segundo es otra cuestión a tener en cuenta, mientras que un procesador 8080 de 1974 a 2Mhz realizaba 640.000 instrucciones por segundo, ha llegado a las 159.000.000.000.000 de instrucciones por segundo que se producen ahora! (En la peli Figuras ocultas, usan un IBM de tarjetas perforadas que generaba 23000 instrucciones por segundo!)

s-l300

Si el ritmo llevado a cabo por la Ley de Moore fuera aplicado por ejemplo al consumo de combustible, un vehículo debería consumir 4 litros en toda su vida o si la velocidad de un cohete hubiera evolucionado igual, podríamos llegar a la luna en 60 segundos, pero en estos casos no ha sido así y también es verdad que la Ley de Moore está llegando a su fin, porque las estructuras moleculares están cerca (un átomo medio mide unos 0,34 nm) y ya existen materiales como el grafeno que suplirán este inconveniente y no se duplicará el número de transistores, pero si su capacidad de cálculo ( o los ordenadores cuánticos!).
Actualmente, Samsung espera poder fabricar procesadores de 10 nanómetros a finales de este año, mientras que el salto a los 7 nanómetros aún estaría en desarrollo. En el caso de otra empresa como TSMC, los procesadores de 10nm llegarían en breve, esperando dar el salto a 7nm en 2018. Por otro lado, Intel, espera dar el salto a los 10 nanómetros en 2017, mientras que los 7 nanómetros podrían llegar en 2019.

1999_Pentium4.jpg
(Intel concretamente fabrica sus chips de una manera distinta que el resto; un chip en 10 nanómetros de Intel es más avanzado que los de la competencia, al permitir una menor separación entre transistor y transistor (aunque ocupen el mismo espacio), lo que permite a la compañía integrar más transistores.

Por otra parte, se encuentra la optimización de coste de diseño y fabricación, es decir, ¿interesa fabricar un procesador? Para que se produzca esto, la venta debe estar garantizada y esta situación solo está al alcance de las grandes empresas, de hecho hasta que un producto no quede amortizado, los consumidores que somos nosotros debemos agotar las existencias de fabricación. Un ejemplo la empresa Qualcomm que fabrica los procesadores de nuestros móviles, tiene un procesador de 14 nm (Qualcomm Snapdragon series 800) y si embargo sigue fabricando y aumentando su stock con los de 28 nm cuyos beneficios son mayores (Snapdragon series 600 y 400)

Por último un gráfico de la progresión real de densidad de transistores desde 1970 hasta 2016 y donde la aproximación de Moore quedó patente.
NTransistores.png

Pd: Cuando era pequeño pensaba que en el año 2000 habría pistolas de rayos láser y los coches volarían, uhmmm, esto parece que es más lento de lo que pensaba. ¿interesará que vaya lento?.
Hace unos años vi una película llamada Mimzy en la que objetos con forma de juguete eran enviados al pasado para corregir el futuro y al nivel microscópico estaba escrito en el chip la palabra INTEL, ¿una predicción de la Ley de Moore? Les adjunto un video de la escena de la película