Un petit résumé de la présentation Securimag du mercredi 22 octobre (et oui, le temps passe à une vitesse qui nous dépasse), consacrée aux systèmes sécurisés :

Qu’est-ce qu’un système sécurisé ?

Nous appellerons « système sécurisé » un composant matériel qui fournit une ou plusieurs propriétés de sécurité, telles que l’identification, l’authentification ou le stockage sécurisé de l’information (confidentialité et/ou intégrité).

L’exemple le plus notable de système sécurisé aujourd’hui est la carte à puce (Smartcard), bien que ce ne soit pas le seul !
Les cartes à puce sont partout : Eurosmart rapporte plus de 7 milliards de cartes en circulation pour l’année 2013 seulement (soit environ 1 par habitant du monde). Cette omniprésence s’explique par la grande diversité d’applications des cartes à puce : carte de paiement, carte SIM, porte-monnaie électronique, cartes d’accès, titre de transport, etc.

Bien que les circuits électroniques sur carte soient un concept très français (avec les brevets de Roland Moreno sur les cartes à mémoire en 1974, et de Michel Ugon sur les cartes à microcontrôleur en 1977-1978), elles sont aujourd’hui utilisées partout dans le monde. En particulier, les cartes à puces sont actuellement en cours de déploiement dans les banques américaines, en remplacement des cartes magnétiques faciles à cloner.

Read More →

Pièces jointes

Plusieurs personnes m’ont demandé de mettre un récapitulatif de la conférence sur le site, j’espère que cela vous conviendra.

Le but des attaques par complexité est d’obtenir le déni de service d’un serveur ou d’un processus. Pour cela, on exploite le pire des cas de l’algorithme utilisé par la cible.

L’algorithme de tri rapide (quicksort), par exemple, s’exécute en moyenne en temps O(n log(n))  (où n désigne la taille du tableau). Cependant, cet algorithme s’exécute dans le pire des cas en temps O(n²)  (voir http://en.wikipedia.org/wiki/Quicksort pour plus de détails).

Le cas qui va nous intéresser plus particulièrement dans la suite est celui des tables de hachage. Ces structures de données permettent de stocker des paires (clé, valeur) en les regroupant selon la valeur d’un hash de la clé. Le cas le plus ordinaire consiste à stocker ces associations dans des listes chaînées, dont les premiers éléments sont stockés dans un tableau de taille fixe.

Exemple : Par mesure de simplicité, on va stocker des associations de nombres. On pose h la fonction de hashage suivante : h(x) = 5x[4].

Lorsqu’on insère les paires (4, 24), (7, 28), (5, 11), (1, 7), on obtient la table suivante (h(4) = 0, h(1) = h(5) = 1 et h(7) = 3:

On considère généralement que la longueur des listes est bornée. Dans ces conditions, l’insertion, la suppression ou la modification d’une association (clé, valeur) s’effectue en temps contant (calcul du hash de la clé dans tous les cas, plus parcours d’une chaîne bornée dans le cas de la suppression et de la modification) .

Toutefois, dans le cas où toutes les clés ont le même hash, toutes les associations sont stockées dans la même liste chaînée, et la modification des n valeurs de cette chaîne prend un temps O(n²) (au lieu de O(n) dans le cas où les n valeurs sont réparties dans différentes chaînes).

Ceci est interessant car des variables de PHP telles que $_GET, $_POST ou $_COOKIE sont stockées  dans des tables de hachage, et à chaque insertion, PHP vérifie que la valeur n’est pas déjà présente dans la table (l’insertion en tête pourrait créer des doublons). Ainsi, si on peut calculer n clés dont le hash est identique par la fonction de hashage utilisée par PHP, on fait exécuter de l’ordre de n² opérations au serveur ciblé.

Read More →

Pièces jointes