Archive pour août 2009

La bêtise est humaine

Jeudi 6 août 2009

Il m’est rare de poster des billets d’humeur, mais là je n’ai pas vraiment pu m’en empêcher.

J’ai eu récemment la très belle et appréciable idée de faire le tour de mon compte chez mon hébergeur, de vérifier qu’il n’y a plus de choses qui sont un peu « outdate » . Alors oui, j’avais une ou deux bases de données qui n’étaient plus du tout utilisé, donc je les ais supprimé. Et de l’art de bien décrire ses bases de données, la vielle description présente ne m’a pas mis la puce à l’oreille. Et c’est mon blog que j’ai supprimé. Aucune backup SQL.

Donc mission récupération des articles grâce au cache google ( et non webarchive :s ), réinstallation de wordpress et de nouvelle base de données, et remises en état des articles. C’est pourquoi il ne sont peut-être pas forcément dans l’ordre, et qu’il risque de manquer certaines images.

Mais bon, on apprend de ses erreurs, et celle là ne m’arrivera plus ! ( du moins je l’espère :) )

Sur ce, bonne lecture à tous/toutes

Ajax

Introduction à quelques concepts de l’intelligence artificielle

Jeudi 6 août 2009

Quel sujet vaste que celui de l’intelligence artificielle !

Il m’en impossible ici d’en aborder toutes les facettes, ne serait-ce que parce que les principes de certaines m’échappent totalement. Non, je vais essayer de vous montrer deux trois choses, des éléments qui pourront vous aider dans votre compréhension de ce vaste monde. Peut-être que d’autres articles suivront…

En tout cas, celui-ci va d’abord vous présentez un jeu, le tic-tac-toe ( ou morpion ), ainsi qu’un possible joueur artificiel à ce jeu. Cela me permettra d’aborder l’algorithme MinMax et son “extension” Alpha-Bêta.

Après avoir vu ces joueurs déterministes, c’est à dire qu’ils joueront la même chose pour une même situation, je vous présenterais différentes méthodes d’apprentissage. Notre joueur évoluera au fil des parties.

Tout d’abord, qu’est-ce que le tic-tac-toe ?

Les règles sont simples : Le terrain de jeu contient 3×3 cases. Les 2 joueurs jouent en tour par tour. A chaque tour, un joueur remplis une case vide avec un signe/couleur qui lui correspond. Le but du jeu est de réussir à aligner 3 fois son signe, que ce soit horizontalement, verticalement ou en diagonale, avant son adversaire. A ce moment là, la partie s’arrête. Si aucun des deux n’arrivent à aligner 3 cases et que les 9 cases sont remplies, il y a match nul.
Bref, c’est un jeu que vous connaissez surement.

Lire le reste de cet article »

Quelques résultats sur l’arrêt optimale

Jeudi 6 août 2009

Un précédent article porte sur la théorie des jeux. Il nous permet d’obtenir des stratégies optimales pour un grand nombre de jeux.

Je vous propose ici d’autres résultats, concernant des jeux dont le gain dépend directement du moment où le joueur s’arrête.

Le premier jeu présenté sera un lancé de dés. Le principe est le suivant : le joueur lance un premier dé, il peut choisir de s’arrêter. Si il s’arrête, il gagne en euros le score du dé. C’est à dire que si il fait un 6 et qu’il choisi de s’arrêter, il gagne 6 €. Il peut aussi choisir de continuer, donc de lancer un deuxième dé, et de nouveau, il a la possibilité de s’arrêter. Si il le fait, il gagne le score du second dé, et ainsi de suite.
Il a le droit à 6 lancés de dé, sachant qu’au bout du 6ème il est obligé de s’arrêter ( et donc de gagner en euros ce qui est indiqué sur le dé ).

Quelle est la stratégie optimale à ce jeu ?

Lire le reste de cet article »

Deux/trois mots à propos de la théorie des jeux…

Jeudi 6 août 2009

Théorie des jeux ? Argh .. encore des maths ?

Bon, des maths oui, mais ça va se résumé à savoir faire une fraction :) .

