Archives 2010

L'usurpation d'adresse email, un jeu d'enfant.

Ma mémoire ne me permet pas de vous dire à quel age j'ai réussi cette "prouesse" (a titre privé), mais je peux vous confirmer qu'un enfant de 12 ans en est capable. Pour peu qu'il sache lire une doc. L'idée de cet article n'est pas de vous apprendre à finir en prison, de toute façon il suffit de savoir lire une doc, mais simplement de réfléchir sur la sécurité d'Internet.

Explications :

Explication sur les serveurs SMTP, POP et IMAP

Ici note amis CLIENT2 croit qu'il a un message de Mickey Mouse. Il a tort pour deux raisons : Les emails de Mickey Mouse ne sont réceptionnables qu'avec le protocole IPOT, ou en vous rendant à Mickeyville. De plus, les serveurs SMTP, et POP ne vérifient pas l'adresse de l'émetteur. Car, comme on peut le voir sur l'infographie (j'utilise le mot infographie : il parait que "ça fait bien", mais c'est "un schéma" en fait !), il n'y a aucun lien entre les serveurs POP/IMAP de chaque fournisseur de boite mail. Donc aucun moyen pour eux de vérifier si l'adresse c'est bien un abonné mariobross.net qui a envoyé l'adresse, ni même si elle existe.
Voilà d'où vient le problème !

Des solutions ?

La solution principal est : la signature numérique. Il y a pas mal d'explications sur Internet, rien de bien compliqué. Depuis 2000, elles ont autant de valeur que les "lettres papiers" non recommandées, rien de plus !
Notez que, juridiquement, les courriels non signés ne constituent pas des preuves irréfutables (et heureusement), mais il sont déjà utilisés comme "début de preuve".

Faut-il corriger le problème ?

Bien sûr, comme tous les problèmes ! Si nous vérifions auprès du serveur de réception (POP/IMAP) l'existence de l'adresse email d'envoi, cela limiterait les SPAMs, car les adresses qui envoient des SPAMs n'existent pas réellement. Mais, à moins de nommer une agence de régulation des emails (qui ne serait ni possible, ni souhaitable), il resterait toujours la possibilité de faire passer ces fausses adresses pour des vraies, en créant son propre serveur de réception.

En somme, les emails ne sont, ni plus, ni moins sécurisés que les courriers papier. Les protéger donnerait une fausse impression de sécurité qui serait, dans tous les cas contournable, et ne laisserait plus aucun bénéfice du doute en cas de problème. Il existe le même problème pour les SMS, bien que moins évident à mettre en œuvre.

Pour terminer, il faudra encore de longues années avant qu'Internet finisse de faire passer les lettres papiers dans l'oubli. À part quelques recommandations de bon sens (ne pas communiquer vos données personnelles tout ça... tout ça).

Bonnes fêtes de fin d'année !

Une machine de Turing

Une machine de Turing est une représentation mathématique d'un ordinateur. Elle dispose d'un ruban (tape), sur lequel elle peut se déplacer vers la gauche ou vers la droite, lire et écrire un caractère.
Pour représenter les chiffres, cette machine utilise la base 1. Pour le chiffre 0, elle place un barre (1) sur le ruban, pour représenter le chiffre 2, elle en place 3...

Malgré sa simplicité, cette machine est capable de calculer toutes les fonctions récursives.

Petit exemple :

Un exemple très simple est la fonction Zéro. C'est une fonction constante, qui pour n'importe quel nombre renvoie 0. Rappelons-nous qu'avec notre machine le 0 s'écrit avec une barre (1).

Si nous prenons le ruban contenant le chiffre 4 :
11111000000000000
Nous devrions donc obtenir :
10000000000000000

Analysons le programme :
q0 1 D q1 # On conserve le 1er 1 : pour faire 0
q1 1 0 q2 # Suppression des 1 inutiles
q2 0 D q1

q1 0 0 q3 # Retour à la position initiale
q3 0 G q3

