Affichage des articles dont le libellé est Sécu. Afficher tous les articles
Affichage des articles dont le libellé est Sécu. Afficher tous les articles

Le Vigile Numérisera

Un petit texte consacré à mon dégout des CAPTCHA. Les CAPTCHA vous voyez ? Ces petites épreuves que les machines nous infligent pour vérifier que nous sommes bien des humains. Littéralement ce sont des vigiles numériques Textes tout tordus à déchiffrer, morceaux de vélo en puzzle, images de ponts à reconnaître, etc. Épistémologiquement ça me troue le cul ! Bientôt les machines nous demanderont de faire la danse de la pluie et on s'exécutera sans quoi elles nous exécuteront.

Le vigile numérisera

Dire la similitude ridicule
la caricature des inutiles.

Imaginer un examen unanime
paradoxal oxymore figuratif.

Ériger en idoles à faciliter
et un apax isole l'usager.


Et bien sûr ceux qui me connaissent (ouais, toi) se doutent que le texte précédent respecte une contrainte. Je vous laisse la chercher tranquilement si ça vous amuse. Je glisse juste des indices en commentaires.

Geek Background

Fabriquer une condition avec des opérations arithméteeks

Une à deux fois par nuit je me réveille en sueur froide avec une grande question existentielle dans la tête. En général c'est plus ou moins des histoires de zombie post-apocalypteek. Ou du hack. Des trucs fun quoi. Eh bien en ce moment c'est plutôt des questions de math et de programmation(*). Encore plus fun !

Ma question de cette nuit


Peut-on fabriquer une condition avec juste des opérations arithméteeks ?


Réponse courte : oui, on peut




Réponse longue comme... la fin de 2001 l'Odyssée de l'espace


Pour commencer l'énoncé mérite quelque précision(**). Par opérations arithméteeks j'entends des opérations usuelles sur les nombres. Par « condition » j'entends une structure du style : SI <gnagnagna> ALORS <pouetpouet>. 

La partie compliquée à réaliser c'est le <gnagnagna>. Quand on y pense il s'agit d'une fonction définie partout mais pas continue. On peut d'ailleurs concentrer la difficulté en un point précis et transformer l'énoncé en : fabriquer une fonction z(x) qui s'annule seulement quand x égale zéro. On va même épurer le problème en demandant que la fonction z soit « normalisée » c'est-à-dire : SI x=0 ALORS z(x)=0 SINON z(x)=1. Perso, si on me donne ça comme fonction, je sais réaliser n'importe quelle condition sans trop me fouler. Et du coup j'aurais moyen de me rendormir.

Des fonctions z de ce type là on en rencontre à tous les coins de rues. Enfin disons dans le moindre bout de code. Et c'est très facile à définir en utilisant une définition par cas(***).


Seulement voilà, la définition par cas n'est pas arithméteek. Mais alors pas arithméteek du tout. En gros elle ne travaille pas vraiment sur les nombres comme le font par exemple l'addition ou la multiplication. Du coup va falloir réfléchir deux minutes. Petite précision tant que j'y suis, je me suis interdit de chercher la solution direct sur Internet (en fait c'est surtout que je ne savais pas trop quoi googler comme question). Du coup, obligé de chercher dans ma tête. Tu verrais le foutoir là-dedans on dirait ma piaule !


Bricole ta fonction avec Metallurgeek


