miércoles, 29 de agosto de 2012

Prueba de Frecuencia (Monobit)

La entrada para esta semana era hacer un programa que evaluara si nuestras claves eran realmente random.
 
Pero ¿porque es importante saber si es realmente random? Bueno, unos de los problemas mas comunes en criptografía es que un mensaje se puede descubrir con ataques de frecuencia, haciendo este método nos aseguramos y hacemos que nos ataquen de otra forma mas complicada, en otras palabras, se las ponemos mas difícil.

Existen como 8 pruebas (de lo que alcance a ver, checa el link de las referencias) para evaluar si tus números o caracteres son realmente random, en mi programa use la de prueba de frecuencia monobit; pero ¿cual es el propósito o como funciona esta prueba?

El propósito de esta prueba, es determinar si el número de unos y ceros en una secuencia son aproximadamente la misma que sería de esperar para una secuencia verdaderamente aleatoria. La aparición de un cero o un uno en la secuencia debería ser igualmente probables, de modo que el defecto detectado por este método es que la secuencia contiene demasiados ceros o unos. [1]

Código

Que es lo que contiene "copia_llaves.dat" (el archivo que uso como parámetro).
Contiene las posibles llaves para encriptar el mensaje. Estas son generadas con otro programa(aun esta en construcción). Este archivo puede tener N claves con M de largo. En este caso son 10 claves con 10 de largo.

Resultados











REFERENCIAS

[1] - http://www.scribd.com/doc/58547826/12/NIST-Test-1-%E2%80%93-Frequency-Monobit-Test#outer_page_11

http://csrc.nist.gov/groups/ST/toolkit/rng/stats_tests.html

lunes, 27 de agosto de 2012

Lógica Proposicional

Lógica Proposicional

La tarea de esta semana consiste en investigar y documentar una aplicación de la lógica proposicional.

Para empezar que es la lógica proposicional?

La lógica Proposicional pretende estudiar las frases declarativas simples (enunciados o proposiciones) que son los elementos básicos de transmisión de conocimiento humano.

De manera informal, una proposición se define como una frase que puede ser considerada Verdadera o Falsa y que no se puede descomponer en otras frases Verdaderas o Falsas.

Para relacionar las distintas proposiciones se utilizan las siguientes conectivas:

Técnicas Semánticas de Estudio de Validez Proposicional

Existen varios formas para resolver estas proposiciones como tablas de verdad, arboles semánticos, demostraciones por contradiccion, resolución proposicional.

Tablas de Verdad
Una tabla de verdad es una representación en forma de árbol del valor de una fórmula en todas las posibles interpretaciones.
Por ejemplo, para calcular el valor de verdad de la fórmula F = p→q ↔ ¬p∨q , la tabla de verdad consiste en representar las 4 posibles interpretaciones y evaluar la fórmula en dichas interpretaciones


El número de posibles interpretaciones de una fórmula F es 2n donde n es el número de variables proposicionales de F. Por tanto, este método tiene una complejidad exponencial que complica su utilización para fórmulas complejas.

Arboles Semánticos
Un árbol semántico es una técnica similar a las tablas de verdad que puede simplificar la evaluación de algunas fórmulas.

Dada la fórmula (p→q) →(¬p→¬q). Seleccionando los literales por orden alfabético, se obtiene el árbol semántico:



Como puede observarse, no ha sido necesario evaluar las interpretaciones p=V, q=V y p=V, q=F.


Demostraciones por Contradicción
A continuación se demuestra que la transitividad de la equivalencia lógica. Es decir que:


 (A ↔ B, B ↔ C) ⇒ (A ↔ C)
Para ello, basta con demostrar que la fórmula (A↔B)∧(B↔C)→(A↔C) es válida. En dicha demostración aparecen dos alternativas y, como se llega a contradicción por ambas, puede concluirse que la fórmula es válida. 


Una aplicación es programación lógica.

Lógica es la ciencia que estudia el proceso de pensar.
Procesar es ejecutar una serie de actividades interconectadas.

Ahora el reto es educar el pensamiento para que razone de acuerdo a ciertas reglas.

Ahi que aclarar que todo los análisis ahí que verlos de manera lógica -no teológica.

Cuales son los componentes de la lógica:

