October 30, 2012

Sistema estable

Que tal, esta entrada es para hablar sobre el tema de equilibrio en sistemas dinámicos.

El sistema que analizaré es el de mi proyecto, que como ya saben trata sobre el control de temperatura de un cautín.

Los objetivos para esta entrega son los siguientes:

  • Conocer cuánto tarda en estabilizarse nuestro sistema al introducirle perturbaciones.
  • Analizar cuánto le cuesta al sistema estabilizarse.
  • En nuestro caso, graficar temperatura vs tiempo.

Primero que nada, por qué es importante la estabilidad?
La estabilidad es una la propiedad que caracteriza los sistemas dinámicos y es la que se considera más importante de todas, ya que, si un sistema no es estable, normalmente carece de interés y utilidad.

Al hablar de estabilidad en sistemas dinámicos, se refiere a que el sistema actúe de manera normal o lo mejor posible aun y cuando se introduzcan o le lleguen pequeñas perturbaciones en las condiciones iniciales o en alguna de las variables que intervienen en la ecuación que describe al sistema.

De acuerdo a Lyapunob, un punto de equilibrio de un sistema dinámico es estable si todas las soluciones que nacen en las cercanías del punto de equilibrio permanecen en dichas cercanías; de otra forma resulta inestable

Para realizar esta tarea, observé las funciones de transferencia de los compañeros de mi equipo y platicando con ellos llegamos a la conclusión de que necesitábamos modificar la función, y debido a esto la función de transferencia cambió a la siguiente:


Como pueden observar la función tuvo algunos cambios, hubo un cambio al sustituir Corriente*Resistencia por Voltaje (V) esto lo hicimos utilizando la ley de Ohm. También pueden observar que hay una multiplicación de Potencia por Temperatura, dicha potencia en el programa en Octave se obtiene multiplicando la corriente de entrada por el voltaje que se obtiene.

Este es el código en Octave:



Aquí las gráficas que obtuve con distintos valores. Cabe aclarar que los valores que cambié en las distintas pruebas son Corriente y Voltaje, ya que cualquier cambio en el potenciómetro cambiará forzosamente estas dos variables:


T=77, Q=20, V=30, I=2

T=60, Q=20, V=10, I=0,5


T=55, Q=20, V=40, I=1


T=30, Q=20, V=80, I=1.5

Al observar las gráficas podemos concluir que las diferencias de temperatura más grandes llevan un mayor tiempo en estabilizarse, aunque este cambio no es muy grande si se observan las temperaturas bajas.

Las pruebas anteriores son sin provocar ruido a la función de transferencia, para agregar una distorsión utilicé la librería lsim, a esta función se le pasa como parámetros la función de transferencia, una ecuación que provoque la distorsión y el tiempo.

Este es el código:



Aquí algunos de los resultados:


T=77,Q=20,V=30,I=2
La distorsión causada por la función e^(-t)


T=77,Q=20,V=30,I=2
La distorsión causada por la función cos(-t)




T=55,Q=20,V=40,I=1
La distorsión causada por la función cos(-t)



En conclusión, observando estas últimas gráficas podemos observar que al sistema le cuesta trabajo recuperarse cuando algo le provoca ruido, en ciertos casos si logra recuperarse pero en otros le cuesta mucho

Fuentes

October 24, 2012

Py (cipher)

What is a Stream cipher?

A stream cipher is a symmetric key cipher where plaintext digits are combined with a sequence of bits used as a key which is called keystream. In a stream cipher each character or number of the plain text is encrypted one at a time with the corresponding digit of the keystream, and the result will be a digit of the cyphertext stream. Encryption is accomplished by combining the keystream with the plaintext, usually with the bitwise XOR operation.

This keystream is typically generated serially from a random seed value using digital shift registers. The seed value serves as the cryptographic key for decrypting the ciphertext stream.

Stream ciphers can be designed to be exceptionally fast, much faster than any block cipher, that's because stream ciphers typically operate on smaller units of plaintext, usually bits.

Py cipher

Py (written in the Cyrillic alphabet, thus pronounced Roo). is a stream cipher submitted to eSTREAM (a project to "identify new stream ciphers suitable for widespread adoption") by Eli Biham and Jennifer Seberry. It is one of the fastest eSTREAM candidates at around 2.6 cycles per byte on some platforms.

Py is a stream cipher designed for very fast and secure encryption of extremely long streams. It is use with keys of up to 256 bits, and initial values ( up to 128 bits), but it also allows longer keys of up to 256 bytes, and intitial values sizes up to 64 bytes; keys and initial values should be in multiples of a byte, and at least one byte in length. Talking about speed, Py spends only about 2.85 cycles/byte on stream generation in its efficient implementation.

A second variant of Py, called Py6, is used for shorter streams. This variant has smaller rolling arrays, thus its key setup and IV setup are much faster than of Py

Here a comparison between Py, Py6 and RC4 ciphers in 4 different processors

The allowed stream size is 264 bytes in each stream (or 240 in the smaller version Py6). The most important thing of Py is called rolling arrays, these arrays are rotated and updated over time in a way that allows both the data to be updated very quickly and a very efficient implementation.

Py cipher uses rolling arrays which are vectors whose units are cyclically rotated every rotation step by one unit. A useful property of rolling arrays is that if you access the same entry in two consecutive steps, the contents of this entry are expected to be different. An example of a rolling array algorithm is: for some entry k, the swap exchanges entry 0 and entry k, and then the rotation is performed.

The cipher Py maintains two rolling arrays P and Y and one word variable s. P is an array of 256 bytes that contains a permutation of all the values 0, . . . , 255, and Y is an array of 260 32-bit words, indexed −3, . . . , 256. In each step of the cipher the two arrays are rotated, and two output words (a total of eight bytes) are computed. The word s is updated by mixing two words of Y into it, where the two words are indirectly selected by indices from P, and then a variable rotation is performed, which rotates s by a number of bits which is taken from another entry of P.

The update of the rolling array (i.e., entry Y [−3]), and the computation of the two output words are very similar: take a rotated value of s, XOR it with a value of Y (with a direct access to a fixed entry of Y ), and add a value from Y which is accessed indirectly through a fixed entry of P

This cipher uses a key schedule which initializes the array Y from the key. In order to have a fast non-linear mixing, it uses an 8x8-bit S box. The key setup starts by initializing a 32-bit word s to depend on the key size and the first and last bytes of the key, by setting one of its bytes to be the value of the internal permutation applied on the key size (minus one, to ensure it is in the range 0–255). The next byte applies the permutation in the same way on the IV, but this time it is XORed with the previous computed byte before the application of the permutation.


Here is in pseudocode an algorithm of Py cipher and more especific, how the rolling arrays can be implemented:
The above pseudocode I found it in Py (Roo, åø): A Fast and Secure Stream Cipher using Rolling Arrays text written by Eli Biham and Jennifer Seberry, below in references is the link to ecrypt site where I found this text.



Attacks and vulnerabilities

the best cryptanalytic attack on Py, which was made by Hongjun Wu and Bart Preneel, can under some circumstances recover the key given partial keystreams for 224 chosen initial values.

Given only known plaintext, there is a distinguishing attack on the keystream made by Paul Crowley, which requires around 272 bytes of output and comparable time.

Py's security bounds limit any attacker to a total of 264 bytes of output across all keystreams everywhere

October 23, 2012

Red Petri Python-Snakes

Para esta semana la tarea fue investigar sobre las redes de Petri y simular un sistema concurrente utilizando Python-snakes, en una entrada anterior hablé sobre ellas.

El sistema que escogí para simular trata sobre bandas de producción de una fábrica.

El sistema está compuesto por 3 bandas de producción a las cuales llamé:
  • Banda1.
  • Banda2.
  • Banda3.
Estas bandas tienen su estado de encendido, y funcionan de la siguiente manera:
  • Las bandas 1 y 2 se encontrarán encendidas un tiempo promedio ya que trabajan más rapido que la banda 3.
  • Después de un tiempo las bandas 1 y 2 cambiarán de estado inactivo a encendido.
Además del estado de encendido podemos encontrar los siguientes:
  • Reposo: estado de inactividad de las bandas.

Para simular este sistema hice uso de la librería de Python llamada Python-snakes.

Aquí el código:



Red creada:

October 22, 2012

Redes de Petri