D'abord la fonction devrait être symétreek autour de zéro. Ben ouais, y pas de raison que ça marche moins bien pour les négatifs que pour les positifs, hein ? Après j'ai vaguement l'idée qu'il faudrait diviser un truc par un autre de manière à empêcher la fonction de croitre arbitrairement. Et pour que la fonction s'annule en zéro une puissance paire de x au numérateur pourrait l'affaire. Au dénominateur il faut un truc qui ne s'annule pas. Parce que quand on annule un dénominateur ça peut créer une vergence dans la force. Tant qu'on y est ça serait bien que le dénominateur soit un poil plus grand que le numérateur. Comme ça la fonction resterait gentiment inférieure à un. Dernier truc, j'ai besoin d'une primitive fondamentalement pas continue. C'est là que j'utilise la fonction plancher. Ça on ne va pas y couper parce que je sais trop fabriquer du discontinu avec que du continu. Reste plus qu'à inverser les retro-gradateurs de tension, stabiliser l'endo-phase éthylo-plasmateek, refroidir la planète, et ça devrait le faire.

Et c'est ainsi qu'on arrive à la fonction indiquée au début de l'article. Clairement je ne suis pas le premier à avoir (re)trouvé ça. À mon avis c'est déjà dessiné sur les grottes de Lascaux (Dordogne) ou sur les grottes de La Squaw (Wyoming). Mais quand même je suis content, j'ai mitonné ma petite fonction et je peux me rendormir du sommeil du juste.


Epilogue : à quoi ça sert ?


  1. Dans la vraie vie, ça sert à se rendormir.
  2. En hacking, ça sert à coder une condition dans un payload injecté sans avoir besoin du caractère espace.
  3. En science fiction, ça sert à sauver les colons humains dans un vaisseau spatial dont l'IA a été contaminé par une intelligence mi-belliqueuse mi-hostile mi-traillette. Le seul module qu'on contrôle encore c'est le module arithméteek parce qu'il est de fabrication française et donc trop anteek pour être vérolé.

Epicologue : et les nombres complexes alors ?


Ben ouais, si x = i, le dénominateur il s'annule quand même ! Du coup, nouveau réveil en sueur froide...



(*) J'ai déjà ma question pour la prochaine nuit, et ce sera de la grammaire. Faut-il dire « en ce moment c'est plutôt des questions » ou « en ce moment ce sont plutôt des questions. » L'usage de base penche pour la solution 1, la doxa penche pour la solution 2. La bonne solution est surement la 3. Ou la 4.
(**) Quelque précision ? quelques précisions ?
(***) Ou encore plus pédantement en utilisant le crochet d'Iverson.




Pattern Lock - Quelques compléments

Quelques compléments sur le billet de la semaine dernière à propos des codes de débloquage.

Nombre de combinaisons possible en fonction de la longueur du code.
Liste des 160 codes de longueur 2.
Merci @Manu pour celui-là ! Moi je suis une quiche en matplotlib.

