Ellendhel's Blog

LinuxDe l'importance des tests

Suite à mon précédent article j'ai commencé à utiliser le script "create-duplicate-list" sur une large quantité de fichiers, dont je savais que plusieurs copies surnuméraires existaient.

Le nombre de fichiers étant conséquent (147437), certains étant volumineux et le tout stocké sur un disque mécanique je savais qu'il faudrait du temps pour générer une liste. Néanmoins, après plusieurs utilisations, le temps d'exécution me paraissait tout de même élevé, malgré les améliorations apportéees.

En examinant de plus près le code et les fichiers temporaires un constat s'est imposé : le nouveau script n'était pas plus efficace que l'ancien. Une simple étape de substitution manquait. Le code manquant avait bien été préparé mais, pour une raison obscure, n'avait pas été intégré au script...

Résultat du script originel :

[ 2020-04-11 14:29:01 ] Listing file sizes...
[ 2020-04-11 14:29:18 ] Computing MD5 checksums...
[ 2020-04-11 15:31:51 ] Done.
[ 2020-04-11 15:31:52 ] Sorting the list...
[ 2020-04-11 15:31:52 ] Done.
[ 2020-04-11 15:31:52 ] Listing duplicates...
[ 2020-04-11 15:31:52 ] Done.
[ 2020-04-11 15:31:52 ] Generating the CSV file...
[ 2020-04-11 15:31:56 ] Done.

Soit un délai d'exécution d'environ une heure.

Résultats du script après correction (et un arrêt complet du système pour éviter des phénomènes de cache) :

[ 2020-04-11 16:05:00 ] Listing file sizes...
[ 2020-04-11 16:05:18 ] Computing MD5 checksums...
[ 2020-04-11 16:18:26 ] Done.
[ 2020-04-11 16:18:26 ] Sorting the list...
[ 2020-04-11 16:18:26 ] Done.
[ 2020-04-11 16:18:26 ] Listing duplicates...
[ 2020-04-11 16:18:26 ] Done.
[ 2020-04-11 16:18:26 ] Generating the CSV file...
[ 2020-04-11 16:18:31 ] Done.

Ce qui nous donne un délai d'exécution d'environ... 13 minutes ! Et un résultat identique.

En observant les fichiers temporaires produits par le script, il est possible de voir que la version originelle liste autant de fichiers à traiter que ceux présent sur le disque. La version corrigée n'en liste que 87945. Ce qui était bien le but de l'optimisation recherchée.

Ce qui m'amène au titre de cet article : tester son code est essentiel. Vous devez bien évidemment vérifier la logique et la syntaxe, mais l'environnement et les données que vous utilisez sont tout aussi importants.

Travailler sur un jeu de données limitées permet de conduire des tests rapidement, mais il faut veiller à ce que ce jeu de données soit aussi proche de la réalité que possible (variété de types de fichiers, de tailles, arborescence, ...). Des tests en conditions trop homogènes conduiront à la découverte de bugs une fois votre application déployée en production.

publié le 11 avril 2020

lien direct

LinuxScript "create-duplicate-list" - version 2

Il y a environ un an, la version initiale du script "create-duplicate-list" était ajoutée à mon dépôt GitLab. Ce script répond à un besoin assez simple : "comment lister les fichiers identiques dans une arborescence de fichiers ?".

L'approche utilisée pour résoudre ce problème était simpliste : pour chaque fichier présent, calculer la somme de contrôle MD5. Une fois tous les fichiers identifiés, lister ceux ayant une somme de contrôle identique. La décision de supprimer une des copies surnuméraire demeure celle de l'utilisateur, le script n'ayant aucune notion de contexte pour juger laquelle devant être éliminée.