Las Redes de Petri son una herramienta de modelado de sistemas secuenciales discretos y concurrentes; nos permiten visualizar el comportamiento dinámico de un sistema.

Esta herramienta es ideal para describir y estudiar sistemas que procesan información, y que tienen características concurrentes, asíncronas, distribuidas, paralelas, no determinísticas o estocásticas.

Una red de Petri es un grafo orientado con dos tipos de nodos:
  • Lugares (representados mediante circunferencias y se le asocian acciones)
  • Transiciones (representadas por segmentos rectos verticales y permiten el movimiento de un lugar del grafo a otro)
Estos lugares y las transiciones se unen mediante arcos o flechas.

Una transición puede ser destino de varios lugares y un lugar puede ser el destino de varias transiciones.

Una transición puede ser origen de varios lugares y un lugar puede ser origen de varias transiciones.

Los lugares pueden presentar marcas, las cuales se representan mediante un punto en el interior del círculo 

Cada lugar tiene asociada una acción o salida. Los lugares que contiene marcas se consideran lugares activos. Cuando un lugar está activo sus salidas están a uno.

A las transiciones se les asocia eventos que son las funciones lógicas de las variables de entrada. 

Una transición se dice que está sensibilizada cuando todos su lugares origen están marcados. Cuando ocurre un evento asociado a una transición, se dice que la transición está validada


¿Cómo funcionan?
Conforme avanza la simulación las marcas en los grafos van cambiando de lugar, a esta acción se le conoce como franquear las transiciones.

Para franquear una transición, ésta debe de estar validada y sensibilizada

Cuando una transición se franquea desaparecen las marcas de los lugares origen y se añade una marca a cada uno de los lugares destino. Un lugar puede tener más de una marca


Estas son las estructuras básicas para realizar un diagrama de Petri



Ejemplo

Este es un pequeño ejemplo que encontré en la red.

Problema. Se pretende que el auto vaya de a hacia 'b' y vuelva. Existe un botón que pone en marcha el auto. En el inicio el auto está en 'a'

Entradas:
  • m: puesta en marcha. 
  • a : sensor llegada a izquierda.
  • b : sensor llegada a derecha.
Salidas:
  • I : indica desplazamiento a izquierda.
  • D : indica desplazamiento a derecha.
De acuerdo a los datos qe podemos obtener de la redacción la red de Petri quedaría de la siguiente manera:



Fuentes

October 18, 2012

Laboratorio 4

Para esta semana me tocó entregar el siguiente problema:

Considere la respuesta escalón unitario de un sistema de control realimentado unitariamente cuya función de transferencia en lazo abierto es

Obtener el tiempo de subida, el tiempo pico, la sobreelongación máxima y el tiempo de asentamiento.

Procedimiento


  • Obtener el factor de amortiguamiento
La fórmula para obtener el factor de amortiguamiento es la siguiente:
Esta fórmula la igualamos al despeje que hicimos al principio

De esta igualdad despejaremos ϵ que es nuestro factor de amortiguamiento, se iguala a 1 ya que es el coeficiente de s que esta del lado derecho de la igualdad

Ahora ocupamos el valor de Wn y este lo obtenemos utilizando la igualdad; lo que haremos sera igualar Wn^2 a 1 ya que es el valor correspondiente según la igualdad

Ya teniendo Wn volvemos a la ecuación del factor de amortiguamiento ϵ para obtener su valor.


  • Sobreelongación máxima

Ahora vamos a obtener la sobreelongación máxima

Seguiremos con el Tiempo de Asentamiento (Ts), investigando por la red observé que utilizaban criterios y los más comunes con 2% y 4%, para este ejercicio utilicé un criterio del 2%. Para hacer esto utilicé la siguiente fórmula:


  • Tiempo pico
Luego calculamos el tiempo pico, el cual tiene como fórmula la siguiente ecuación:
Como podemos observar necesitamos el valor de Wd el cual se obtiene de la siguiente manera:
Ya teniendo Wd regresamos a la ecuación del tiempo pico:


  • Tiempo de subida
Por último obtuve el valor del tiempo de subida:
Para resolver esto necesitamos el valor de beta el cual lo obtenemos de la siguiente manera:

Ahora podemos volver a calcular el tiempo de subida:

October 17, 2012

MacGuffin cipher