Et sinon on a regardé sur divers téléphones : en fait on peut emprunter des chemins du type 1 vers 8 (comme le déplacement d'un cavalier aux échecs). Mais en prateek c'est pas simple à effectuer. Selon la largeur du doigt on risque de passer par une touche intermédiaire. Typiquement en allant de 1 vers 8 le doigt passe souvent par 5. Du coup ce type de trajet doit être très très rarement utilisé.


Pattern Lock - Combien de combinaisons ?


Allez tiens, un bon post bien geek aujourd'hui. Franchement si vous n'êtes pas fan de combinatoire et de python ne perdez pas trop de temps à lire… En échange je vous mets le clip de Djiin. (*)

Alors un midi comme ça on discutait des schémas de déverrouillage pour smartphones. Ces glyphes qu'on trace du doigt pour dire à notre smartphone que c'est bien nous. On s'est demandé combien de combinaisons ça pouvait bien faire. L’intuition ambiante oscillait entre pas tant que ça et pas bézef.

Posons un peu mieux le problème

On a neuf touches, numérotées de un à neuf. Attends je vérifie... ouais c'est ça, neuf. On fixe la longueur max du code à huit mouvements, j'expleek pourquoi plus loin. La longueur minimum c'est zéro mouvement. Zéro mouvement ça correspond au gros fainéant qui appuie juste sur une touche et fait même pas glisser son doigt. J'ai honte pour lui.


D’abord le cas simple

Le cas le plus facile à calculer c'est quand il n'y a pas de contrainte particulière : on peut aller d'une touche vers n'importe quelle autre touche, on peut repasser plusieurs fois par une même touche. Ben oui c'est simple parce qu’on choisit une touche de départ (neufs possibilités) et de là on peut glisser vers n'importe quelle autre touche. À chaque étape il y a donc huit mouvements possibles. En tout il existe 9 codes de longueur zéro, plus 9 x 8 codes de longueur un, plus 9 x 8 x 8 codes de longueur deux, etc. Jusqu'à la longueur maximale fixée à huit mouvements, j'expleek pourquoi plus loin, je l'ai déjà dit. Je nous fais les multiplication et les sommes gratuitement et ça donne cent soixante-douze million cinq cent soixante-cinq mille six cent quarante combinaisons. De quoi voir venir, surtout si le téléphone se bloque genre trente secondes au bout de cinq essais. Faut près d'un siècle pour tout essayer, et encore, en dormant pas beaucoup.

Maintenant le cas intéressant

En prateek tous les mouvements ne sont pas nécessairement autorisés. On s'est demandé combien il y avait de combinaisons lorsque premièrement on interdit de réutiliser une touche et deuxièmement on n'autorise que les mouvements vers des touches contiguës (**). Voir croquis.


On peut remarquer que sous ces conditions la longueur maximale d'un code est huit mouvements. En effet, au bout de huit mouvements, toutes les touches ont été visitées une fois chacune. Voilà, je l'avais bien dit que j’expleekerai plus loin.

Alors je vous donne direct le résultat. Des codes comme ça il n'y en a que : dix mille trois cent cinq. Soit à peine plus que des PIN codes de carte bancaire à quatre chiffres. C'est peu : en même pas une semaine on peut tout essayer, et encore, en dormant bien. Marrant, à l'intuition j'aurais cru qu'il y avait encore moins de combinaisons que ça. À la louche j’aurais dit quelques centaines pas plus. Je me foutais donc le doigt dans l’œil sur deux ordres de grandeurs. Ça va, j’ai fait pire…

Un bout de python pour calculer ça

Le calcul n'est pas aussi direct que dans le cas simple. C’est même carrément coton. Pas moyen de trouver une formule explicite. Du coup j'ai fait un bout de python pour énumérer tout ça. Je vous le copie-colle ici et j'expleek après.


Version texte à la fin du post (si quelqu'un sait comment utiliser pygmentize dans blogspot, je veux bien un coup de main)

Quelques remarques sur le bout de python

1) Je n'ai pas mis le programme sur github. Ouais, j'aime bien à l'ancienne, copié-collé crade direct dans le post.
2) Je n’ai pas mis non plus de licence particulière. En fait c'est un Metallurgeeciel: tu peux en faire ce que tu veux mais je veux bien qu'on aille se boire une bière.
3) Les variables et les noms de fonctions font tou.t.e.s exactement quatre caractères. Un vieux T.O.C. ça m’a pris en classe de cinquième ça finira bien par passer. Dans le même esprit les commentaires sont tous obsessionnellement alignés au caractère près. Et le score sous pylint est de 10.00/10, comme quoi je respecte la PEP8 au pied de la lettre.
4) Les remarques 1) 2) et 3) n'ont rien à voir avec l'algorithme et le sujet du post. La remarque 4) non plus.
5) La fonction "code(path, many)" lignes 9-15 prend le début d'un code en argument et compte les suites possibles. Pour ça elle s'appelle récursivement autant de fois qu'il y a de mouvements possibles. Le programme connait par cœur les mouvements possibles à partir d'une touche. C'est à ça que sert le dictionnaire "MOVE" lignes 3-7. On est confiant que la récursion terminera car à chaque appel une nouvelle touche est visitée et des touches y en a que neuf (attends je vérifie... ouais c'est ça, neuf)
6) Pour faire moins de calculs, j'utilise le fait qu'il n'y a que trois sortes de codes : ceux qui commencent par un coin (touches 1, 3, 7, 9), ceux qui commencent par un milieu (touches 2, 4, 6, 8) ou ceux qui commencent pile par le centre (touche 5).
7) Du coup, je calcule le nombre de codes possibles en partant du coin 1 et le nombre de codes possibles en partant du milieu 2. Ces nombres là je les multiplie par quatre parce qu'il y a quatre coins et quatre milieux. Reste à ajouter le nombre de codes qui commencent par le centre.
8) On peut aussi calculer tous les chemins sans exploiter les symétries. C’est ce que fait la ligne 18 en commentaire. Truc de ouf, on trouve le même résultat.

