Archives par mot-clé : Sécurité

Logo OpenSSL

OpenSSL et i2d_PublicKey

Publié dans C / C++ | Laisser un commentaire

Dans OpenSSL, il y a des pièges ! Petit exemple avec i2d_PrivateKey et i2d_PublicKey :

i2d_PrivateKey(EVP_PKEY *, uchar **), comme escompté, prend en paramètre une paire de clé source EVP_PKEY et un tableau d’octet en destination. La clé privé est extraite de la paire de clé et envoyé au format DER / ASN 1 dans le tableau d’octet.

i2d_PublicKey(EVP_PKEY *, uchar **) a la même signature, une paire de clé source EVP_PKEY et un tableau d’octet en destination. La clé publique est extraite de la paire de clé, mais cette fois-ci elle est envoyé sous forme d’un EC point dans le tableau d’octet ! Piège !

L’équivalent de i2d_PublicKey(EVP_PKEY *, uchar **) est en réalité i2d_PUBKEY(EVP_PKEY *, uchar **) ! Et c’est la même chose pour d2i_PublicKey/PUBKEY. Comme quoi… « rien n’est jamais facile » !

Cygwin, SSH Agent et un peu de Git

Publié dans Geekeries | Laisser un commentaire

Cet article est une traduction (assez libre et agrémentée) de SSH Agent on Cygwin via kill the radio. Une autre resource pas mal sur le même sujet est disponible sur : Problem with ssh-add / ssh-agent under cygwin.

Il existe sûrement des dizaines de tutoriels sur l’art et la manière de démarrer un SSH Agent sur Cygwin, mais voilà qui peut toujours service !
Si jamais l’erreur suivante apparaît lorsque vous utiliser la commande ssh-add :

Could not open a connection to your authentication agent.

Cela signifie que vous n’avez pas de gestionnaire de clés SSH de démarré. Visiblement, il ne sert à rien de lancer le Pageant de Putty, il va donc falloir gérer tout ça directement dans Cygwin.
Continuer la lecture

La sécurisation des mots de passe et les poissons volants

Publié dans Geekeries | Un commentaire

Dans l’épisode précédent "La sécurisation des mots de passe, c’est salée", j’avais expliqué l’intérêt du sel pour protéger les mots de passe de ses utilisateurs. On va voir désormais que cela n’est toujours pas suffisant, et que seul les poissons volants (blowfish) pourront nous sauver la mise !

Ajouté en 2017 : Bien que tout ce qui est expliqué ci-dessous dans cet article reste valable, depuis l’avénement de PHP 5.5, il est préférable d’utiliser la fonction password-hash pour hasher ses mots de passe en PHP. Cette fonction permet de gérer le sel, l’évolution de la complexité, et sera même capable d’utiliser d’autres algorithmes que bcrypt à l’avenir si le besoin s’en fait ressentir.
Bonne lecture !

Saler et hacher ne suffit pas

A la lecture de deux très bons articles sur le sujet : How to safely store a password (en), Exemple de stockage de mot de passe en Java : hashage et salage, est-ce suffisant ? ; on se rend compte que saler et hacher ne suffit pas !
Continuer la lecture

La sécurisation des mots de passe, c’est salée !

Publié dans Geekeries | 8 commentaires

Dans un précédent billet (Comment sécuriser les mots de passe de mes utilisateurs), j’expliquais quelques bases pour bien comprendre comment stocker convenablement le mot de passe de ses utilisateurs. Comme on l’a vu, il suffit d’enregistrer la valeur hachée du mot de passe (avec une bonne méthode de hashage comme SHA-1 ou SHA-2), pour éviter les conséquences désagréables sur la sécurité d’un vol de base de données !
Aujourd’hui, nous allons aller encore plus loin en tentant de contre-carré les attaques par dictionnaire ou pire par rainbow tables ! Pour cela, on aura besoin d’une bonne technique de salage (oui, avec du sel !), voire de poissons volants (blowfish >) !
Continuer la lecture

Le paradoxe des anniversaires

Publié dans Geekeries | 2 commentaires

Connaissez-vous le paradoxe des anniversaires ? Voici deux petites questions qui l’illustrent.

Combien de personnes (n) faut-il réunir dans une pièce afin qu’il y ait au moins 50% de chances que quelqu’un ait la même date d’anniversaire que moi ?