Silogismo: argumento con 3 proposiciones, la tercera se obtiene de las 2 anteriores.
Enunciado: Expresión lingüística que establece un pensamiento completo.
-Interrogativos
-Imperativos
-Declarativos -> V o F

Las especificaciones que debe tener un problema se encuentran las siguientes:
- complejidad del problema
- análisis del problema
- variantes
- casos de prueba

Etapas de la resolución de un problema.



 Un ejemplo que vi y me gusto es el siguiente:
(Referencia de donde encontre  este problema esta en la parte de abajo).

Los dos carteles siguientes están colgados respectivamente a la puerta de las habitaciones 1 y 2. Uno dice la verdad y otro miente. Sabiendo que en la misma habitación no puede haber una dama y un tigre y que puede haber dos damas y dos tigres, se pide decidir lógicamente qué puerta se debe abrir para liberar a la dama si es que existe. Ambas habitaciones están ocupadas.

< CARTEL 1 >
EN ESTA HABITACIÓN HAY UNA DAMA Y EN LA OTRA UN TIGRE.
< CARTEL 2 >
EN UNA DE ESTAS HABITACIONES HAY UNA DAMA Y EN UNA DE ESTAS HABITACIONES HAY UN TIGRE.

Suponiendo que los dos carteles siguientes dicen ambos la verdad o mienten ambos. Deducir en qué habitación hay una dama, sabiendo, como antes, que puede no haberla.

< CARTEL 1 >
AL MENOS EN UNA DE ESTAS HABITACIONES HAY UNA DAMA

< CARTEL 2 >
HAY UN TIGRE EN LA OTRA HABITACIÓN.

Ahora...
- La única forma de que un cartel diga la verdad y otro mienta es que el Cartel 1 mienta y el Cartel 2 diga la verdad. Con lo cual habría un tigre en la habitación 1 y una dama en la habitación 2.
- La única posibilidad es que los dos carteles digan la verdad y habría una dama en la habitación 2 y un tigre en la habitación 1.

La lógica proposicional es muy importante en el ámbito de la inteligencia artificial, ella es la razón por la cual los robots se sean "pensantes". Toda esta lógica aplicada, es la nueva generación de robots humanos.  



jueves, 23 de agosto de 2012

LAB Automatización - Semana 1


Para esta semana tenemos que explicar un tema que se nos repartió, en mi caso es "Funciones desplazadas en el tiempo".
Que son las funciones desplazadas en el tiempo?


Decimos que dos funciones f1 y f2 son iguales pero desplazadas en el tiempo cuando se cumple para todo instante de tiempo que los valores que f1 adquiere en el instante de tiempo t, f2 los repite en el instante de tiempo t+ td.



En general por responder las dos funciones f1 y f2 a la misma característica, aunque desplazada en el tiempo, se les llama con el mismo nombre y diremos que si f1(t) = f(t), entonces f2(t) = f(t-td)

Para evitar errores se acostumbra usar la función paso para dar la correcta definición de estas funciones. Así la función rampa se suele expresar "tu−1(t )".



Usando la función paso desplazada, u−1 (t − ∆ ) , una función desplazada quedaría


Sin embargo, esta nomenclatura a veces complica extraordinariamente la escritura de algunas expresiones. Tanto la complica que sólo la veremos cuando exista peligro de ambigüedad.

Pasemos entonces a calcular la transformada de una función desplazada:



Para efectuar la última integral hacemos un cambio de variable:



Como d∆ = 0 , el diferencial de una constante es cero, tendremos:



En las integrales definidas se dice, que la variable de integración es “muda”, con lo cual quiere afirmarse que su “nombre” (la letra o letras que la designan) no tiene importancia y no influye en el resultado de la integral, como en los siguientes casos:


Pues bien, en la integral con f (t'), tenemos exactamente la definición de la transformada de f (t), sólo que la variable t se reemplaza por la variable t ́. El resultado no depende de si la variable se llama t ó se llama t'.


El resultado obtenido en terminos del tiempo normalizado es util debido a que se aplica directamente a sistemas diferentes que tienen ecuaciones matematicas similares.

Para aprovechar al miximo estas funciones en necesario combinarlas con el metodo de fracciones parciales, que se explicara en otro blog.

REFERENCIAS

http://books.google.com.mx/books?id=QK148EPC_m0C&pg=PA19&lpg=PA19&dq=funciones+desplazadas+en+el+tiempo&source=bl&ots=205on96_nh&sig=oiuG6awVfLsrqDOQoTrFTOw9agE&hl=es-419&sa=X&ei=c3MtUJDZF-aYygHl8YDYBQ&ved=0CEUQ6AEwAQ#v=onepage&q=funciones%20desplazadas%20en%20el%20tiempo&f=false

http://www.google.com.mx/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CCsQFjAC&url=http%3A%2F%2Fcmap.upb.edu.co%2Fservlet%2FSBReadResourceServlet%3Frid%3D1149710718656_1979461132_127875&ei=I582UIGEIaOXyAG-9ICoAw&usg=AFQjCNFEJGcSm6MS-CmIfMcIDUjDqGSmqg&sig2=hdA7a4-j5C9_JALP5DHMgw

http://www.google.com.mx/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CDoQFjAE&url=http%3A%2F%2Focw.ehu.es%2Fensenanzas-tecnicas%2Fteoria-de-circuitos%2Fensenanzas-tecnicas%2Fteoria-de-circuitos%2FMATERIAL%2520DE%2520ESTUDIO%2Ftema-1-generalidades-sobre-circuitos-electricos.pdf&ei=I582UIGEIaOXyAG-9ICoAw&usg=AFQjCNFnKMXIrDQRfJ0uDvaxkOElfRNMsQ&sig2=AXtVCZrV0D0i-td66Lz3ow

martes, 21 de agosto de 2012

Gnuplot - Recordatorio

Esta entrada es solo para no olvidar algunos comandos básicos en GNUPLOT

Como graficar desde terminal.

Que es lo interesante?
  • Podemos dar valor a las variables.
  • Para graficar, anteponemos la palabra "plot" a la formula y esto nos abrira una ventana con nuestra grafica.






Algunas variantes. 

Lo que también podemos hacer es:
  • Graficar varias ecuaciones dentro de una gráfica.
  • Cambiar el grosor de las lineas
  • Establecer los rangos de "x" o de "y"


y si se quiere graficar en 3 dimensiones solo se antepone una "s" a la palabra "plot"





lunes, 20 de agosto de 2012

Tautología

Como entrada de esta semana tenemos que ser una tautología de 3 variables.

Primero que nada que es una tautología?

= Una tautología es un caso especial de proposiciones lógicas caracterizadas por tener exclusivamente el valor verdadero en la columna final de su tabla de verdad, independientemente del valor de las demás proposiciones.

Las tautologías son muy importantes en lógica porque son leyes en las que nos podemos apoyar para demostraciones matemáticas. 

Entonces creamos la tabla de verdad que cumpla con esta definición.


Lo siguiente es sacar la expresión booleana de la tabla de verdad.

Yo lo hice con Miniterminos (suma de productos): Los "0" (de las variables) se convierten a "1".
Cabe destacar que aun haciéndolo con Maxiterminos llegamos al MISMO resultado.

NOTA: 
(abc) => (a AND b AND c) => (a & b & c)
(ab + bc) => (a AND b OR b AND c) => (a & b | b & c)

Ahora sacamos la función de la forma disyuntiva normal (minitermino):



Simplificamos

 
Y asi nos quedaria nuestra expresión booleana para nuestra tabla de verdad.

REFERENCIAS : 

Libreta de Matematicas Discretas

http://campusvirtual.unex.es/cala/epistemowikia/index.php?title=Tautolog%C3%ADa#Definici.C3.B3n

http://www.google.com.mx/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&ved=0CIEBEBYwCQ&url=http%3A%2F%2Fusuarios.multimania.es%2Fperezsolano%2FED2%2FMapas_karnaugh.pdf&ei=JO8yUI_NBcSG2gWH4IDAAg&usg=AFQjCNHHHGJzOoYTLYPUIft2qIGLm24Lkg&sig2=ImnziY4WTQqNOw7lYlS0MQ




martes, 7 de agosto de 2012

Sistemas dinamicos

Automatización y control
de sistemas dinámicos

criptografia

Seguridad de la información y criptografía.

Introducción

Las pruebas de validación en la ingeniería de software son el proceso de revisión que el sistema de software producido cumple con las especificaciones y que cumple su cometido. Es normalmente una parte del proceso de pruebas de software de un proyecto, que también utiliza técnicas tales como evaluaciones, inspecciones, y tutoriales. La validación es el proceso de comprobar lo que se ha especificado es lo que el usuario realmente quería.

Tipos: 
  • Pruebas de aceptación: desarrolladas por el cliente.
  • Pruebas alfa realizadas por el usuario con el desarrollador como observador en un entorno controlado (simulación de un entorno de producción).
  • Pruebas beta: realizadas por el usuario en su entorno de trabajo y sin observadores.

El objetivo último del proceso de verificación y validación es comprobar que el sistema está
hecho para un propósito. Esto significa que el sistema debe ser lo suficientemente bueno
para su uso previsto. El nivel de confianza requerido depende de:
  • El propósito o función del sistema. El nivel de confianza necesario depende de lo crítico que sea el software para una organización. Por ejemplo, el nivel de confianza del software que se utiliza para controlar un sistema de seguridad crítico es mucho más alto que el requerido para un prototipo de un sistema software que ha sido desarrollado para demostrar nuevas ideas.
  • Las expectativas del usuario. Una reflexión lamentable sobre la industria del
    software es que a muchos usuarios no les sorprende cuando su software falla durante su uso.
  • Entorno de mercado actual. Cuando un sistema se comercializa, los vendedores
    del sistema deben tener en cuenta los programas competidores, el precio que sus
    clientes están dispuestos a pagar por el sistema y los plazos requeridos para
    entregar dicho sistema.


    Sistema de pruebas 
  • Las pruebas forman parte de lo que se denomina sistema de pruebas. Los cuatro componentes principales de un sistema de pruebas son:
  • Equipo de pruebas: los ingenieros de pruebas, técnicos de pruebas y el
    responsable de las pruebas, los cuales tienen habilidades, experiencia y trabajan
    para diseñar, implementar, y usar componentes de pruebas.
  • Recursos de prueba: casos de prueba, datos de prueba, herramientas de pruebas,
    y otro material de desarrollo.
  • Procesos de prueba: condiciones informales, formales, no documentadas y
    documentadas en las que se realiza el trabajo de pruebas.
  • Entorno de pruebas: hardware, software, infraestructura de redes, oficina y
    laboratorio, y otros elementos que formen el lugar de trabajo.


    Fallos en Software



    La 
    Mariner 1 de la NASA fue la primera misión del Programa Mariner en intentar sobrevolar Venus. 
    A los 4 min y 53 s se produjo una inclinación inesperada del cohete hacia el noreste que fue detectada por los encargados de seguridad de la misión. Ante esta situación que daba alguna posibilidad de que el cohete cayese en el Océano Atlántico cerca de las rutas transatlánticas, se envió un comando al cohete para su autodestrucción 6 s antes de que soltase la sonda. Si hubiesen esperado un poco más, el cohete no podría haber sido destruido. 





    Ariane 5 Vuelo 501



    El motor de este satélite era mucho más rápido que el de los modelos anteriores, pero que había un error de software que pasó desapercibido. El satélite fue lanzado y después de 36,7 segundos, se autodestruyó y convertió en una magnífica bola de fuego. Mientras que el costo del satélite se estima en 8 millones de dólares, llevaba carga por valor de 500 millones de dólares cuando se desintegró.





    REFERENCIAS

    http://es.wikipedia.org/wiki/Mariner_1 

    http://mimosa.pntic.mec.es/jgomez53/informatica/pagina3.htm 

    http://www.ecoapuntes.com.ar/2011/09/top-10-de-los-errores-de-software-mas-costosos/ 

     

Idea -Redes Neuronales

Adios "Fulano":

La idea de tener la casa inteligente no esta lejos de nosotros y una casa que distinga quien eres y que solo a ti se te abran puertas, que al momento de bañarte te tenga la temperatura del agua a tu gusto, etc. Son ideas que a mi punto personal es algo necesario al momento de hablar de inteligencia. 


Mi idea del proyecto para redes neuronales es una red que pueda distinguir personas con una cámara web.

El objetivo es que al momento de "ver" una persona, la red te distinga "quien es" y así decidir que hacer (tener una respuesta).

Por ejemplo: La red detecta a Fulano y que la televisión se encienda en su canal preferido, por ejemplo.

 Entre las herramientas que ocupare es un entrenamiento previo en openCV, arduino con su modulo bluetooth y la camara web.