Conclusion

Si le téléphone prend ton empreinte digitale et analyse ton ADN pendant que tu traces le code, et ben le nombre de combinaisons on s'en fout un peu.

Le programme à copier-coller

'''Pattern locks on a 9 digits keypad with just vert/horiz/diag moves and no digit reuse.'''

MOVE = {
    '1':'254', '3':'652', '9':'856', '7':'458',                 # Possible moves from corner
    '2':'36541', '6':'98523', '8':'74569', '4':'12587',         # Possible moves from middle
    '5':'12369874'                                              # Possible moves from center
    }

def code(path, many):                                           # Recursively research paths
    '''Count the codes starting with some path.'''
    #print(path)                                                # Un-comment for enumeration
    for move in MOVE[path[-1]]:                                 # Extend path with netx move
        if not move in path:                                    # Bypass already used digits
            many = code(path+move, many+1)                      # Count one path and recurse
    return many                                                 # Return the number of paths

print(code('1', 1)*4+code('2', 1)*4+code('5', 1), __doc__)      # 4 symmetries except center
#print(sum([code(base, 1) for base in MOVE.keys()]), __doc__)   # Alternate counting formula



(*) Djiin avec deux "i" comme dans Giin Tooneek (ta race).
(**) Contiguës ça s'écrit exactement comme Noël, sauf tu mets un C au début comme dans "Christmas".

S.O.S (Sense-Of-Self)


Oulah, long time no see!


J'ai profité d'être cloué au lit avec angine et oreilles qui saignent pour réfléchir dans ma tête. Du coup lecteurs adorés, je vous écris ! L'arrêt maladie ça a du bon, tant que ça ne dure pas trop longtemps.

Pour une fois je ne me suis pas pris la tête avec des mots de passe, ou du vim ou du ROT13. Faut changer d'obsession de temps en temps. Du coup j'ai repris un vieux sujet datant de mes recherches fondamentales (genre). Il s’agit du sens du soi. Sense-Of-Self en anglais, ça fait tout de suite plus classe. D'autant que les initiales c'est "S.O.S" d'où le titre de ce billet. C'est bien ficelé hein ?

Version courte et compliquée


J'ai enfin trouvé un programme python dont l'uneek fonction est de se reconnaître lui-même, et seulement lui-même. Pour la métaphore disons un "système immunitaire". Le voici en action :
$ cat sos.py
D='Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D])';Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D]) 
$ cat sos.py | python3 sos.py 
1 
$ echo "je suis un virus" | sos.py
0
À quoi ça sert ? Ben a rien comme d'hab. Sérieux, après toutes ces années à me lire vous posez encore la question ;)

Version longue et délicatement parsemée d'humour bien relou


Le Sense-Of-Self c'est la propriété qui permet à une entité de se distinguer elle-même de tout le reste. Le monde se divise alors en deux catégories : le soi et le non-soi.

Je suis reparti sur cette piste parce que je pensais notamment à toutes les conneries que fait mon organisme en ce moment : inflammation, système immunitaire survolté, allergies. Autant de réactions justement liées à ce fameux "sens-du-soi". Le stade ultime c'est les réactions auto-immunes où l'organisme s'attaque lui-même parce qu'il se prend pour du non-soi. Truc de ouf.

