jueves, 30 de agosto de 2012

Tarea2:

 La tarea 2 es checar si las claves que genera nuestro otp (one time pad) realmente es aleatoria.

 La clave evaluada fue la siguiente:


Esta clave es generada del programa anterior con el siguiente código:

Funciona leyendo las claves del archivo llamado key.txt pasandoselo a cada uno de los test.



Primero yo realice un test sencillo que se llama Monobit:

Monobit

Detecta los ceros y los unos que se encuentran en la cadena binaria, sustituyendo los ceros que encuentre por -1, asi realizando una suma. La aparición de ceros y unos en la secuencia global deberan de ser igualmente probables

Datos a tener:

n = tamaño de la clave binaria
ε =La secuencia de bits que se esta probando

Procedimiento:

1. Como mencione se buscan los ceros y se sustituyen por -1y se realiza una suma, ejemplo:
   lista=[1,1,0,0,1,0,1]
   quedaría:
   lista=[11,-1-1,1-11]
 y se realiza la suma de la lista

2-Se calcula la prueba estadística:





3. Se calcula p_value ( erfc es la función error complementaria.)


4.Si P - value > 0.01, la secuencia  es aleatoria.

Código:

Captura de pantalla de la prueba:



También utilice otras dos pruebas que es la de Poker y la de frecuencia de Bloques

Frecuencia de Bloques

En la prueba de bloques los ceros y unos deberan de ser igualmente probables.
 Datos:

n - largo de la secuencia
m - el largo de cada bloque
ε - secuencia de bits generada

Recomendaciones:










Procedimiento:

1. Se parte la prueba e bloques de un cierto tamaño se calcula de la siguiente manera:
  

2. Se determina la proporción de unos:


3. Se calcula la chi2=X2


4.  Se calcula la p_value:






Código

Captura de pantalla



Prueba de Póker

Lo que hace la prueba de póker es dividir la clave en numeros de 4 bist, por ejemplo si yo tengo esta:

0101000001100011

se divide de la siguiente manera :
0101 0000 0110 0011

entonces como se divide en 4 hay 16 posibles resulados que pueden salir y esos 16 resultados son contados las veces que estan o el número de frecuencias de cada uno.

La formula que se realiza es la siuiente:

en donde:
m = es el tamaño de la división de la secuencia en este caso 4
n = lóngitud o tamaño de la secuencia binaria
k = es la división de m entre n

Pasos:

1. Se divide la serie de número binarios en secciones de 4 numeros (0000).
2. Se buscan las frecuencias de los 16 diferentes numeros que se pueden encontrar
3. La frecuencia se eleva al cuadrado
4. Se realiza lo que es la ecuación anterior:

         x2=(16/k)(frecuencias al cuadrado)-k

La prueba se pasa cuando 1.03 < x < 57.4

Captura de pantalla


Con otra cantidad de claves:

Monobit



Frecuencia de Bloques



Poker test




La clave pasa las pruebas eso quiere decir que es segura.

Referencias:

Link1
Link2
LInk3

lunes, 27 de agosto de 2012

Aplicaciones de la lógica Proposicional


Entre las aplicaciones que podemos encontrar de la lógica proposicional se encuentran las relacionadas con:



  • Inteligencia Artificial:Representación de conocimiento, razonamiento con sentido común.
  • Bases de Datos: Lenguajes de consulta, lenguajes para restricciones de integridad.
  • Ingeniería de Software: Espeiento con sentido común:
  • Teoría de la Computación: complejidad descriptiva, algoritmos de aproximación.
  • Criptografía: verificación de protocolos criptográficos.
  • Procesamiento de Lenguaje Natural

Comenzaremos por definir algunas de las aplicaciones relacionadas con lo anterior descrito y otras que no se mencionaron:

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. 
Inteligencia Artificial 
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.


Representación de conocimiento:

La ingeniería cognoscitiva ha adaptado diversos sistemas de representación del conocimiento que se aproximan a los elaborados por la psicología cognoscitiva para el cerebro humano. Aquí es donde juega parte de esto la lógica proposicional.

-La lógica proposicional se aplica en el lenguaje al momento de realizar la representación del conocimiento.

Razonamiento con sentido común:

Lo que nos hace diferente de otros seres humanos es que nosotros razonamos acerca de lo que sucede diariamente. El sentido común es la creencia que tenemos nosotros como peronas, en relación a lo que consideramos mas prudente o razonable sobre algún tema,, auqnue no tengamos algún sustento.

