jueves, 14 de diciembre de 2017

Encriptando


Esta semana hemos empezado con una práctica de encriptación de datos. Por primera vez vamos a saber lo que se sufre cuando se encriptan mensajes de una manera manual. Todo ello, gracias a CSUnplugged que, como siempre, nos proporciona un recurso manual y sin ordenadores para poder encriptar mensajes (puedes ver la actividad completa en este documento).

Esta actividad es más complicada que las otras que hemos ido haciendo sobre todo porque requiere mucha precisión y hacer bien todos los cálculos.

Primero hemos presentado la actividad, que consiste en enviar un mensaje (en este caso es un número) cifrado a otra persona. Para ello utilizaremos una clave pública en forma de mapa. En el siguiente ejemplo, enviaremos el número 66. Seguimos el siguiente procedimiento:
Clave pública con ejemplo de mensaje enviado
  1. Colocaremos números aleatorios en el mapa que representa la clave pública de forma que la suma de todos ellos sea exactamente el número que queremos enviar. En la imagen adjunta, representan los números "normales".
  2. Después en cada punto apuntaremos la suma de todos los adyacentes incluido él mismo. Y éste será el mensaje que enviaremos. En la imagen adjunta, representan los números entre paréntesis).

De esta manera, nadie que reciba el mensaje sabrá lo que pone salvo el que tenga la clave privada. En este ejemplo, con esta clave privada, sólo necesitamos los puntos más gordos que al sumarlos me da el número que he enviado al principio.

Clave privada


Después de presentar en qué consistía el cifrado, cada grupo ha cifrado una palabra de cuatro letras que ha enviado a otro grupo (cada letra escrita en código ASCII).

Ésta ha sido una actividad bastante complicada y en la que hemos tenido que esforzarnos mucho para no confundirnos. Ha llevado bastante tiempo pero hemos podido comprobar lo complicado y meticuloso que es el cifrado. Pero los ordenadores lo hacen ellos solitos mucho más rápido.

Eso sí, si no tienes la clave privada, va a ser casi imposible leer el mensaje. La única manera de hacerlo es por el método de fuerza bruta, lo que puede llevar, con un ordenador actual, a resolverlo en años o décadas. En el documento de la actividad viene una explicación extensa de cómo funciona el cifrado en los ordenadores (se basa en números muy grandes (más de 100 cifras) cuyas factorizaciones en números primos son muy complicadas).

Una vez terminada esta actividad, hemos podido continuar con lo que teníamos. Algunos terminando todavía las actividades de code.org y otros ya aprendiendo a utilizar scratch.

martes, 5 de diciembre de 2017

Compartiendo secretos


¿Cómo vamos a aprender este lenguaje de programación? Seguiremos esta vez unos vídeos que tienen preparados los de DIWO (Do It With Others) de BQ, donde en unas cuantas sesiones podemos ir aprendiendo a utilizar los distintos elementos de programación que nos muestra Scratch. Esta parte es más complicada, pero como cada uno puede ir a su ritmo, si vemos que es demasiado para nosotros, seguimos con los cursos de code.org para afianzar mejor esta parte de programación.
Como esta semana es corta, hemos hecho una pequeña práctica para introducirnos en el mundo de la privacidad y encriptación de datos. Y hemos seguido otra actividad de CSUnplugged,en concreto la actividad 17 llamada Sharing Secrets.

Para ello hemos calculado la edad media de todos los presentes sin necesidad de decir nuestra edad al resto. ¿Cómo puede ser esto? Muy sencillo. El primero (en este caso fui yo mismo) elegí un número aleatorio que sólo yo conocía; me apunté el número en un papel; luego en otro papel, sumé mi edad al número anterior y pasé este último papel al siguiente.

Viéndolo con un ejemplo como el de la imagen, empezamos con un número aleatorio (el 613) que luego me guardo. Sumo mi edad (en este caso 8 años) y apunto 621, que paso al siguiente compañero. Él suma su edad (en ese caso tiene 10 años) y lo apunta en otro papel (631) que le pasa al siguiente. Y así hasta el último. De esta forma, al terminar, obtenemos el 657 que vuelve al primero. Ahora restamos el número final con el primero que tengo guardado y obtenemos 44, que es la suma de las 5 edades. Luego la media son 44/5=8,8 años de media.

Con esta simple práctica podemos comprobar que sin decir públicamente un dato, podemos realizar operaciones con él. Podríamos haberlo hecho con nuestro sueldo mensual, con nuestro número de teléfono, etc. O incluso una votación (sumo 1 si el voto es sí y no sumo nada si el voto es no). Lo importante al terminar es destruir y tirar los papeles, ya que sin esos números es imposible saber los datos (a no ser que dos se pongan de acuerdo).


Por lo demás, después de esta práctica, hemos estado terminando el curso intensivo de code.org y ya casi todos los alumnos de La Cabrera han terminado. Por eso hemos empezado a ver algo de programación con scratch.
Scratch es un lenguaje de programación por bloques, similar a los que hemos estado haciendo en code.org, pero podemos utilizarlo con su programa instalado en el ordenador o en su versión web. Con este programa vamos a ir un paso más allá en lo que hemos estado aprendiendo hasta ahora.


Y ya con esto terminaremos el trimestre, ya que a partir de enero empezaremos a profundizar en la robótica.

jueves, 30 de noviembre de 2017

Furgoneta de los helados


Esta semana hemos vuelto a la programación y por eso hemos comenzado con esta actividad del libro CSUnplugged: La furgoneta de los helados (Ice Cream Vans).

La actividad consiste en encontrar el menor número de furgonetas que debemos colocar en un mapa para que todas las calles tengan próximas una (cada intersección debe comunicarse al menos con una furgoneta). Y siempre encontrando el menor número de furgonetas para no gastar demasiado dinero en la compra.

Habrá que ir probando hasta encontrar la mejor solución, que normalmente nos costará.

Este tipo de problemas es similar a otros que ya hemos hecho como la coloración de mapas. De hecho son tan similares, que si tuviésemos la solución para uno de ellos, lo tendríamos también para el otro. Son llamados NP-completos, porque no se pueden resolver en un tiempo razonable sin un ordenador no determinístico. Son problemas con soluciones de fuerza bruta exponenciales, lo que hace que su mejor solución sea muy complicada (y a veces imposible). Por eso los matemáticos siguen trabajando en encontrar una solución polinómica que hiciera la resolución más sencilla y corta.

Después de esta actividad, hemos seguido con el curso de code.org. Algunos ya están en la etapa 15 (el artista 4), pero en general, casi todos están en la etapa 11 (el artista 3).