En terme informateek, le Sense-Of-Self prend une résonnance intéressante. De loin c'est peut-être lié à la question - autrement plus fumeuse - de la conscience des machines. Deux trois gugusses ont d'ailleurs vaguement réfléchi à ça : Alan Turing, John Von Neumann, Marvin Minsky, Andrei Kolmogorov... Plus récemment Raymond Smullyan, David Naccache(*), Adrian Perrig(*), etc. Du coup je me suis dit comme ça : euh, pourquoi pas moi ?

N'étant pas précisément équipé du même appareil cérébral que les personnes susnommées, je me suis contenté d'une version simplifiée du problème. Formalisons :

Existe-t-il un programme SOS qui affiche "1" lorsqu'il est appliqué à lui-même et qui affiche "0" lorsqu'il est appliqué à toute autre entrée ?

Autrement dit, le programme se reconnaît lui-même (1) et fait la différence avec tout le reste (0). On aurait : SOS(SOS)=1 et SOS(other)=0.

De plus, je me suis demandé s'il existe un programme SOS qui ne fait QUE ça. Par exemple il n'en profite pas pour nous afficher en plus de la pub ou pour envoyer nos données personnelles sous forme de cookies à un serveur dans un autre pays. Je recherche un programme en quelque sorte minimal, qui se réduirait à la fonction Sense-Of-Self. Toujours dans l'esprit minimaliste, je voudrais que le programme soit court, voire même le plus court possible tant qu'on y est. Dans l'idée d'isoler l'essence même du sens-de-soi. "Isoler l'essence même du sens-de-soi" ça veut pas dire grand-chose mais j'adore écrire des phrases comme ça.

Les tas de lard
En bon geek, j'ai jeté un œil à l'état de l'art (voir illustration). Autant le reconnaître, il existe déjà beaucoup de choses sur le sujet, notamment sous l'angle des "Quines". Un Quine (une Quine ?) c'est un programme autoreproducteur : il ne fait rien d'autre qu'afficher son propre code, sans aide extérieure. Comme une bestiole qui vomirait son ADN, et seulement son ADN. Pas comme moi au HellFest. On est déjà très proche de ce que je recherche. Moi je veux un programme qui reconnaît son ADN au lieu de l'afficher.

Ouaip, et bien même en ayant déjà écrit des Quines par le passé, il m'a fallu quand même un sacré bout de temps pour trouver un programme Sense-Of-Self opérationnel ! Et j'ai mis plus de temps encore à le raccourcir. Quant à prouver que le résultat est de longueur minimale, ça je n'ai pas encore réussi. On n'aura qu'à dire que c'est à cause des médocs qui m'empêchent de me concentrer à fond.

Ah oui, avant de passer aux choses compliquées, j'ai oublié de préciser un point techneek : la longueur du code s'entend toujours relativement à un langage de programmation donné. Par exemple j'ai choisi Python vu que je sais à peu près faire que ça. Pas question donc de comparer des longueurs de code C / Python / Perl / Bash / Scala, etc.(**) De toute façon c'est le code C qui sera le plus long, tellement c'est pourri le C, beuurrrkkk.

Première tentative


Autant le dire tout de suite, cette première tentative ne fonctionne pas. Elle est là pour montrer précisément le point difficile. L'idée naïve c'est de se dire : le programme va contenir une copie de son ADN, va prendre l'entrée qu'on lui donne, comparer et afficher 0 ou 1 selon que c'est pareil ou pas. Vite fait bien fait comme ça on est direct rentré chez mémé pour aller regarder enquête d'action.

Et ben non parce que ça coince, cf. pseudo-code : If Input == ADN Then 1 Else 0. Avec la chaîne de caractère ADN qui contient une copie du programme. Ce qui donne chose comme ADN = 'If Input == ADN Then 1 Else 0'. Ah ben oui, mais maintenant la chaine 'ADN' contient aussi une copie la chaine 'ADN', c'est malin ! Du coup ça fait : ADN = 'If Input == 'If Input == ADN Then 1 Else 0' Then 1 Else 0'.

Là ça devient le Bronx, pleins de trucs ne vont pas : la nouvelle chaine contient toujours une référence à ADN, on a juste déplacé le problème d'un cran. Et surtout, de manière plus pernicieuse, se pointe une sérieuse galère avec les apostrophes : si j'utilise les mêmes apostrophes pour la première copie de ADN et la pour deuxième (et en fait pour toutes les copies ad-infinitum) on va plus savoir quelles apostrophes débutent quel ADN et quelles apostrophes terminent quel autre ADN. Merdier de ADN : tiens, je baptise ça "Syndrome de Monsanto" ça va me détendre.

Alors on la met où l'apostrophe ?


Dans ton Q ! Non lecteur adoré ce n'est pas un manque de respect. Je veux simplement indiquer qu’il faut encoder l'apostrophe dans une variable, que j’ai nommée Q comme Quote (apostrophe en anglais). Après c'est pas ma faute si en anglais le mot Quote commence par un Q et du coup ça fait un jeu de mot relou.

Foin de digressions, voici enfin la bête, Ta-Daaaaaa : 
D='Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D])';Q=chr(39);print("01"[input()=="D="+Q+D+Q+";"+D])
Ça s'utilise comme ça: 
$ cat sos.py | python3 sos.py
1
$ echo "Je suis un virus" | python3 sos.py
0

Explications


Allez, quelques explications parce que je sens des scepteeks dans le fond de la salle.

Considérons d'abord le cas où le programme se reconnaît effectivement lui-même : $ python3 sos.py < sos.py répond 1. Le code lancé est contenu dans le fichier sos.py et l'entrée est aussi dans sos.py. Le programme s'exécute ainsi :
  • Affecte une chaine de caractères à la variable D, comme ADN.
  • Affecte chr(39) à la variable Q, comme Quote.
  • Affiche le résultat d'une comparaison logeek (==) et ajoute un peu de formatage idomateek python, "01"[...] valant "0" pour False et "1" pour "True"(***).
Il faut probablement un peu de temps pour se rendre compte que le ADN du programme dépend en fait du programme lui-même (et vice-versa). C'est très précisément là que se situe la difficulté, comme avec les Quines. Dès qu'on change un iota quelque part il faut refléter ce changement ailleurs dans le programme. Mais au moins on a résolu le problème d'encodage. En effet le terme Q=chr(39) représente bien l'apostrophe mais sans l'utiliser de manière littérale.

Voyons maintenant le cas où le programme détecte autre chose que lui-même : comme précédemment, le programme reconstruit une version complète de lui-même à l'aide de son ADN et de l'apostrophe encodée (c'est la partie "D="+Q+D+Q+";"+D). Mais là il constate que cette version est différente de l'entrée (comparaison ==) et affiche finalement "0".

Reste à s'occuper de la longueur du programme : 103 symboles. Pour faire plus court, on peut déjà remarquer que les techneeks "classeeks" de code golfing ne marchent pas très bien ici : typiquement, renommer la fonction print en une fonction plus courte (mettons p) devrait être fait deux fois. Une fois dans le ADN une fois dans le programme. Il faudrait alors écrire deux fois "p=print;" ce qui consommerai en tout 16 caractères. Pas bon car au final on n’en regagne que 8 en écrivant (deux fois) p au lieu de print. J'entrevois d'autres pistes en utilisant soit la fonction eval() de python, soit l'embryon de lambda calcul intégré au langage. J’ai fait deux trois tentatives du bout des orteils, pas simple. Si on est moins regardant sur les sorties, et qu'on utilise directement "True" et "False" au lieu de "1" et "0", on tombe à 91 symboles, mais ça triche un peu par rapport à l'énoncé de départ :

D='Q=chr(39);print(input()=="D="+Q+D+Q+";"+D)';Q=chr(39);print(input()=="D="+Q+D+Q+";"+D)


Conclusion 


Il est possible d'écrire un programme court ayant "le sens-du-soi" et ne remplissant que cette fonction.


Pour ceux que les applications intéressent quand même, il n'est pas bien compliqué d'adjoindre une fonction utile au SOS de base. Par exemple pour acheter des t-shirts sur Rock A Gogo. Ce qui donne par exemple:
D='Q=chr(39);print("buy-death-metal-t-shirts");print("01"[input()=="D="+Q+D+Q+";"+D])';Q=chr(39);print("buy-death-metal-t-shirts");print("01"[input()=="D="+Q+D+Q+";"+D])
Notez que si la fonction utile contient beaucoup de symboles on peut stoker son ADN sous forme compressée. Et même, en se contentant de stoker un condensat cryptograpeek (ouais, un hash) on retombe sur une méthode connue de vérification d'intégrité du code. En fait cette méthode-là peut être trouvée plus directement sans se prendre la tête avec toutes ces histoires de sense-of-self.

Pour ceux que les applications n'excitent pas plus que ça, faites juste tourner le concept dans votre tête : il existe une machine dont l'uneek fonction est de se différencier de tout le reste.

Nan, j'déconne.


(*) Merde, parmi les gens cités il y en a qui vivent encore, et je viens de les traiter de gugusses. Alors que j'ai un infini respect pour eux.

(**) On me souffle dans l'oreillette que Kolmogorov et Chaitin avaient déjà expliqué ça genre il y a 50 ans. Désolé les gars, je vulgarise. Par contre si on pouvait arrêter de me souffler dans les oreillettes, j'ai une double otite, merci.

(***) "1" pour True, tous pour un !

Password siouplé !


À un certain moment de ma vie j'ai eu 17 ans. Période relativement bordéleek qui a duré environ un an. Entre autres caractéristeeks intéressantes, il y avait la fréquence des contrôles d'identité.



Papiers siouplé !


Je ne sais pas bien pourquoi, mais à cette période tout le monde cherchait à vérifier mon identité : dans la rue, dans le métro, devant le lycée, une fois même dans un bar où la police avait fait irruption. Ahhh, les contrôles d'identité : difficile exercice à une période où – justement - l'on n'est pas certain  de son identité.

Comme un goût amer


Amusants au début, ces contrôles répétés - au moins deux par semaine avec des pointes jusqu’à trois par jours ! - ont vite pris une tournure agaçante. Un côté mécaneek et débilitant. Chaque contrôle me laissait comme un goût amer, une sensation de vacuité bien particulière et des questionnements infinis
  • Quel danger terrible un zèbre de 17 ans représente-t-il, que chacun veuille absolument s'enquérir de son identité ?
  • Question plus insidieuse encore : si l'on considère "normal" d'être contrôlé deux fois par semaine, si on s'y habitue, sera-t-il normal d'être contrôlé deux fois par jour ? Deux fois par heure ? Par minute ?
  • La fréquence des contrôles a-t-elle la moindre incidence sur la véracité du résultat ?
  • Et puis il y a la question délicate de "qui" contrôle "qui" : puis-je contrôler le contrôleur, Quis custodiet ipsos custodes? https://fr.wikipedia.org/wiki/Quis_custodiet_ipsos_custodes%3F
  • Etc.

Liberté, liberté chérie


Et puis... du temps est passé... mon look s'est assagi et les contrôles se sont espacés. Limite vexant : plus personne ne souhaitait s'enquérir impromptu de mon identité. J'étais redevenu l'anodin anonyme lambda. Il est fort possible alors que vous m'ayez croisé sans même le savoir. Et vice versa.

Enfin donc j'en avais terminé avec ces contrôles d'identité aussi systémateeks qu'absurdes...

Liberté numéreek, liberté numéreek chérie


Dans les années 1990-2000 on a inventé quelque chose de sympa, l'identité numéreek ! Et même LES IDENTITES NUMEREEKS. Truc de ouf : on pouvait-être qui on voulait, ce qu'on voulait, autant qu'on voulait. Et comme on voulait : proche de notre identité réelle (même nom, même adresse, même compte en banque) ou au contraire très éloigné (pseudonyme, bitcoins).

La liberté numéreek quoi. Je m'y suis vautré. Il est fort possible alors que vous m'ayez numériquement croisé sans même numériquement le savoir. Et vice versa.

La liberté numéreek vous dis-je !

Password siouplé !


Et ben non. Parce qu'on a inventé en même temps le contrôle d'identité numéreek. Et même LES CONTRÔLES d’identités numéreeks. Login, password, captcha, question secrète (le nom de jeune fille de mon chien en classe de CP), double authentification, numéro de suivi, code biométreek, sms et emails de confirmation. Avec toutes les identités que j’utilise, je passe mon temps à répondre à des contrôles d'identités numéreeks.

Persuadé de l'utilité de tout ça, je n'y ai pas prêté grande attention. Jusqu'à cette fameuse journée où j'ai décidé de compter combien de fois j'ai eu besoin de prover mon identité numéreek.

34 fois.

Comme un goût numéreek amer


Ce jour-là, j'ai retrouvé le fameux goût amer, la sensation de vacuité. Tout pareil qu'à mes 17 ans. Et les mêmes questionnements. Sur deux points en particulier :
  • Qui contrôle qui ? En version numéreek ça pourrait se dire "qui identifie/authentifie qui ?" avec le corollaire intéressant : suis-je bien au courant (électrique) de toutes les fois où je suis identifié ?
  • Autre point, la fréquence des contrôles : 34 fois par jour est-ce normal ? Pourquoi pas 34 fois par heure ? Ou 34 fois par minute ?
Difficile de se balader anonymement dans la rue numéreek...

Travaux prateeks


Faites donc l'exercice en conscience, comptez systématiquement les demandes de preuve d'identité numéreek, les grandes comme les petites : pin code pour téléphone ou carte bancaire, login/password sur votre email perso, au boulot, sur des services en ligne, y compris les pseudos (typiquement sur Facebook), formulaires à remplir, achats en ligne, automates téléphoneeks à renseigner, clés Wi-Fi et autres, etc. Tiens, même pour commenter ce billet vous devrez éventuellement décliner une identité...

Faites le compte, multipliez le résultat par 10, 100, 1000... demandez-vous jusqu'à combien ça vous semble "normal".

Image du film Brazil, la vision délirante (ou pas) de 1984 par Terry Gilliam.

TOP SECRET

Un petit play-by-mail, comme au bon vieux temps. Ça s’appellera "TOP SECRET"(*) et on peut déjà jouer la démo ici : https://playtopsecret.com/demo.html. Ils demandent aussi du pognon sur KickStarter.

Mon petit doigt parano me dit qu'il vaut mieux utiliser un mail avec un pseudo pour y jouer. Mais bon, c'est juste mon petit doigt, faut pas l'écouter. D'ailleurs je vais le remettre dans ma narine.

Merci à Antoine pour l'info(**)



(*) TOP SECRET c'est aussi un film particulièrement burlesque avec Val Kilmer (jeune).
(**) Antoine, désolé, j'ai mis ton prénom sur mon blog. Du coup "ils" vont pouvoir faire un lien entre toi et moi, merde ! Mets vite tous tes disques durs au micro ondes (thermostat 8) et part vivre en Franche-Comté (avec Bilbon, Frodon, Gandalf) sans téléphone mobile et sans électricité.