¿Quién programó esto?

Código Durante el año pasado se ha hablado mucho de machine learning e inteligencia artificial. Traemos aquí un artículo sobre identificación de programadores, que podíamos leer en Even anonymous coders leave fingerprints.

La idea es sencilla: tenemos código de varios programadores (por ejemplo, de sus repositorios públicos) y tenemos un código fuente del que desconocemos la autoría. En el artículo nos cuentan que podríamos identificar al autor con una probabilidad bastante buena de acertar.

El resultado se presentó en una conferencia de seguridad y utilizaba machine learning (aprendizaje automático) para des-anonimizar los autores de algunas muestras de código.

At the DefCon hacking conference Friday, the pair will present a number of studies they’ve conducted using machine learning techniques to de-anonymize the authors of code samples.

Podría utilizarse para dirimir temas relacionados con la copia (el plagio que también ha estado de moda desde el verano). También podría preocupar a programadores que contribuyen a proyectos de software libre.

Their work, some of which was funded by and conducted in collaboration with the United States Army Research Laboratory, could be useful in a plagiarism dispute, for instance, but also has privacy implications…

Curiosamente, los programas se hacen en lenguajes estructurados donde la sintáxis es más o menos rígida, no hay mucha variedad de palabras para elegir… Pero aún así, hay características únicas para cada persona que programa.

Think of every aspect that exists in natural language: There’s the words you choose, which way you put them together, sentence length, and so on. Greenstadt and Caliskan then narrowed the features to only include the ones that actually distinguish developers from each other …

Por ejemplo, la estructura del código

Their technique is akin to prioritizing someone’s sentence structure, instead of whether they indent each line in a paragraph.

Aparentemente, estos aspectos sobrevivirían incluso a algunas de las técnicas de ofuscación del código empleadas habitualmente.

… have found that some off-the-shelf obfuscation methods, tools used by software engineers to make code more complicated, and thus secure, aren’t successful in hiding a developer’s unique style.

Y, claro, el estilo se desarrolla con el tiempo y la experiencia:

For example, they have found that experienced developers appear easier to identify than novice ones. The more skilled you are, the more unique your work apparently becomes.

También contribuye si el problema que se va a resolver es más complicado.

Similarly, they found that code samples addressing more difficult problems are also easier to attribute. Using a sample set of 62 programmers, who each solved seven “easy” problems, the researchers were able to de-anonymize their work 90 percent of the time. When the researchers used seven “hard” problem samples instead, their accuracy bumped to 95 percent.

Interesante.

Control de acceso en la web

Enigma Me gustó leer Python and cryptography with pycrypto] porque es una mínima guía sobre criptografía en Python que incluye, el uso de funciones hash, el uso de algoritmos de cifrado, y el uso de algoritmos de clave pública.

Para los que no somos criptógrafos (la mayoría no lo somos) tener una chuleta que nos de las pistas mínimas para cifrar y descifrar algún documento o la información que sea necesaria es fenomenal para no tener que navegar por la documentación. Si, además, viene con código de ejemplo, mejor todavía.

En este caso, ambas cosas están disponibles, los conceptos mínimos y los míni-ejemplos con código en Python.

Correo más seguro con StartTLS

StartTLS Everywhere logo En Email encryption is here! Use STARTTLS everywhere! nos hablan de la inciativa de la Electronic Frontier Foundation sobre el uso de STARTTLS everywhere!. Se trata de un mecanismo de cifrado basado en la infraestructura (esto es, las máquinas se conectan entre sí utilizando protocolos cifrados) y que, por lo tanto, es sencillo de utilizar por parte de los usuarios. No es tampoco perfecto, puesto que no se trata de un sistema de cifrado entre receptor y emisor, pero es un compromiso suficientemente bueno, dada la dificultad de otros métodos (¿alguien ha probado a enviar correo cifrado alguan vez?).

Generación de números aleatorios y velocidad

Dados Ya hacía tiempo que no hablábamos de aleatoriedad. En esta ocasión es Efficiently Generating a Number in a Range hablan de la eficiencia (que no podemos despreciar) a la hora de generar números aleatorios.

Se hace un análisis de los factores principales de coste,

But, perhaps surprisingly, the performance of your randomized algorithm may hinge not on the generation scheme you chose, but on other factors. In this post (inspired by and building on an excellent recent paper by Daniel Lemire), we’ll explore a common source of overhead in random number generation that frequently outweighs PRNG engine performance.

Aunque sabemos que la generación es costosa, no siempre es el principal motivo:

If your randomized algorithm isn’t running as fast as you’d like and the bottleneck seems to be generating random numbers, somewhat counterintuitively the problem might not be with your random number generator!

Luego siguen algunos métodos y medidas que probablemente solo interesarán a las personas con inclinaciones más técnicas. Aunque, cuidado, modificar este tipo de algoritmos y obtener el resultado deseado (aleatoriedad razonable) es algo que debe hacerse sólo cuando tenemos muy claro lo que tenemos entre manos.