Réponse : 0.5 = 1 – (364/365)n, soit n = 253 personnes.
Donc, à partir de 253 personnes, il y a plus d’une chance sur deux que quelqu’un ait la même date d’anniversaire que moi.

Combien de personnes (n) faut-il réunir dans une pièce afin qu’il y ait au moins 50% de chances qu’au moins deux personnes quelconques aient la même date d’anniversaire ?

Réponse : 0.5 = 1 – (365/365)(364/365)…((365-n+1)/365), soit n = 23.
Donc, à partir de 23 personnes, seulement 23 personnes, il y a plus d’une chance sur deux que deux personnes aient la même date d’anniversaire. C’est le « paradoxe des anniversaires ».

Et cette propriété a de grosses implications sur la sécurité des systèmes informatiques, notamment au niveau des mots de passe et des fonctions de hashage.

Droïd sonde

Anecdote n°2 : pari sur décodage

Publié dans L'anecdote du week-end | Laisser un commentaire

Pour l’envoi d’une sonde vers Saturne, la NASA a décidé d’ajouter aux données collectéesDroïd sonde des codes détecteurs et correcteurs de manière à éviter de perdre des informations à cause d’incidents durant l’aller-retour de leur sonde. C’est l’algorithme de Viterbi qui est alors utilisé ! Problème : la NASA sait comment coder avec cet algorithme, mais elle n’a pas la puissance de calcul pour décoder les données… Qu’à cela ne tienne ! La sonde décolle et encodera les données, la NASA fait le pari qu’au retour de la sonde, la puissance de calcul aura suffisamment augmentées et des optimisations dans le décodage auront été trouvées, pour permettre le décodage sur Terre en un temps raisonnable. Et en effet, 3 ans plus tard, la sonde revient sur terre… et la NASA est capable de décoder le code convolutif de Viterbi ! Continuer la lecture

Anecdote n°1 : le NSA ne veut pas de Zero-Knowledge Proof of identity

Publié dans L'anecdote du week-end | Laisser un commentaire

En 1987, lorsque Amos Fiat et Adi Shamir, tous deux non-américains et travaillant en dehors des Etats-Unis, ont voulu publier leur article How to Prove Yourself: Pratical Solutions to Identification and Signature Problems, initiant la notion de Zero-Knowledge Proof of Identity, le NSA (l’agence de sécurité nationale des Etats-Unis notamment chargée de la collecte et de l’analyse de toutes les formes de communications) a cherché à les empêcher de publier leurs recherches ! Continuer la lecture

Comment sécuriser les mots de passe de mes utilisateurs ? Le Hashage !

Publié dans Geekeries | 5 commentaires

Aujourd’hui j’ai eu un cours qui m’a permis de comprendre ce que je n’avais jamais compris. Lorsque j’ai appris le PHP, on m’a dit : « il faut chiffrer les mots de passe de tes utilisateurs quand tu les enregistres dans une base de données ! ». Moi, docile, j’ai obéis ! (quoi, on me glisse dans l’oreillette que cela n’a rien à voir avec le chiffrement mais plutôt avec le hachtakage hashage ? Oui bon, on y vient !)
Cela paraît logique :

  • lors de son inscription, l’utilisateur me fournit un mot de passe en clair (appelons-le Mclair),
  • je le chiffre (il devient Mchiffré) et l’enregistre dans ma base de données,
  • lorsque cet utilisateur veut se connecter, il me fournit un mot de passe en clair (appelons-le Tclair), je le chiffre (appelons-le Tchiffré) et teste s’il correspond au mot de passe chiffré de ma base de données (Tchiffré == Mchiffré ?)

Avec ce système, si quelqu’un accède à ma base de données, il ne lui servira à rien de lire les mots de passe de mes utilisateurs puisqu’ils sont sécurisés, il ne pourra donc pas se faire passer pour un de mes utilisateurs. C’est déjà suffisamment embêtant que quelqu’un ait réussi à s’introduire dans ma base de données !

Ce que je n’avais bien capté, c’est ce qui signifie chiffré un message et pourquoi on m’avait encouragé à utilisé la fonction de chiffrage « Md5 » alors que je lisais par ailleurs qu’il valait mieux utiliser « Sha-1 ». Aujourd’hui, je suis un homme nouveau qui voit le monde autrement et qui se couchera accessoirement légèrement moins bête ce soir.
Continuer la lecture