In the last entry I wrote a little about block ciphers, now in this entry I'm going to wrote about the MacGuffin block cipher.

Origin

MacGuffin is one of the earsliest a block cipher design created in December 1994 by Bruce Schneier and Matt Blaze at a Fast Software Encryption workshop. The name of this cipher comes from the acronym of the class of ciphers to which it belongs, that is the Generalized Unbalanced Feistel Networks, GUFN's, hence MacGuffin.

Purpose of MacGuffin Cipher

It was intended as a catalyst for analysis of a new cipher structure, known as Generalized Unbalanced Feistel Networks (GUFNs). This unbalanced Feistel network has 32 rounds and it is similar in structure to the NSA's Skipjack algorithm.

Another purpose of this algorithm was to explore the security properties of unbalanced Feistel networks.

Description

MacGuffin is also similar to Data Encryption Standard (DES), it takes a block of 64 bits of plain text to encrypt, takes a secret key that is 128 bits long, performs its transformation based on the key, and produces as output 64 bits of text that should be incomprehensible to anyone who doesn't know the secret key.

Their main change compared with DES, is that MacGuffin was spliting the DES 64 bits data block into two unequal halves in the Feistel network, 48 bits of the 64-bit data block are fed through the round function, whose output is XORed with the other 16 bits of the data block.

In other words this algorithm split the text into two parts with one part repeatdly modified according to a keyed function of the other part. In each round of the cipher it modifies only 16 bits according to a function of the other 48 bits.

Schneier and Blaze recommended using 32 rounds, and specified MacGuffin with a 128-bit key.

We were talking abour Feistel cipher and Feistel network, but what is that? 
Well a Feistel cipher is a symmetric structure used in the construction of block ciphers. A Feistel network is an iterated cipher with an internal function called a round function

Principles

Each round operates only with 16 bits and we use 32 rounds. Because there are twice as many rounds, however, there are also a total of twice as many key bits XORed with the control blocks.

We adapt our S-boxes directly from those of DES. The eight DES S-boxes each produce four bits of output. Since we require only two bits from each (that give us a total of 16 bits), we use only the "outer" two output bits from each S-box.

In each round, each control block bit is XORed with one derived key bit and provides one input to exactly one S-box. The control bits are mapped 1 : 1 to S-box inputs according to a fixed permutation. This permutation was designed so that each S-box receives two of its six inputs from each of the three registers in the control block.

Algorithm

Encryption

This diagram in the right side shows one round of MacGuffin block cipher.

  • The 64-bit data block is divided in four 16-bit words (each word is represented in the diagram by one line). 
  • The rightmost three words are XORed with subkey bits derived from the secret key. 
  • They are then fed through eight S-boxes, each of which takes six bits of input and produces two bits of output. 
  • The output (a total of 16 bits) is then recombined and XORed with the leftmost word of the data block. 
  • The new leftmost block is then rotated into the rightmost position of the resulting data block. 
  • The algorithm then continues with more rounds until the 32 round.



Decryption


MacGuffin's key schedule is a modified version of the encryption algorithm itself.

To decrypt am encrypted message is very easy because MacGuffin is a Feistel network; simply run the encryption algorithm in reverse.

Vulnerabilities

Vincent Rijmen (of AES/Rijndael fame) and Bart Preneel performed a cryptanalysis of MacGuffin and showed that it was quite vulnerable to differential cryptanalysis and linear cryptanalysis, but also showed it could be significantly strengthened by making only a few minor changes in its use of S-boxes. This happened during the same workshop MacGuffin was presented.

The algorithm was experimental, intended to explore the security properties of unbalanced Feistel networks. The cryptanalysis proceeded very quickly, so quickly that the cipher was broken using differential cryptanalysis at the same workshop by Vincent Rijmen and Bart Preneel. They also tried attacking MacGuffin with different S-boxes, taken directly from DES. This version was slightly stronger.

Example

Here are some pseudocodes about the key setup, encryption and decryption of this block cipher, I found it in this pdf of Bruce Schneier paper-macguffin.pdf

Encryption


Decryption


Keys Setup


Sources

October 16, 2012

Sistemas inferenciales o motor de inferencias

Hoy en día existen muchos tipo deaplicaciones para la lógica de predicados podemos encontrar desde teoremas matemáticos hasta resoluciones o aplicaciones de problemas en la vida diaria.