Qu’est-ce que la théorie des jeux ?

C’est la traduction mathématique et logique de problèmes qui peuvent être économiques, sociales, diplomatiques, etc. et de leurs solutions possibles, suivant plusieurs critères. Bon, pour être moins vagues, donnont l’exemple le plus connu du dilemne du prisonnier. Soit deux criminels qui vont passer séparemment un intérogatoire. La police n’a aucune preuve contre aucun des deux, elle souhaite donc des aveux. Si aucun des deux n’avouent, ils écoppent de 6 mois de prison. Si un des deux avoue, il est immédiatemment libéré, et l’autre suspect écoppent de 15 ans de prison. Si les deux avouent, ils partent chacun pour 8 ans de prison. Bien evidemment, les deux interrogatoires se déroulent simultanément.

Lire le reste de cet article »

Echange de donnée cryptée, sans échange de clé unique ?

Jeudi 6 août 2009

Bonjour, c’est Bernard !

J’aimerais bien communiquer avec Alice, malheureusement Eve est dans le coin ….

Ah, je sais !  Je vais crypter mes données ! Pas de problèmes, plein d’algorithmes existent déjà comme DES, ou je peux même faire le mien !

Ah … mais il faut que je donne à Alice une clé… et Eve est très en forme sur les attaques ManInTheMiddle ces temps-ci …

Plus sérieusement, comment pourrait faire Bernard pour crypter ses informations sans que Eve ne puisse les décrypter ?
C’est à dire, comment éviter qu’Eve espionne l’échange de la clé, appelée clé privée ?

Ce fut le grand problème des cryptographes jusqu’à ce début de siècle, et jusqu’a l’idée de Diffie et Hellman. En effet, ils ont tout simplement imaginé qu’il était possible de ne pas utiliser seulement une clé privée dans une fonction cryptographique réversible. A partir de l’idée de la boite à cadenas, qui prouve qu’il est possible de ne pas utiliser seulement ces fonctions, l’idée fut de trouver des ( voir une ) fonction à sens unique.

Tout d’abord, qu’est-ce que la boite à cadenas ?
Bernard peut mettre son message dans une boite, qu’il refermera avec un cadenas A dont il est seul possesseur de la clé. Il envoie sa boite à Alice, qui ne peut l’ouvrir, mais qui rajoute un cadenas B dont elle est seule possesseur de la clé , et qui renvoie cette même boite à Bernard ( avec donc les cadenas A et B dessus ). Bernard enlève son cadenas A puisqu’il a la clé, et renvoi la boite à Alice. Alice peut maintenant enlever son cadenas B, ouvrir la boite, et lire le message de Bernard. Ici, le cadenas représente la fonction de cryptage, et la clé représente la clé utilisé. Dans cette exemple, Bernard n’a pas eu besoin d’échanger sa clé avec Alice, et donc, pas de risque d’interception. Et ça, c’est tout simplement une révolution pour le monde de la cryptographie.

Lire le reste de cet article »

HTTP Response Splitting ( Séparation de réponse HTTP )

Jeudi 6 août 2009

Bien le bonjour :)

Pour vous présenter cette technique somme toute assez méconnue, je vous propose de vous faire un min-rappel sur le protocole HTTP, ou plutôt sur ce qui se passe lorsque votre naviguateur va sur le site www.exemple.com .

Si vous entrez “http://www.exemple.com” dans votre navigateur préféré ( au hasard Internet Explorer 5 ), la requête envoyée au serveur sera la suivante ( je simplifie ici énormément la requête ):

GET / HTTP/1.1
Host: www.exemple.com

Avec les caractères de retour chariot ( \r ) et de saut de ligne ( \n ), celà donne :

GET / HTTP/1.1\r\n
Host: www.exemple.com\r\n\r\n