El Razonamiento de Sentido Común en la IA tiene como objetivo establecer soluciones para simulación de formas de razonamiento que realizamos nosotros de forma natural en la solución de problemas en escenarios dle mundo real y que han resultado dificiles de abordar con técnicas que se basan en enfoques matemáticos.

La resolución para cláusulas de Horn que resulta de la evolución de los sitemas de Base de Datos y los lenguajes de programación lógica como Prolog y sus extensiones a la programación lógica y con restricciones y la programación lógico-funcional.

-.-.-.-.-.-.-.-.-.-.-.-.
Base de Datos:
-.-.-.-.-.-.-.-.-.-.-.-.



Los lenguaje de consulta como su nombre lo indica son lenguajes con los cuales el usuario puede consultar información de una base de datos.

Las consultas se representan como fórmulas de lógica proposicional.




La operación select se define:



donde p es una fórmula en cálculo proposicional que consta de términos conectados por: ∧ (and), ∨ (or), ¬ (not) y cada término sigue la expresión:

<attribute> op {<attribute> | <constant>}

donde op es: =, ≠, >, ≥, <, ≤



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
Lenguajes de Programación
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.




Como ya la mayoría de nosotros sabemos que Prolog es un lenguaje de Programación lógico e interpretado.

La lógica proposicional tiene una gran aplicación en lo que es el lenguaje Prolog.




Sintaxis de la lógica proposicional en Prolog:



Declaración de operadores:

:-op(610,fy,-). % negación
:-op(620,xfy,&). % conjunción
:-op(630,xfy,v). % disyunción
:-op(640,xfy,=>).%condicional
:-op(650,xfy,<=>).% equivalencia

-Las técnicas de reescritura , la aplicación de reglas lógicas que son la base de la programación funcional como por ejemplo LISP, ML, de diversas aplicaciones en inteligencia artificial como son los sistemas expertos y la bases de conocimiento, de ciertos sistemas de álgebra por ordenador.

-.-.-.-.-.-.-.-.-.
Criptografía
-.-.-.-.-.-.-.-.-.






En la criptografía se utiliza para la verificación de protocolos criptográficos los cuales se usan cuando se requiere privacidad, autentificación como por ejemplo la firma electronica.



Aparte de lo anterior mencionado también se aplica para la síntesis y verificación de circuitos y sistemas entre los que se encuentran los reactivos, asíncronos, ocurrentes y distribuidos, al igual que nos sirve para resolver problemas de la vida real como horarios, rutas de transporte y la planificación
de obras.


Referencias:

Link1
Link2
Link3
Link4
Link5
Link6
Link7
img1
img2
img3|
img4

martes, 21 de agosto de 2012

Tautología

Una tautología es una formula de un sistema de lógica proposicional que resulta verdadera para cualquier interpretación.


 En clase se pidio realizar una tomando las si(((q | p)| (p ^ r))| ((¬q)|(¬ p)))entes restricciones:

  •  Minimo utilizar 3 variables  
  • Utilizar los operadores lógicos and, or y not
  • Minimo tener 4 operadores (por ejemplo utilizar los tres anteriores y uno repetido)
YO realize un programita que trabajaba con tres variables en este caso "p", "q" y "r", el cual nos creaba grupos de 4 o 3 o del tamaño q quisieras.

Salidas del programa

Proposición 1




Esta un poco revuelto, para una mejor comprensión vamos a ir checando de uno por uno:

not = ¬
or = |
and = ^

La salida es: (r or q)and (r and p)or (not r)and (not p)

seria: (r|q)^(r ^p)| (¬ r)^(¬ p)

Y se preguntan ¿Qué se hace primero? yo aqui utilize la prioridad de los operadores lógicosque primero seria la negación, después la conjunción(and) y al final la disyunción(or).

Quedaria asi: (((r|q)^(r ^p))| ((¬ r)^(¬ p)))

La tabla de verdad quedaria de la siguiente manera:


La tabla tiene las mismas salidas que nos da el programa, to solo imprimi el resultado.


Proposición 2:


La salida es: (r or p)and (q and r)or (not p)and (p or r)

seria: (r | p)^(q^r)| (¬p)^(p|r)

Quedaria asi: (((r | p)^(q^r))| ((¬p)^(p|r)))

La tabla de verdad quedaria de la siguiente manera:


Las salidas son las mismas que la que nos devuelve el programa