Une machine de Turing dispose d'un algorithme très simple, celui-ci a même été reproduit mécaniquement ou optiquement !
Une instruction se compose de 4 parties :
L'état initial, la condition, l'action et l'état final.
Par exemple pour la première : q0 1 D q1
Au début nous sommes toujours à l'état 0. Le premier élément du ruban est 1.
Notre machine va dont recherche un instruction commençant par q0 1, ensuite elle va exécuter l'instruction contenue dans la seconde partie de l'instruction.
Ici : D q1 : Elle doit donc avancer vers la Droite sur le ruban et passer à l'état q1.
Elle va maintenant recherche une instruction correspondante à l'état q1 et qui a comme condition l'élément courant du ruban : ici 1 et nous exécutons l'action 0 (remplacer l'élément courant du ruban par 0) et passer à l'état q2.

Pour résumer, les actions dont elle dispose sont :
G : Aller à gauche
D : Aller à droite
1 : Écrire un 1
0 : Écrire un 0
et parfois :
* : Écrire une * pour délimiter deux nombres par exemple

Une machine de Turing en Python :

Cette machine est capable de gérer un nombre infini d'état.

# -*- coding: utf-8 -*-
#
# uTuring
#
# Copyright (c) 2010 Amaury GRAILLAT
# Licensed under the GNU GPL license.
# See http://www.gnu.org/licenses/gpl.html
#               amoweb.fr 
#
# File exemple :
# # Zero function                              You can comment a line with #
# q0 1 0 q1       {Stat} {Condition} {Action (1, 0, *, L or R)} {Final stat}
# q1 0 D q0
# q0 0 1 q2
# 
# =1111000000000000000000:0                ={tape}:{Initial stat (optional)}
#

import os
INDD = 0 ; COND = 1 ; ACTN = 2 ; INDF = 3
ruban = [] ; instr = []
k = 0   # position sur le ruban
q = '0' # état

# Trouve l'instruction correspondant à la condition et 
def searchInstruction(q,k) :
	# print "searchInstruction(%s,%s)"%(q,k)
	for i in instr :
		if i[INDD] == q and i[COND] == ruban[k] :
			return i
	return [0,0,0,0]
	
def monospace(str) :
	str = str.replace("\t", " ");
	while str.count("  ") > 0 :
		str = str.replace("  ", " ");
	return str

if __name__ == '__main__' :
	print("Welcome to uTurning : ")

	# Charge le programme depuis le fichier :
	with open("program.txt") as program :
		for instruction in program :
			# Charge le ruban
			if instruction[0:1] == "=" :
				# Partie donnée
				for s in instruction :
					if s == ':' :
						break
					elif s != '\n' and s != '=' :
						ruban.append(s)
				# Position d'origine (facultative)
				if len(instruction.split(':')) > 1 :
					k = int(instruction.split(':')[1])
			# Fin du fichier :
			elif instruction[0:3] == "EOF" :
				break
			# Charge une instruction
			elif instruction != '\n' and instruction[0:1] != "#":
				instruction = monospace(instruction);
				if len(instruction.split(' ')) > 3 :
					qStrI = instruction.split(' ')[0]
					qStrF = instruction.split(' ')[3]
					instr.append([qStrI[1:len(qStrI)], instruction.split(' ')[1],
					instruction.split(' ')[2], qStrF[1:len(qStrF)-1]])
	# Exceptions :
	if len(ruban) == 0 :
		print "TAPE missing : example : =11100000:0"
		exit()
	if len(instr) == 0 :
		print "Instructions missing : example : q0 1 0 q2 "
		exit()

	# Exécution des instructions :
	curInst = searchInstruction(q, k)
	while curInst != [0,0,0,0] :
		# Affiche le ruban :
		print (''.join(ruban)) + " (q" + q + ")"
		print " "*k + "^"

		# Interprête les instructions :
		if curInst[ACTN] == 'D' or curInst[ACTN] == 'R' :
			k = k + 1
		elif curInst[ACTN] == 'G' or curInst[ACTN] == 'L':
			k = k - 1
		elif k < 0 :
			print "Warning ! Out of range : k = -1 ---> k = 0"
		else :
			ruban[k] = curInst[ACTN]

		# Nouvel état 
		q = curInst[INDF]

		curInst = searchInstruction(q, k)
# Affiche le ruban final :
print (''.join(ruban)) + " (q" + q + ")"
print " "*k + "^"

