Medidas anti-fraude molestas

Banco

Lo cuento a veces, cuando hay que explicar que hay que ser cuidadosos con las medidas anti-fraude: estás en una conexión que no es la tuya, tienes prisa y el Google (o Facebook, o tu banco) de turno te hace pasar por algún paso extra de verificación. Más nervioso te pones y todo va peor. O cuando por pereza vas retrasando compras por no ir a buscar la tarjeta que no la tienes a mano y se te acumulan unas cuantas: las haces todas de vez y en tu banco saltan las alarmas correspondientes y et paran las operaciones.

Justamente de esto último hablaba Paul Wallich en Don’t pay your bills all at once (recomendable el The Risks Digest.

The suspicious transactions: one small purchase from an online retailer we use often, and three $100-plus payments over the course of 30 minutes to what turned out to be the local cable company, electric company and a mobile phone provider.

Está claro que los sistemas anti-fraude tienen que mejorar, pero tenemos que ser conscientes como usuarios de su existencia y estar preparados para ser ‘frenados’ en cualquier momento.

Adjuntos MIME

Correo malicioso

Ya hablamos sobre como Enviar una imagen por correo en Python. Por eso me pareció interesante leer Adjunto MIMEtizado donde Sergio Brisa da un repaso a las consideraciones que hay que tener a la hora de abrir y analizar un mensaje de correo electrónico sospechoso.

Para ello nos da un repaso a cómo se envía un correo electrónico con adjuntos, la forma de verlo, decodificarlo…

Insertar fórmulas de libreoffice en un CSV

Calculadora

Supongamos que tenemos un montón de ficheros de texto que contienen datos que queremos procesar de una determinada manera con nuestra hoja de cálculo. El proceso de extracción de la información se puede hacer con más o menos facilidad utilizando un script sencillito (con sus grep, awk, …) y generamos algo que parece que tiene filas y columnas con datos.

Si los datos forman agrupaciones sobre las que querríamos hacer ciertos cálculos (por ejemplo, la media de un valor cada cierto número de filas) podríamos trabajar con el propio script, pero a veces necesitamos ‘masajear’ los datos para ver qué sucede.

Por eso estuve el otro día viendo cómo se podría hacer y lo comparto aquí. Primero, libreoffice permite insertar fórmulas en un CSV (comma separated values) siempre que la fórmula vaya entre comillas y al insertarla desde un fichero (importarla) no tengamos marcada la opción (‘Quoted field as text’).

Y luego insertamos la fórmula correspondiente en los lugares que nos parezca oportuno. Por ejemplo:

# Sum of the last 10 rows
sum='"=SUM(INDIRECT(ADDRESS(ROW()-10;COLUMN())&"":""&ADDRESS(ROW()-1;COLUMN())))"'
# Divide the last two columns
avg='"=INDIRECT(ADDRESS(ROW();COLUMN()-2))/INDIRECT(ADDRESS(ROW();COLUMN()-1))"'

En estas fórmulas:

  • [ROW()](https://help.libreoffice.org/Calc/Spreadsheet_Functions#ROW) es el número de la fila actual (puede llevar una referencia). Se le pueden sumar y restar valores, ROW()-10 hace referencia a la fila menos 10. COLUMN() es análogo.
  • [ADDRESS()](https://help.libreoffice.org/Calc/Spreadsheet_Functions#ADDRESS) se refiere al nombre de la celda como texto (y por eso se utiliza el & para concatenar y las comillas (dobles, para que no se interpreten como las comillas que finalizan la fórmula) para introducir texto…
  • [INDIRECT()](https://help.libreoffice.org/Calc/Spreadsheet_Functions#INDIRECT) es la referencia especificada por una cadena de texto.

Finalmente, con SUM hacemos la suma de esos valores. En las dos líneas de arriba vemos dos ejemplos (el primero podríamos usarlo para sumar los diez valores de una columna, y el segundo para hacer la división entre el número de valores -no tienen por qué ser válidos todos-).

¿Se podría hacer de otra manera? Claro, en lugar de los scripts (o con ellos, pero con algo más de trabajo) podríamos incluir las sumas y operaciones en el propio programita.

Otra alternativa sería utilizar sistemas orientados a la generación final del informe, como Documentos de Latex que incluyen código de R a los que tal vez algún día podamos dedicar algo de nuestro tiempo y paciencia.

¿Otras ideas?

Evaluación del generador de números seudo-aleatorios

Azar

Por algún motivo he estado leyendo unas cuantas cosas sobre generación de números aleatorios (la última vez en Aleatoriedad y seguridad) que no soy capaz de agrupar en menos entradas, así que vuelve a salir como tema recurrente.

En How do you know if an RNG is working? justamente hablan de ese tema(afortunadamente con un enfoque diferente): ¿podemos confiar en nuestro generador de números aleatorios? Siempre se habla de que hay que medir la entropía pero no es algo que sea fácil de realizar ni que todo el mundo esté dispuesto a hacer.

If you look at the literature on random number generators, you’ll find a lot of references to statistical randomness testing suites like Diehard or NIST’s SP 800-22. The gist of these systems is that they look a the output of an RNG and run tests to determine whether the output is, from a statistical perspective, “good enough” for government work (very literally, in the case of the NIST suite.)

Luego pasa a analizar las cosas que pueden ir mal (la propia inclusión de código para evaluar un generador podría introducir sus propios problemas, por ejemplo). ¿La conclusión?

Solving this problem, at least in software, so we can ensure that code is correct and does not contain hidden ‘easter eggs’, represents one of the more significant research challenges facing those of us who depend on secure cryptographic primitives. I do hope some enterprising graduate students will give these issues the attention they deserve.

Que sería otro aviso de: no tratéis de hacerlo solos y en casa. O algo así.

El viajante y su Tesla

Mapas

Una entrada muy chula en Traveling Salesman Problem donde se mezcla un problema clásico, el viajante de comercio (Traveling Salesman Problem) y algo de actualidad, como son los coches con batería, que hay que recargar.

El problema del viajante de comercio es un viejo conocido: dada una lista de ciudades y sus distancias encontrar el recorrido más corto que pase por todas ellas y vuelva a la de inicio TSP en Wikipedia. Es uno de los problemas conocidos como NP difíciles (o NP-duros).

La formulación de esta entrada habla de los puntos de recarga de las baterías del Tesla y ese hipotético recorrido entre ellas, con código, mapas y todo para poder jugar con él. Muy chulo.

Mejorando las prestaciones de la biblioteca matemática en glib

Laplace

En Improving math performance in glibc pudimos leer hace algún tiempo una entrada precisamente sobre eso: mejorar las prestaciones de la biblioteca matemática de glib.

Sobre la forma en que algunas funciones trabajan:

Transcendental functions in glibc are implemented as multiple phases. The first phases of computation use a lookup table of pre-computed values and a polynomial approximation, a combination of which gives an accurate result for a majority of inputs. If it is found that the lookup table may not give an accurate result the next, slower phase is employed. This phase uses a multiple precision representation to compute results to precisions of up to 768 bits before rounding the result to double. As expected, this kills performance; the slowest path for pow for example is a few thousand times slower than the table lookup phase.

Esto es, primero buscan algunos valores precalculados en una tabla y si no se tiene el restultado, se calculan de alguna forma.

Sobre la implementación de números grandes:

The multiple precision number is implemented in glibc as a structure with an integral exponent and an array of numbers for the mantissa.

The exponent e can be any integer value and the array d represents the mantissa. Each number in d is a non-negative integer less than 224. Only 32 of the 40 digits are used (the rest being there for additional precision for rounding), giving a maximum precision of 768 bits. The first question one may have is why the mantissa digits are double and not int if their values are going to be only integral.

Y luego ya se mete en detalles más próximos a las operaciones, por ejemplo con la multiplicación y su efecto en el cálculo de potencias:

As much as 97% of the time in computation of pow is spent in the multiplication function! So it is obvious that the first place to look at to get improvements is the multiplication routine.

Lectura interesante.

Aleatoriedad y seguridad

Azar

No es tan frecuente encontrar textos explicando cosas de las que nos gusta comentar aquí. Por eso me gustó leer Cómo se usa la aleatoriedad en la seguridad que es un tema del que hablamos de vez en cuando por aquí (etiqueta random.

Se muestran algunos ejemplos negativos, como el bug de Debian que me suena que habíamos comentado (pero no lo encuentro) y algunos más. También los sistemas de obtención de números aleatorios en sistemas Linux (/dev/random y /dev/urandom).

Por completar, hace tiempo hablábamos de Números aleatorios y seguridad.

Contraseñas y dispositivos móviles

Escribiendo

En Why passwords should not be stored on a mobile device unas cuantas razones para evitar esa práctica de almacenar contraseñas que se utilizan para conectarse a diversos servicios en nuestro dispositivo móvil.

This often raises the question how to store the username and the password on the device securely. The easy answer to this is: unfortunately not possible.

La solución pasaría por utilizar protocolos de autentificación modernos en los que el dispositivo no almacena una contraseña, sino un token que le identifica y que la concede permisos para determinadas actividades:

The question for an app developer now is: How can you make sure that the customers can use the app with all features without storing the password on the device? The solution: a token-based approach like OAuth 2.0 [4].

La clave está en la limitación para realizar sólo determinadas actividades (para otras se le pediría la contraseña en el momento) de forma que no está almacenada, no tiene que teclearla en cada ocasión que necesita hacer algo y el acceso a las partes más valiosas (pero menos frecuentemente utilizadas) sigue protegido con la contraseña.

Podemos recordar aquí que ya hemos hablado algunas veces de OAuth. En OAUTH y seguridad y allí enlazábamos a algunos programitas que lo utilizan.

Conferencia sobre 16 años de Hispasec

Libro Hispasec

Entre las lecturas que recomiendo para estar al tanto de las cosas que van sucediendo en temas de seguridad está el Una al día de Hispasec. Allí podemos esperar de todo: desde análisis del código de algún fallo de seguridad importante a los boletines mensuales de Microsoft, pasando por casi cualquier tema de seguridad. Acabo de mirar y el Una al día más antiguo que tengo es del año 2002.

Ya nos hicimos eco de la publicación del libro en el 11 años de Hispasec y ‘Libro Una al Día’ y ahora traemos un vídeo.

Dentro de las jornadas TEMAS AVANZADOS EN SEGURIDAD Y SOCIEDAD DE LA INFORMACIÓN TASSI Curso 2014 - 2015 ha habido una serie de conferencias interesantes. Como decía, recomiendo la de Antonio Ropero. Me hubiera encantado asistir pero uno tiene que balancear la vida familiar, el trabajo y las cosas que nos gustan…

Se trata de un repaso de su actividad durante estos años y de un buen recordatorio de como algunas cosas siguen repitiéndose y haciéndose mal y la pequeña historia de estos años en los que han sucedido tantas cosas.

Hola Lola. Construyendo un hexápodo sencillo

Araña

Ya hace algún tiempo que no hablábamos de nuestro proyecto de robot. Si no recuerdo mal, la última vez fue con lo de Una pata robótica, donde dábamos cuenta de nuestros avances con las patas del robot. Algo hemos avanzado desde entonces y esta entrada es para contar un poco de esos avances. En este momento tenemos una plataforma con seis patas que puede avanzar en línea (más o menos recta).

En esta entrada hablaremos principalmente de la parte física del hexápodo (construcción y componentes) y en una que publicaremos más adelante hablaremos de los programas. Permanezcan atentos a la etiqueta Lola.

Vamos por partes:

Para la plataforma elegí un panel que compré en una tienda de esas de todo a X que hay por el barrio (y que tanto juego están dando para este proyecto): el tamaño parecía adecuado, y el material se demostró ligero y fácil de trabajar.

Servos en la (proto)montura

A photo posted by Fernando Tricas García (@ftricas) on

Fue sencillo hacer los orificios para albergar los motores y comenzar a hacer las primeras pruebas:

Plataforma y patas #leg

A photo posted by Fernando Tricas García (@ftricas) on

Aún no tenía suficientes motores, así que tuve que conformarme con cuatro patas, que mostraban capacidad suficiente para levantar la plataforma (sin mucha alegría, la verdad):

Cuatro patas #raspi

A video posted by Fernando Tricas García (@ftricas) on

Otro problema que ya se anticipaba era el lío de cables, como puede verse en el vídeo y en esta foto:

Cables y polvo #raspi

A photo posted by Fernando Tricas García (@ftricas) on

Con cuatro patas hacen falta un cable de señal para cada motor (12 motores) más la alimentación para cada uno de ellos. Estas primeras pruebas nos hicieron pensar en un rediseño de las patas, cambiando la forma de unir los servos de la segunda y tercera articulación (la ¿rodilla?). Si los acoplamos de manera secuencial el resultado no es muy robusto (hay movimientos entre ellos que hacen que la posición de la pata no sea predecible del todo).

Para resolver el lío de cables estuve buscando información y encontré que existen controladores de servos que permiten centralizar las conexiones, tanto de señal como de alimentación y descargar al controlador principal de algunas tareas. Además permiten gestionar mejor la velocidad de los movimientos, y también dan la posibilidad de hacer que varios motores se muevan a la vez (esto no había mirado como hacerlo con la Raspberry -ni con Arduino-; puedo imaginar que sea cuestión de enviar las señales una detrás de otra, casi simultáneamente, pero no lo he comprobado). Los controladores más populares parecen ser los de Pololu (por ejemplo Mini Maestro 24-Channel USB Servo Controller (Assembled)) pero no encontré una forma fácil de conseguirlos aquí (para ser exacto, la gente de Cooking Hacks me dijeron que lo traerían pero con un puente enmedio la respuesta llegó cuando ya había encargado otra solución). El otro que encontré (y por el que me decidí) fue el Veyron Servo Driver que también tenía 24 canales y que estaba disponible a través de alguna tienda que hacía envíos aquí con un coste razonable. Hay que tener en cuenta que para las seis patas sería suficiente con tener 18 canales, pero puede ser una buena idea tener algunos libres por si queremos añadir más motores en algún momento.

Se puede conectar por el puerto USB y mediante comunicación serie enviarle las instrucciones. Por ejemplo:

#0 P1490 #3 P1490 #6 P1490 #9 P1490 #12 P1490 #15 P1490 T200

Esta instrucción indicaría al controlador que mueva los motores 0,3,6,9,12 y 15 a la posición 1490 (aproximadamente la mitad de su recorrido) en un tiempo de 200 milisegundos. Como puede verse, se trata de una sintáxis cómoda y sencilla para gestionar desde nuestros programas los motores. El controlador:

Controlador de servos y Alicia

A photo posted by Fernando Tricas García (@ftricas) on

Pueden verse los conectores para los servos (azul la señal, rojo polo positivo, negro tierra). Arriba en verde los conectores de alimentación, abajo el conector USB para recibir los datos (también puede servir de alimentador para el dispositivo; no para los motores). Además pueden añadirse expansiones para hacer conexiones inalámbricas y controlarlo remotamente. Y alguna cosilla más.

Aquí podemos verlo en acción:

Probando el controlador de servos

A video posted by Fernando Tricas García (@ftricas) on

También puede verse la nueva forma de unir los motores de la ‘rodilla’ a la que aludíamos arriba: los acoplamos por la parte más ancha, mediante una brida.

El segundo problema que había que resolver era la alimentación: el controlador tiene prevista una alimentación separada para los motores y para su propio funcionamiento. Se puede hacer mediante una batería (o más, claro) pero de momento nos hemos conformado con re-aprovechar una vieja fuente de alimentación de un PC siguiendo los consejos de un montón de páginas que explican cómo hacerlo. Las hay que dan instrucciones para hacer todos los pasos necesarios Fuente de alimentación casera con fuente ATX (1 de 2) y alimentación casera con fuente ATX (2 de 2) por unos cinco euros. Hace falta, eso sí, cortar cables, compara algunas componentes y hacer algunas soldaduras (y algo de trabajo y habilidad si queremos que quede más o menos ‘presentable’).

También descubrí que se venden adaptadores para conectar a una fuente de alimentacióna lo que simplifica mucho la parte de las conexiones sin tener que trabajar apenas. Justo en esos días Javier Loureiro anunció su placa ATX Board en plan casi crowdfunding: la encargábamos y en unas semanas la tendríamos en nuestras manos. Mi placa:

ATX Board #staticboards

A photo posted by Fernando Tricas García (@ftricas) on

Podemos utilizar el conector que se ve a la derecha, que es compatible con el que tienen las fuentes normales y corrientes, y tenemos disponbibles los bornes de conexión pequeños de la derecha (para 5V y menos) y los más grandes que se ven abajo (para 12v y también más intensindad). Puede verse un análisis en Probando una placa ATX Board de Staticboards así que no comentaré mucho más sobre esto.

Con todo esto hemos ido haciendo las pruebas de movimiento. Nuevamente nos hemos enfrentado con las leyes de la física: el robot se resbalaba. Primero añadimos unos tacos de madera a ver si daban mejor resultado que el plástico (que no fue el caso pero alargó un poco las patas). Posteriormente, y después de varias pruebas, tuvimos que ponerle unos ‘zapatos’ que consistían en unas gotas de silicona que parece que han mejorado el agarre, que en aquel momento no causaba muy buena impresión:

Como que ya quiere andar

A video posted by Fernando Tricas García (@ftricas) on

Sobre el movimiento, decir que me costó bastante dar con el truco: no lo explican demasiado bien en ningún sitio (o yo no lo entendía bien) y algún rato me tuve que pasar viendo vídeos de otros para captar la idea. Por si es de utilidad para alguien guardé una lista de reproducción de hexápodos en YouTube donde pueden verse varios proyectos interesantes.

Con un hexápodo el secreto es que en cada momento hay tres patas en el suelo formando un triángulo que lo sostiene y otras tres en el aire. Para que se produzca el movimiento las que están en el aire avanzan hacia su destino, y las que están en el suelo se mueven hacia atrás, lo que provoca el avance (siempre que el ‘bicho’ esté bien equilibrado y no haya resbalones). Se ve bastante bien (y otros movimientos) en el primer vídeo de la lista y en algunos otros.

También se pueden apreciar las posibilidades que nos dan diversas posiciones relativas de las articulaciones, aunque la que hemos elegido es bastante simple y simplifica la parte mecánica, sin necesidad de construir/obtener piezas más o menos sofisticadas.

En este vídeo:

Pueden verse los movimientos (todavía algo desgarbados) que conseguimos en aquel momento siguiendo estas ideas.

Esta entrada ya ha quedado un poco larga así que dejamos para una próxima la versión actual del movimiento y algo de los programas con los que estamos haciendo las pruebas.