Maintenant, regardons une requête un peu plus complète ( demande d’affichage de la page http://localhost/http_splitting.php ) :

GET /http_splitting.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Et la réponse du serveur:

HTTP/1.x 200 OK
Date: Sun, 02 Nov 2008 10:55:25 GMT
Server: Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8h mod_autoindex_color PHP/5.2.6
X-Powered-By: PHP/5.2.6
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
 Lire le reste de cet article »

(Petite)Introduction au profiling

Jeudi 6 août 2009

Profiquoi ? -> Profiling ! ( profilage )

Le profiling est un art permettant d’établir l’ébauche de l’identité d’une personne, à partir par exemple de ses écrits, mais aussi de ses faits et gestes, de ses fréquentations, … ( Dans la suite, nous parlerons de tout ce qui se rapporte au profiling de l’auteur d’un écrit ).

Tout d’abord, le pourquoi du profiling ?

Le profiling est utilisé par certains services comme la criminologie, afin par exemple de dresser un profil psychologique d’un criminel. Ces informations permettent d’orienter une enquête, de “trier” des suspects, de comprendre certaine chose, ou encore d’amener à en découvrir de nouvelle ( un certain profil peut indiquer un certain lieu, .. ) . Dans notre contexte, nous essairons de dresser le profil d’un auteur afin de le comparer à celui d’un autre. Celà nous permettra de savoir si tout d’abord l’auteur est bien une unique personne, son pays natal, son sexe, son niveau d’étude, …. et ensuite, en le comparant à celui d’un autre, déterminer si les deux auteurs ont des chances de n’être qu’un(e) .

“Ont des chances”, car en effet, le profiling est une science inexacte, mais qui repose néanmoins sur des études pertinentes, d’ordre social, psychologique,…

Lire le reste de cet article »

Le protocole UpNp, sa presentation et ses problemes

Jeudi 6 août 2009

Nous allons nous interesser dans cet article au protocole UpNp .
Je vous propose tout d’abord l’introduction que nous donne Wikipedia :
L’Universal Plug and Play (UPnP) est un protocole réseau promulgué par l’UPnP Forum.
Le but de l’UPnP est de permettre à des périphériques de se connecter aisément et de simplifier l’implémentation de réseaux à la maison (partages de fichiers, communications, divertissements) ou dans les entreprises. UPnP le permet en définissant et en publiant les protocoles de commande UPnP au-dessus des standards de communication de l’Internet.

Plus clairement, lorsque vous connectez une imprimante, votre Box, etc…, ces produits, etant compatible UpNp, vont tenter de s’auto-configurer ( autant dire qu’ils y arrivent la plupart du temps :] ).
Ces produits doivent respecter des spécifications normalisées, mais peuvent contenir d’autres fonctions supplémentaires, relatives au produit ( une Box qui pourra activer son Wifi via UpNp.. ).
L’établissement d’une connection UpNp se déroule en plusieurs étapes :
-L’obtention d’une adresse IP lorsque l’équipement est connecté sur le réseaux
-Le produit va ensuite avertir les autres équipements sur le réseaux de sa présence via une requête NOTIFY. Cette requete contient un champ LOCATION, indiquant le chemin du fichier XML listant les services.
-Envoi de l’adresse du fichier de configuration ( XML )
-Controle du produit

Les équipements ou logiciels présent sur le réseaux peuvent aussi chercher à obtenir l’adresse d’un service, via une requete M-SEARCH.
Malheuresement, ce beau protocole ne contient absolument aucune sécurité…

Lire le reste de cet article »

Cryptanalyse d’un texte chiffré par l’algorithme de Viginère

Jeudi 6 août 2009

Comme la dernière fois, je vous propose une approche par l’exemple. A vous d’essayer de déchiffré ce qui suit :

IYVLS LZKIW KHMMX ZLHHE ONEEX UNBSX JYVPO AHXGV KMXTB KMXRD KAXRO XUEIW KHMWY AMEEP ULFIN AHFSD UOWYX KJAVK YYISE XJHYF UCKGR OZYVO XHHXB KNXBD KUVLK WOXGK XUVXO XYGSE YOMMV OMHRC AHXPO ZNKIN KFTGV KJHYB KZYIM ZOXVV GMNFC ZCMYD OIGIF OXXQW KHMTV AMEEM RYLIB GFHRQ AYXXF GLBIO KNFMO AREID KRMIC KLTGR OZYVO OFYEE ZMTZY OLJYS RSTIE AHXTO XCHHO UOWIC VULWK MYLIX ZCXVC JOOVO YFBXD KLTMB KMXXK OYGXE ZCEMC KMISE XWAMP LLXVV KMIPE YAKEX JMLIM XYMWV KMWIE DWHVB KMISX JUGXC TUOES KHMTV AMJYK GPHMB KHEIE XMFES TMNRO DYFTV GCKIN AGXQO RCOVO VINVC GMLYB KLWIV GVHRX KWHQZ XYAIX YCHRN KMFIC YUZIC

On ne connais bien entendu pas la clé, le but étant de la retrouvé, ainsi que le texte en clair.

Si le mot cle est BAD et que le mot à chiffré est COOL, on a :
DORM
On remarquera que les deux “O” ne sont pas chiffré de la même façon, d’où la force du chiffre de Viginère. C’est ainsi qu’il a été indéchiffrable jusqu’au XIXème siècle.

La méthode de cryptanalyse repose en deux étapes :
Tout d’abord, nous allons essayer de déterminer la taille de la clé.
Pour celà, il est possible d’utiliser deux méthodes : L’indice de coïncidence ( test de Friedman ) ainsi que l’analyse de la distance entre deux chaines semblables. Nous utiliserons cette dernière.
Elle repose sur le principe que même si une lettre est codée différement à chaque fois, elle sera néanmoins répétée plusieurs fois de la même manière.
Par exemple dans notre texte, “BKMX” est répété, et l’écart entre les deux chaines est de 275 caractères.
Ce qui veut dire que soit la chaine fait 1 caractères, soit un multiple de 275. Il y a aussi une infime probabilité pour que le BKMX code pour une autre chaine, et que sa répétition n’est que pure coïncidence. Evidemment, avec une chaine de 4 caractères, cette probabilitée est très faible, pour ne pas dire nulle.
Nous allons donc cherché toutes les chaines de 4 caractères qui se répète, et faire le PGCD de leurs intervalles.
La liste ci-dessous représente les différentes intervalles entre deux même chaines :
50, 50, 190, 140, 145, 145, 145, 145, 275, 245, 45, 195, 195, 195, 195
Le mot clé a donc une taille qui est un multiple de tout ces nombres, c’est à dire 5 ou 1.
Si le mot clé avait pour taille 1, nous aurions eu affaire à un simple Chiffre de César, ce qui n’est pas le cas.
En utilisant l’indice de coïncidence, nous obtenons le même résultat, mais la technique n’est pas détaillée ici.
Maintenant que nous savons que notre clé fait 5 caractères, nous allons pouvoir réunir les caractères chiffrés avec le même alphabet.
En ne prenant que le début du texte, on peut dire que :
I,L,K sont chiffrés avec le premier alphabet décalé
Y,Z,H le sont avec le deuxième, etc..
Ainsi, nous obtenons cinq chaines de caractères, toutes chiffrées avec un alphabet décalé, ou encore un Chiffre de César.
Pour pouvoir trouver chaque décalage, nous allons procédé à une analyse fréquentielle de chacune.
Pour le premier décalage, et donc la première lettre du mot clé, nous allons procédé à une analyse fréquentielle de :
ILKZOUJAKKKXKAUAUKYXUOXKKWXXYOAZKKKZGZOOKARGAGKAKKOOZORAXUVMZJYKKOZKXLKYJXKDKJTKAGKXTDGARVGKGKXYKY
Ce qui nous donne les fréquences suivantes (en %):
A 10.204081632653061
B 0
C 0
D 2.0408163265306123
E 0
F 0
G 7.142857142857143
H 0
I 1.0204081632653061
J 4.081632653061225
K 26.53061224489796
L 2.0408163265306123
M 1.0204081632653061
N 0
O 9.183673469387756
P 0
Q 0
R 3.061224489795918
S 0
T 2.0408163265306123
U 5.1020408163265305
V 2.0408163265306123
W 1.0204081632653061
X 10.204081632653061
Y 6.122448979591836
Z 7.142857142857143
On remarque que la lettre K est la lettre la plus fréquente, que les trois fréquences L,M et N sont très faibles, celle de O forte puis de nouveau deux fréquences très faible. Si l’on décalle la lettre K pour qu’elle devienne E, ces statistiques de fréquence correspondent avec celle de la langue française. On en déduit donc que pour la première lettre, on a affaire a un décalage de E vers K, c’est à dire de A vers G.
La première lettre du mot clé est donc G.
De la même façon, nous pouvons déterminer les 4 autres lettres. Il est important de ne pas seulement prendre la lettre la plus forte comme étant un E, mais de bien regarder la suite de lettre.
Nous obtenons donc la clé GUTEK, et le message en clair :
CECHI FFREM ENTIN TRODU ITLAN OTION DECLE UNECL
ESEPR ESENT EGENE RALEM ENTSO USLAF ORMED UNMOT
OUDUN EPHRA SEPOU RPOUV OIRCH IFFRE RNOTR ETEXT
EACHA QUECA RACTE RENOU SUTIL ISONS UNELE TTRED
ELACL EPOUR EFFEC TUERL ASUBS TITUT IONEV IDEMM
ENTPL USLAC LESER ALONG UEETV ARIEE ETMIE UXLET
EXTES ERACH IFFRE ILFAU TSAVO IRQUI LYAEU UNEPE
RIODE OUDES PASSA GESEN TIERS DUVRE SLITT ERAIR
ESETA IENTU TILIS ESPOU RCHIF FRERL ESPLU SGRAN
DSSEC RETSL ESDEU XCORR ESPON DANTS NAVAI ENTPL
USQUA AVOIR ENLEU RSMAI NSUNE XEMPL AIRED UMEME
LIVRE POURS ASSUR ERDEL ABONN ECOMP REHEN SIOND
ESMES SAGES
Ou encore :
Ce chiffrement introduit la notion de clé. Une clé se présente généralement sous la forme d’un mot ou d’une phrase. Pour pouvoir chiffrer notre texte, à chaque caractère nous utilisons une lettre de la clé pour effectuer la substitution. Évidemment, plus la clé sera longue et variée et mieux le texte sera chiffré. Il faut savoir qu’il y a eu une période où des passages entiers d’œuvres littéraires étaient utilisés pour chiffrer les plus grands secrets. Les deux correspondants n’avaient plus qu’à avoir en leurs mains un exemplaire du même livre pour s’assurer de la bonne compréhension des messages. ( Présentation du chiffre de viginère de Wikipédia )

On peut attribuer cette découverte à Charles Babbage, même s’il ne l’a pas publier.Cette technique porte donc le nom de Friedrich Wilhelm Kasiski, ayant fait cette même découverte un peu plus tard ( et l’ayant publié dans “Ecriture secrète, et art du déchiffrement” ).

Remarque : Une autre méthode peut être employé, appelée “mot probable”. En effet, imaginons que notre texte contient le mot “que”. Nous imaginons alors qu’il ne contient seulement le mot “que”. Ainsi, nous obtenons une clé. Prenons un deuxième texte, chiffré avec la même clé, et appliquons notre clé temporaire. Si nous ne nous sommes pas trompé, il est probable que certaine partie du texte ressortent, nous permettant de deviné une partie de la clé. Voilà pourquoi il est déconseillé de toujours utilisé la même clé, et de préféré un système de clé jetable.

Encore une fois, je vous conseille de vous faire des petits outils qui vous aideront dans votre analyse.

On pourra par exemple utiliser un utilitaire pour essayer de trouver la longueur de la clé ( en cherchant l’espace entre les mêmes chaines, et puis un PGCD de tout ça :) ) :

inter,i,all,num,texte = input("Intervalle : "),0,{},[],""
def pgcd(a,b):
    while a<>b:
        if a<b:
            a,b=b,a
        a,b=a-b,b
    return a