Le problème de ce script est que face à de nombreux fichiers, son exécution est lente ; tous sont examinés, quand bien même leur caractéristiques les rendent uniques (à l'opposé, deux fichiers identiques portant des noms différents seront détectés).

Avec un peu de recul, il est assez évident de procéder à une optimisation : seuls les fichiers de taille identique doivent être considérés. Cette deuxième mouture commence donc par lister tous les fichiers avec leur taille. Puis en se basant sur les résultats, le calcul des sommes de contrôle ne sera faite que pour les doublons.

Le gain n'est pas forcément très significatif ; beaucoup de fichiers peuvent avoir des tailles similaires (quantités de photos prises par un même appareil ont une taille moyenne proche). Tout dépendra du type de données sur lesquelles vous travaillez.

Le travail pour cette nouvelle version à été intéressant à plus d'un titre ; ajouter une étape préliminaire semblait d'emblée très simple mais plusieurs options et paramètres en général ignorés étaient nécessaire pour utiliser les traditionnels find, uniq ou sed.

Oui, il est possible d'utiliser uniq pour ne traiter que certain champs sur une ligne, mais non, vous ne pouvez pas choisir quel est le caractère utilisé pour les séparer. Vous devez au préalable procéder à des substitutions, que vous annulerez juste après.

Oui, il est possible d'utiliser un autre caractère que slash pour une commande avec sed, cela est même nécessaire si la valeur que vous ajoutez est un nom de répertoire.

Comme toujours la lecture des pages de manuel, plus des recherches vous guidant vers différents coins du web sont des sources qui vous apporteront frustrations et surprises, mais qui au final vous permettent de créer des outils plus élaborés.

publié le 9 avril 2020

lien direct

CryptographieIntroduction to Cryptography

I would like to thanks the people from NovaLUG (especially John and Peter) for organizing this month's meeting since I was invited as a speaker for an "Introduction to cryptography".

Thanks also to Ridgeline International for providing the space (and the last minute help for the setup) and to Suzie from SG2 Recruiting for the coffee and the snacks.

The presentation slides are available here, in the original LibreOffice format or in PDF format. The presentation was video-recorded and it is available on YouTube.

As mentioned during the meeting, here is a list of additional resources that could be of interest for some of you who want to learn more about cryptography.

Cryptography History

The Codebreakers by David Kahn is probably the best reference on the topic. All the details are just 1,000 pages away...

The Code Book by Simon Singh is an easier first step, and it covers all the most important subjects.

Secret Messages by W. S. Butler and L. D. Keeney is not really about cryptography history, it's more about techniques that have been used to conceal messages. A very easy read.

Mathematics and Cryptography

The Mathematics of Secrets by Joshua Holden presents all the various mathematical problems that are applied in cryptography, from historical ciphers to the new ideas in quantum cryptography and including of course chapters about public-key cryptography.

Practical Cryptography in Python by Seth Nielson and Christopher Monson is at the border between this category and the next. It includes a clear mathematical approach along with some Python code. That is probably the book that I would recommend first in this list.

The New York Times Book of Mathematics includes a chapter about cryptography. Do not expect any formula in there, as the articles are coming from the eponymous newspaper. Nevertheless, you will find information about breakthroughs in prime number factoring. Many articles are also reporting the legal issues between the academic community and the U.S. government.

Technical Books

Linux Hardening in Hostile Networks by Kyle Rankin is a good starting point if you are looking for using encryption (and other security measures) with your mail server, web server or other piece of Linux software.

PGP & GPG by M. W. Lucas is listed as "obsolete" by the author (and he's probably right about that). But you may want to get a copy to understand some of the principles (there is even an older O'Reilly book on that topic).

Videos

Information Security—Before & After Public-Key Cryptography is a video recording of Whitfield Diffie (one of the inventor of the public-key crypto-system) that I strongly recommend.

F5 DevCentral is the YouTube channel from F5 Networks, Inc. and there are doing a very good job at publishing short videos about various networking and security subjects, including few on cryptography, TLS/SSL and DNSSEC in particular (you may need to browse a little to find those).

The Spy Factory from PBS and Inside the NSA: America's Cyber Secrets from the National Geographic are two DVDs dedicated to the National Security Agency.

The Travelling Salesman is a good and original fiction movie about cryptography, exploring the subject of "crypto has been broken, and the government wants to keep the results".

Places

Because it is Washington DC, some of the organizations related to cryptography are just a few miles nearby. You will probably not get a chance to see the Kryptos sculpture on the CIA campus, but the Antipodes one, a pretty similar sculpture from the same artist is on the National Mall near the entrance of the Hirshhorn Museum.

The International Spy Museum is another place to visit downtown; I didn't get a chance to visit it at its new location (near L'Enfant Plaza) but the exhibits should probably be as good as the ones that were presented before.

And of course, the National Cryptologic Museum is the place that you want to go to learn about cryptography (mostly on the historical side). I strongly recommended a guided tour. And it's free.

There is more to list and to review about cryptography, I didn't even mention Bruce Schneier's books and blog. Some security vendors also have blogs with interesting content (Sophos has an old and a recent articles that you may want to have a look at).

Last but not the least; in the presentation slides 10 and 11 are about the "ANSSI Challenge". Since this is related to a French security agency, there is not resource that I know of about it in English. You should still be able to use Google Translate with the original article, this should at least give you some more details and context.

publié le 14 janvier 2020

lien direct