lunes, 1 de julio de 2013

Tarea 2 Generación Pseudo-aleatoria Segura

INTRODUCCIÓN
Dentro de la Seguridad de la información, existe actualmente una necesidad de usar algoritmos de encriptación, seguros, confiables y más que todo, cero vulnerables a ataques del tipo estadístico, encontrando áreas de oportunidad en la plataforma en la que son construidos éstos algoritmos.

Es importante conocer las capacidades de cada lenguaje o plataforma, ya que puede que uno esté mejor preparado para éste tipo de procedimientos, ya sea con funciones ya construidas dentro de alguna librería, o con un sistema optimizado, para que al momento de usar números aleatorios, como herramienta algorítmica el nivel de vulnerabilidad a ataques, sea el mínimo.

PLANTEAMIENTO DEL CASO DE ESTUDIO
Se decidió evaluar la generación pseudo-aleatoria de números, en 4 lenguajes; C, Java, Ruby y Python, de los cuales por el prestigio, antigüedad y utilidad son llamados por grandes comunidades de programadores, como lenguajes muy estables y útiles para diferentes tipos de tareas.

Por lo tanto decidí construir un algoritmo en éstas 4 plataformas con pequeñas variantes respecto a las funciones disponibles que se pueden utilizar en cada lenguaje para al final realizar una comparativa.

HIPÓTESIS
Se piensa que se obtendrá un mejor resultado en el lenguaje Python, debido a que ha sido desarrollado para éste tipo de experimentaciones y se han encontrado más funciones que ayudan a facilitar la construcción del algoritmo, después de éste le seguirá Ruby, ya que es de los lenguajes más modernos, muy utilizados para el desarrollo web, que es en dónde más se necesita la seguridad informática y compartiendo muchas características con Python, no sólo de sintaxis.

Siguiente a éste es posible que sea C, ya que se puede observar cómo las funciones para aleatorizar nuestros números  utilizan herramientas cómo el tiempo del sistema, para poder generar números aleatorios uniformemente distribuidos y por último ponemos a Java, ya que se sabe que está muy orientado a negocios, software empresarial, bases de datos y otro tipo de implementaciones, por lo tanto supongo que al momento de querer hacer éste tipo de experimentos es el último lenguaje de éstos 4 que escogería.

EXPERIMENTACIÓN

Ruby
Programa: 

Ejecución:

Ingrese la cantidad de numeros a procesar: 1000
Números repetidos por lo menos una vez: [10188, 35911, 106562, 28056, 64932]
Repeticiones totales 10


Python
Programa:

Ejecución:
Cantidad de numeros a generar: 1000
repetido encontrado: 77871
repetido encontrado: 77871
repetido encontrado: 61916
repetido encontrado: 78394
repetido encontrado: 13602
repetido encontrado: 78394
repetido encontrado: 36968
repetido encontrado: 13602
repetido encontrado: 36968
repetido encontrado: 88086
repetido encontrado: 61916
repetido encontrado: 88086

C
Programa:

Ejecución:
Repetido encontrado: 84679
Repetido encontrado: 50850
Repetido encontrado: 29411
Repetido encontrado: 50850
Repetido encontrado: 29414
Repetido encontrado: 84679
Repetido encontrado: 11652
Repetido encontrado: 11652

Java
Programa:

Ejecución:
Repetido encontrado: 95887
Repetido encontrado: 74726
Repetido encontrado: 95887
Repetido encontrado: 70404
Repetido encontrado: 49909
Repetido encontrado: 43968
Repetido encontrado: 75409
Repetido encontrado: 49909
Repetido encontrado: 43968
Repetido encontrado: 59876
Repetido encontrado: 75409
Repetido encontrado: 59876
Repetido encontrado: 70404
Repetido encontrado: 74726


EVALUACIÓN DE RESULTADOS
Gráficas de los lenguajes en 1000, 500 y 250 números aleatorios:
Aquí observamos cómo en algunos lenguajes se tiene menos repeticiones en algunas ocasiones, pero hay que probar en un ejemplo más grande, generaremos 5000 y veremos quién tiene en promedio, menores repeticiones.
Gráfica comparativa de todos los lenguajes final


CONCLUSIONES
Se llegó a la conclusión de que nuestra hipótesis, no se cumple del todo, pero sí tiene ciertas similitudes con los resultados.
Ya que acertamos en que Ruby y Python son los mejores y más podernos lenguajes para éste tipo de experimentos, ya que unas de sus aplicaciones es el desarrollo web, en donde se necesita más que en otros lenguajes, la seguridad informática.
Y que Java y C son más vulnerables, en caso de ataques informáticos que se aprovechen de la generación pseudoaleatoria de números en éstos lenguajes.
Así que a la hora de hacer una aplicación de un algoritmo, si se tiene el conocimiento, hay que optar por Ruby y por Python, que según nuestro experimento, son los menos vulnerables.

REFERENCIAS
Autor: Víctor Cuervo Título: "Número Aleatorio en Java" Fecha: 07 de abril del 2007 URL: http://lineadecodigo.com/java/numero-aleatorio-en-java/
Autor: -- Título: "OverAPI" Fecha: -- URL: http://overapi.com/
Autor: Brian Schröder. Título: "Ruby en 15 minutos" Fecha: 15 de septiembre del 2006 URL: http://rubytutorial.wikidot.com/ruby-15-minutos

1 comentario:

  1. OK; pudiera haber sido más extensa la experimentación, con mayor variedad de pruebas a realizar. 5 pts.

    ResponderBorrar