def pgcdl(l):
    lepgcd=l[0]
    for element in l:
        lepgcd=pgcd(lepgcd,element)
    return lepgcd
while i < (len(texte) - inter):
    chaine,temp = "",i
    while temp < (i+inter):
        chaine = chaine + texte[temp]
        temp += 1
    if texte.count(chaine) > 1 :
        if all.has_key(chaine) :
            num.append(i - all[chaine])
        else :
            all[chaine] = i

    i+=1
print pgcdl(num)

Bonne journée à tous !

ClickJacking : Comment on vous “vole” vos clics

Jeudi 6 août 2009

Avez-vous entendu parler du ClickJacking ? Cette technique qui permet d’utiliser vos clics à d’autres fins ?

Je vous propose dans cet article de voir le principe, les buts et le contexte d’utilisation de cette “attaque”. Nous pourrons aussi voir un exemple, plus proche du Proof Of Concept qu’autre chose, mais toujours intéressant à étudier :) .

Tout d’abord le principe. Certaines propriétés du langage HTML nous permettent de rendre des objets complètement transparents. Et d’autres nous permettent de superposer des pages les unes sur les autres.
Imaginons donc deux pages superposées l’une sur l’autre, une des deux étant transparente. Lorsque vous cliquez quelque part, les clics sont alors effectués sur les deux pages, même si vous ne “voyez” le résultat que sur une seule.

Mais une vidéo vous expliquera ça bien mieux que tout un pâté de texte :) . Voici donc la vidéo PoF, permettant d’autoriser une application flash à activer la webcam :
http://www.youtube.com/watch?v=gxyLbpldmuU

Maintenant, pourquoi utiliser une attaque de ce type ?

Eh bien pour toutes les choses requérant des clics à des endroits précis, et invariants ( c’est à dire en général tout ce qui est configuration de Flash ), faire valider des formulaires pré-remplis, …

Enfin, cette attaque a l’avantage d’être relativement discrète…
Pour vous protéger ( eh oui, sortez couvert :) ), je vous conseille l’excellente extension “NoScript” pour Firefox ( https://addons.mozilla.org/fr/firefox/addon/722 ).

Maintenant, essayons de mettre en place une attaque de ce style.

Imaginons une page clickjackme.html, de code source :

<html>
<head><title>ClickJackMe !</title></head>
<body>
<form action="http://www.perdu.com" method="POST">
<input type="submit" value="ClickJackMe!" />
</form>
</body>
</html>

Vous l’aurez compris, le but est que le visiteur clique sur notre bouton “ClickJackMe!”. Les propriétés HTML qui vont nous servir sont “z-index” permettant de régler la profondeur, et opacity pour l’opacitée des pages. Nous utiliserons en plus de ça un filtre ( alpha(opacity=0) ).

Pour inciter notre visiteur à cliquer, nous allons mettre un bouton pour “Skip intro” :)

Le code source de notre page lambda.html :

<html>
<head>
<title>Page Lambda</title>
</head>
<body>
    <div id="lambda" style="z-index:-10; position:absolute; top:1px; height:10px; padding-top:15px; width:100%; padding-left:35px; ">
        <input type="button" value="Skip Intro" />

    </div>
    <div id="evil" style="z-index:10; opacity:0; filter:alpha(opacity=0);">
        <iframe id="iframe" src="clickjackme.html" frameborder="O"  style="opacity:0; filter:alpha(opacity=0);" />
    </div>
</body>
</html>

J’imagine que vous voulez voir ce que cela donnerait si nous n’avions pas cacher la page clickjackme.html . C’est tout simple, remplacez opacity:0 par opacity:60 par exemple ( c’est en % ). Vous remarquerez que nos deux boutons ( Skip intro  et ClickJackMe! ) sont l’un sur l’autre.

Il n’y a pas très longtemps, il y avait possibilité de bypasser les filtres de Noscript, avec par exemple pour l’équivalent d’une iframe: <object data=”http://www.google.com” width=”200″ height=”200″></object>

Ce problème à été réglé dans la dernière version de NoScript ;)