A la tercera proposición el programa nos arrojo una tautología:

Proposición 3


La salida es: (q or p)or (p and r)or (not q)or (not p)

seria: (q | p)| (p ^ r)| (¬q)|(¬ p)

Como al unir los grupos son puras uniones con or no importa cual se haga primero ya que dara el mismo resultado.

Quedaria asi: (((q | p)| (p ^ r))| ((¬q)|(¬ p)))

La tabla de verdad quedaria de la siguiente manera:




Como ya obtuvimos la tautología lo que aremos sera realizar el árbol correspondiente:


Código


Algunas cosillas que se le podian aplicar al código seria que el programa terminara hasta que encontrara una tautologia.

Algunas otras tautologías:




 
Prioridad de los operadores lógicos:


martes, 14 de agosto de 2012

Tarea 1

El objetivo de la verificación y validación son para poder mejorar la calidad de los productos del trabajo    que son generados durante el dessarrollo y modificación del software

La verificación esta más enfocada a lo que es el proceso de evaluar el sistema que determina si los productos de una fase determinada:

  • Construir el sistema correctamente.
  • Descubrir y corregir errores en el Sistema desarrollado.
  • Tipos: estática y dinámica
  • Criterios a verificar:
  • Consistencia: vigilar que la información sea coherente
  • Precisión: corrección de la sintaxis. Errores morfológicos.
  • Completitud: lagunas en capacidad deductiva.
  • Identifica desviaciones con estándares y requerimientos.
  • Recolecta datos para mejorar el proceso (es opcional).
  • Verifica que el producto cumpla:



Mientras que la validación también es una evaluacion del sistema  o componentes que determina la fase del desarrollo que satisfacen las condiciones que se recalcaron al inicio de la etapa.

  • Construir el sistema correcto.
  • Actividad ‘viva’ no sobre el papel.
  • Según ANSI/IEEE ‘evaluar la conformidad con la especificación de requisitos’


Verificación Formal

La Verificación Formal consiste en un conjunto de técnicas de comprobación formales que permiten demostrar si un programa funciona correctamente.

A continuación voy a describir algunos hechos en donde se da a conocer que una Verificación Formal es necesaria y asi nos ahorrariamos muchos problemas como grandes perdidas de dinero y muchos accidentes.


1965-Sonda Espacial Mariner I
 


Se menciona que no fallo por que sus calculos no eran correctos o que tuviera algun error en un componente sino por que la formula encargada de la trayectoria del cohete para ponerse en orbita no se transcribio correctamente  a lenguaje informático.

Se menciona que a los 4 min y 53 s hubo una inclinación hacia el noreste en el cohete que no era esperada, ya que debido a esta inclinación surgio la posibilidad de que este callera en el Océano Atlántico cerca de las rutas transatlánticas, y se envio un comando al cohete para su autodestrucción 6 s antes de que soltase la sonda.





1993-Error de cálculo en los Intel Pentium

En 1993 Intel tenia un error en que causo muchas perdidas de dinero, el error se encontraba en algo tan simple que en si era un error de calculo, la cantidad de chips diseñados fue entre 3 y 5 millones de chips    con un error del 0.006 % a la hora de dividir un número de punto flotante.  Con tal error estos chips nos son inservibles cuando se realiza aplicaciones de alta precisión. La perdida fue de 475 millones de dólalres, esto no solo afecto a los usuarios sino también a la imagen de la compañía.

Eurofighter

El Eurofighter Typhoon un avión militar ya que en la realización de estos primeros aviones al intentar probarlos uno de los tests consistía en simular un fallo de uno de los dos motores del avión, apagándolo para ver cómo reaccionaba el avión con un solo motor. El motor se apago  los pilotos se dieron cuenta de que el otro motor también tenía la misma respuesta y ya que se llego a la altura minima las personas que realizaban tuvieron más remedio que eyectarse. Después de tiempo investigando acerca del fallo del error se dieron cuenta que este se encontraba con que el software estaba mal programado, esto se debia al cierre erróneo de la válvula de combustible, que no odía ser abierta nuevamente en el vuelo. 


 Generador de claves Kerberos


 El generador de claves Kerberos se convirtio en un sistema de seguridad informática, el error fue que la semilla aleatoria que se utilizaba no era tan aleatoria. Hasta el momento no se conoce el alcance del fallo ya que por ejemplo si una compañía estuviera protegida con esto no lo diria, mas que nada por imagen.











Referencia: