miércoles, 19 de septiembre de 2012

RSA-based digital signatures

Homework:

"Implement a HTTP public-key repository for
key exchange that employs RSA-based digital
signatures."

I used Google App Engine Python for the web service, this is my app http://rsa-ds.appspot.com/.
The script to download and calculate the "r" and "y" is :



Google app python:



Database:



Screenshots:

Script:


App:


Result:

Script:

App:

Result:


App:


Result:

App:

Result:



domingo, 16 de septiembre de 2012

Función de transferencia de la ecuación de estado

B.3.10 Considere el sistema descrito mediante:




Obtenga la función de transferencia del sistema.


Para resolver esto tenemos la siguiente teoría obtenida del libro "Sistemas de Control Moderno" de Richard C. Dorf:



"y" es la única entrada y "u" la única salida y sus transformadas de Laplace son:


 en donde B es la matriz de nx1, ya que u es una sola entrada. No se incluyen condiciones iniciales, porque se busca la función de transferencia. Y reordenando la ecuación se obtiene:


Como


tenemos:


Y ahora sustituimos X(s) en la ecuacion Y(s) y tenemos:


Entonces la funcion de transferencia:

es:



Ahora si estamos listos para resolver el problema planteado:




Tenemos que obtener la función de transferencia

 

Entonces lo primero que hice es obtener la matriz Identidad multiplicada por s:

Después le resto la A:

Ahora obtenemos Phi(s):



Para obtener la matriz inversa se sigue la formula:


Entonces:
 
que es igual a:



y simplificamos la parte de abajo de la fracción:



Entonces ahora tenemos Phi(s)



El siguiente paso es obtener :


Sustituimos:


 Lo siguiente es multiplicar las matrices, con esto obtendremos una sola matriz de 2x1:


Entonces nuestra X(s) queda:


Ahora nuestra C es igual a la y que nos da el problema por las formulas ya vistas antes entonces tenemos que la C es: 


Y la manera de obtener la función de transferencia G(s) es:

Sustituimos valores:


Como podemos ver fácilmente la multiplicación de matrices será "s" , entonces tenemos:




La función de transferencia final es:




Y ahora si ya para terminar y por no quedarme con la duda me puse a investigar como podría hacer esto en octave, y encontré una función que se llama "ss2tf" en octave que lo que hace es que a partir de la variable de estados obtenemos la función de transferencia. Para esto lo primero que hay que hacer es instalar el paquete "signal" lo descargamos de la página oficial de octave, sin embargo al querer instalar este nos damos cuenta que tiene dependencias a otros paquetes que aun no están instalados:


Entonces igual descargo uno a uno los paquetes y instale primero el paquete "image" sin problemas, después el "specfun" también sin problemas y por último el "optim" con este si tuve que instalar otra vez otras dependencias:


También las descargo de la página de octave, y ahora si instalo "optim" y el paquete "signal" porfin.
Ahora en octave cargamos el paquete con "pkg load signal" y les dejo una captura con la solución de mi problema, primero cargamos las matrices de estado:



Y ahora resuelve y obtenemos el mismo resultado que encontramos a mano:




Referencias

Dorf, Richard C., and Robert H. Bishop. Sistemas de control moderno. 10th ed.
Matriz inversa

Principios de demostraciones en validez


Para esta semana el ejercicio lo obtuve del pdf http://www.logicinaction.org/docs/ch4.pdf  y la manera de resolverlo también ya que venían ejemplos muy parecidos, es el siguiente:


Exercise 4.3 Translate the following sentences into predicate logical formulas:
(1) If John loves Mary, then Mary loves John too.
(2) John and Mary love each other.
(3) John and Mary don’t love each other.
(4) If John and Peter love Mary then neither Peter nor Mary loves John.


Ejercicio 4.3 Transforma las siguientes oraciones a formas lógicas predicativas:
(1) Si John ama a Mary, entonces Mary ama a John también.
(2) John y Mary sea aman uno al otro.
(3) John y Mary no se aman uno al otro.
(4) Si John y Peter aman a Mary entonces ni Peter ni Mary aman a John.


Podemos definir que X ama a Y con la siguiente y única expresión que necesitamos para transformar nuestros enunciados :
A(X, Y)


1. Si John ama a Mary, entonces Mary ama a John también. Entonces definimos con nuestra funcion A(X, Y) que recibe dos argumentos el primero la persona que hace la acción y el segundo quien la recibe. Al decir que John ama a Mary esto queda así: A(J, M) y como agregamos "entonces" osea una consecuencia de la primera agregamos el símbolo -> para ahora decir que Mary ama a John: A(M, J). Que queda como sigue:

A(J, M) ⇒ A(M, J)


2. John y Mary se aman uno al otro. En esta expresión a diferencia de la primera es que una cosa no es consecuencia de la otra lo que podemos agregar el conector lógico and para unir las nos funciones, una que exprese que John ama a Mary A(J, M)  y otra que Mary ama a John A(M, J).

A(J, M) ^ A(M, J)


3. John y Mary no se aman uno al otro. Es muy parecida a la anterior pero hay que negar las dos funciones, y las seguimos uniendo con un and.

¬(A(J, M) ^ A(M, J))


4. Si John y Peter aman a Mary entonces ni Peter ni Mary aman a John. Para expresar este enunciado en lógica predicativa tenemos que dividirlo en dos primero escribir que "John y Peter aman a Mary" con la expresión: A(J, M) ^ A(P, J) y después "ni Peter ni Mary aman a John" con la expresión:

¬A(P, J) ^ ¬A(M, J), y ahora si unirlas con el conector -> que expresa que Si John y Peter aman a Mary entonces ni Peter ni Mary aman a John:

(A(J, M) ^ A(P, M)) ⇒ (¬A(P, J) ^ ¬A(M, J))

jueves, 13 de septiembre de 2012

RSA

For this week, the homework is to implement the RSA, I followed the next steps:

(the names of my variables are different than those we saw in class because I based the variable names on the book "Discrete Mathematics, Richard Johonsonbaugh"
)

  • Create 3 scripts, one that generate public and private keys, another that is client.py and one for the server.py.

  • For keys first generate a list of primes where I chose the p and q
  • After, the n in my program is part of the public key. I chose the prime number as n. I noticed that phi is not a multiple of n.
  • Immediately implements the Euclidean algorithm to get the s(private key)
  • and finally create two key files, one public.txt and one private.txt
  • I create the client.py and server.py and follow the next steps:





RSA:



Server:



Client:


Corrects users and keys:



Incorrect user:



Extra points