Et quelques exemples (à copier coller dans un fichier program.txt à coté du programme python) :

# Fonction successeur :
q0 1 D q0
q0 0 1 qa
qa 1 G qa
qa 0 D q2
=1111100000000000:0


EOF ----------------------------
# Couples d'entiers :
# Suppression :
q0 1 D q0
Q0 * * Q1
q1 * 0 q2
q1 1 0 q2
q2 0 D q1

Q1 0 0 Q3
Q3 0 G Q3
Q3 1 1 Q4
Q4 1 G Q4
Q4 0 D Q5

=111*1111000000000000000000

Un service de partage de Blocnote en ligne - Les Sources

Suite aux demandes de Tom et Lewo, je met aujourd'hui en ligne le code de mon Simple Black Board en Ajax (PHP et fichiers textes).
Il permet, par l'intermédiaire d'un lien unique de partager un texte et de permettre la modification et la visualisation des modifications en temps réel par les visiteurs.
Le code est largement inspiré d'un tutoriel du SdZ.

Demo
Télécharger sources (GNU GPL)

Plus d'infos sur Simple Black Board

Théâtre : Une tournée, une vraie.

Imaginez-vous, un jeudi à 13h, dans un petit village de la Drôme (Sud-Est). Il ne faisait pas très chaud, le temps semblait alors idéal pour faire les 6h de route qui nous séparaient de l'Indre-et-Loire (Nord-Ouest). Sur le trajet nous étions huit membres de La Chaumière d'EDGUAR, une récente (mais pas sans expérience) association théâtrale, qui interprète Les souvenirs se font la malle.

Montrésor, vue du rempart du château
Montrésor, vue du rampart du château. (Crédit : Nathan)

Nous sommes arrivés, assez tôt à Montrésor, c'était la seconde fois que je m'y rendais. J'aime beaucoup cette ville, son historique, son architecture. Le vendredi matin nous avons pu visiter l'église et le château.
À 14 nous avons garé le camion devant la salle des fêtes d'Orbigny, après 3h d'installation et quelques tours de tarots les premières personnes arrivent. Ça fait plaisir de savoir qu'il y a du monde, alors que le spectacle n'est pas connu dans la région. Très vite, on entend les rires, les applaudissements.

Je n'avais jamais imaginé faire un jour une tournée, une vraie : une loin.
Je découvre tout les ans de nouvelles salles des fêtes avec La Chaumière d'EDGUAR et Le petit théâtre des Mathurins et j'avais déjà fait 3 jours de spectacle de suite, mais jamais dans 3 salles différentes. Nous avons dû déplacer une scène, faire des choix, trouver des solutions dans des lieux inconnus et très différents : des salles des fêtes et un château (à Orbigny, Loché-sur-Indrois et Chemillé-sur-Indrois). C'était de l'adaptation, de la vraie.

Nous avons rencontré plein de monde. Mise à part la fatigue, tout était génial : autant à l'Indrois qu'à l'inverse.

MissWhite and The Drunken Piano ! l'exemple même d'un HipHop ouvert.

Vous connaissez le HipHop ? Je ne connaissez que quelques classiques commerciaux avant hier soir : lors d'un concert.
Contrairement à ce que beaucoup pense, le HipHop est un style très ouvert, où peuvent se mélange plusieurs autres styles.
Hier soir j'ai découvert 3 groupes : MissWhite, Smooth et Hocus Pocus

C'était très intéressant de comparer les interprétations différentes du HipHop qu'avaient ces trois groupes :

Smooth, nous montrait un HipHop très rock avec des paroles chantées, et un accompagnement piano "carré". La basse très présente et le synthétiseur faisaient allusions au funk.

Hocus Pocus semblait influencé par la dance, avec les vents et les cuivres et le jazz dans les improvisations, notamment au piano.

MissWhite aux frontières du jazz (avec le piano et le saxophone) et du jazz vocal, certaines musiques sont des arrangements de musiques classiques (Chopin par exemple).

Les mises en scène de ces deux derniers groupe ont été soignées : Un show millimétré pour Hocus Pocus, et une mise en scène très théâtrale pour MissWhite.


Présentation de MissWhite