Para esta entrada hablaré sobre una de estas aplicaciones, los motores de inferencias que son parte importante de los sistemas expertos.

Primero que nada, qué es una inferencia?

Una inferencia es una evaluación que tiene el papel de la mente entre expresiones bien formadas (EBF) de un lenguaje que se toman como abstracciones y permiten trazar una línea lógica de condición o implicación lógica entre las diferentes expresiones. Las inferencias son los procesos mediante los cuales obtenemos una conclusión a partir de unas premisas de forma que el razonamiento sea válido.

Qué es un motor de inferencias?

Un Motor de Inferencias es un programa de control cuya función es seleccionar las reglas posibles a satisfacer del problema, para realizar esto un motor de inferencias utiliza estrategias de control o estrategias heurísticas. Los motores de inferencia utilizan conocimientos para resolver un problema, esto lo realiza con datos que se encuentran en una base de hechos del sistema experto al que pertenecen. El tipo de reglas que forman parte de esta base de conocimientos es de la manera en que, si A es válido, puede deducirse B como conclusión
La idea general de un Motor de inferencias es: seleccionar, decidir, interpretar, activar y aplicar el conocimiento de la base de conocimientos sobre la base de hechos con el fin de obtener la solución buscada. Basicamente podemos decir que un sitema inferencial consiste en un grupo de reglas que nos permiten deducir unas conclusiones a partir de unas hipótesis.

Los hechos iniciales o datos de partida asi como también las conclusiones derivadas de ellos forman parte de los hechos o datos de que se dispone en un instante dado.

En varios tratados lógicos podemos encontrar que a la conclusión de se le da el nombre de consecuencia lógica de las premisas.

Algunas de las estrategias de control heurísticas utilizadas en los sistemas de inferencias son los siguientes:
  • Orden de las reglas.
  • Mayor credibilidad en las reglas.
  • Menor número de cláusulas no instanciadas.
  • Mayor número de conclusiones en las reglas.

Los motores de inferencia son parte importante de los sistemas expertos ya que son los que modelan el proceso de razonamiento humano.

Reglas de inferencia?

Estos motores o sistemas de inferencias utilizan reglas de inferencia para poder establecer una conclusión. Estas reglas son esquemas para construir inferencias válidas, los cuales establecen relaciones entre un conjunto de fórmulas llamados premisas y una afirmación a la que se conoce como conclusión.

Es en este punto donde este tema se relaciona la logica de predicados. 

En la lógica de predicados la regla de inferencia más conocida es la Regla de Generalización universal. 

Esta regla nos dice que si P(x) es verdadera cuando x se reemplaza por cualquier constante, digamos "a", del universo, entonces ∀x: P(x) es verdadero.
  • x + 2 = 4 es un enunciado abierto mientras que
  • ∀x R/x + 2 = 4 es una proposición verdadera.
Cuantificador Universal: se simboliza “∀” (se lee: para todo, toda, todos ó todas). El cuantificador universal indica que lo que se escribe a su derecha es verdadero para todo valor de la variable que lo acompaña. Por ejemplo:

  • ∀x; p(x): para todo x; p(x)
  • Sea p(x): x es una estudiante del 2do año 
  • x B, B = {Alex, Alfonso, Zandra, Christian}

Por lo tanto todos los elementos de B son estudiante del 2do año


Si anteponemos el cuantificador ∀ indica que en cada caso que x sea sustituido por uno de los nombres de B, entonces tiene que verificarse que sea un estudiante de 2do año, entonces la expresión ∀x; p(x) es verdadera.


Fuentes

October 13, 2012

Block cipher

Conventional cryptosystems are widely used throughout the world today, and new systems are published from time to time. 

There are two kinds of one-key ciphers: 
  • stream ciphers
  • block ciphers 

In stream ciphers a long sequence of bits is generated from a short string of key bits, and is then added bitwise module 2 to the plaintext to produce the ciphertext. In block ciphers the plaintext is divided into blocks of a fixed length, which are then encrypted into blocks of ciphertexts using the same key.

The block cipher is one of the more popular methods for hiding information. Is a type of symmetric-key encryption algorithm in which an algorithm and key are applied to a block of data (for example, 64 contiguous bits) at once as a group rather than to one bit at a time.

Decryption is performed by applying the reverse transformation to the ciphertext block using the same secret key

Using this encryption we assure that identical blocks of text do not get encrypted the same way in a message.

The first thing that a block cipher must do is break the original text or plaintext into blocks of equal size. A block is a group of characters, like 'iamablock'. The most common block size is 8 characters, or 64 bits. If the total number of characters in the plaintext is not divisible by the block size, then extra characters are generally added on to the end of the plaintext until a complete last block can be formed in other words extra characters are appended in order to have an eight-character block. Here is an example using a quote by former U.S. President Franklin Delano Roosevelt:

plaintext:                   The only thing we have to fear is fear itself
modified plaintext:   Theonlythingwehavetofearisfearitself
plaintext in blocks:   Theonlyt hingweha vetofear isfearit selfXend

This method of adding additional data or characters in order to make a complete block is called padding. 

Now that we have the information in chunks of 8 characters or in blocks, each block is transformed into another equally sized block. For example, we  have a block size of eight characters, each block would be transformed into a different, eight-character ciphertext block using any other cryptographic technique to transform each block. For this example we are going to use a simple transposition cipher to encrypt each block

plaintext:                  The only thing we have to fear is fear itself
plaintext blocks:      Theonlyt hingweha vetofear isfearit selfXend
ciphertext blocks:    tylnoehT ahewgnih raefotev tiraefsi dneXfles
ciphertext:                tylnoehTahewgnihraefotevtiraefsidneXfles

The cipher that we use to encrypt the plain text in blocks es very simple, we just reverse each block, this means that the last character becomes the first, the second becomes the second to last and so on. For more security, we can send the message in blocks of a different size than the original used. For example the ciphertext can be sent in this form:

ciphertext: tylno ehTah ewgni hraef otevt iraef sidne Xfles

This technique may no represent any difficult for decoding this text. Simply by reversing all the text and eliminating the white spaces. This is just for making an example and understand better about block cipher.

Eliminating white spaces and reversing the text, it would be like this:

ciphertext: selfXendisfearitvetofearhingwehaTheonlyt

We just need to figuring out the eight-character block size, and reversing the order of the blocks.

Sources


October 9, 2012

Diagrama de Bloques

Para esta entrada la tarea es realizar el diagrama de bloques de mi proyecto, el cual trata sobre controlar la temperatura del cautín, esto es que solo llegue hasta cierta temperatura indicada por el usuario y que no se caliente demasiado como sucede con muchos cautínes.

Nuestra idea es algo parecido a esto:
Como se aprecia en la imagen, el usuario indica a cuánta temperatura llegaría el cautín y que no sobrepase esa temperatura.


Para recordar un poco, mis ecuación de entrada es la Ley de Joule, la cual es la siguiente:
Y mi función de salida es la ecuación de temperatura con respecto al tiempo

Y la función de transferencia que obtuve es la siguiente:


Primero que nada hay que definir que es un diagrama de bloques.Un diagrama de bloques de un sistema es una representación gráfica de las funciones que lleva a cabo cada componente. Tal diagrama muestra las relaciones existentes entre los diversos componentes. En un diagrama de bloques se enlazan una con otra todas las variables del sistema, mediante bloques funcionales. El bloque funcional o simplemente bloque es un símbolo para representar la operación matemática que sobre la señal de entrada hace el bloque para producir la salida. Un diagrama de bloques contiene información relacionada con el comportamiento dinámico, pero no incluye información de la construcción física del sistema

Este es un ejemplo de un diagrama de bloques:

Las cajas son las funciones generadas en la función de transferencia, las flechas indican el flujo de la señal de una función a otra. Con esto se genera un diagrama lineal de bloques en donde siempre o sumamos restamos las funciones.

Utilizando la función de transferencia mi diagrama de bloques respecto a mi proyecto es el siguiente:
Como podemos observar la salida del sistema es la cantidad de voltaje que se suminstra al sistema para controlar la temperatura, la cual retroalimenta el sistema para saber si la temperatura que se consiguió con ese voltaje es la deseada por el usuario y en caso de no serla volver a calcular la cantidad de voltaje hasta que se llegue a la temperatura deseada.

Fuentes