tag:linuxfr.org,2005:/users/spack
LinuxFr.org : les contenus de Spack
2020-06-05T01:35:40+02:00
/favicon.png
tag:linuxfr.org,2005:Diary/39111
2020-04-27T10:28:18+02:00
2020-04-27T10:28:18+02:00
Lenovo đź’– Fedora
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Des grands fournisseurs que je connais, il y avait déjà Dell qui vends ses <a href="https://www.dell.com/fr-fr/work/shop/laptops-2-in-1s/sr/laptops/xps-laptops/ubuntu?appliedRefinements=10673">XPS pour les professionnels</a> avec de vrais morceau de <a href="https://ubuntu.com/">Ubuntu</a> dedans et HP via son <a href="https://store.hp.com/franceStore/Merch/Offer.aspx?p=b-configurateur-workstations">configurateur</a> qui permet de configurer une machine sans OS ou presque avec <a href="https://www.freedos.org/">FreeDOS</a>.</p>
<p>C'est maintenant au tour de Lenovo d'<a href="https://fedoramagazine.org/coming-soon-fedora-on-lenovo-laptops/">annoncer</a> qu'ils vont bientôt fournir des machines avec <a href="https://getfedora.org/">Fedora</a> pré-installé à commencer par leur gamme ThinkPad P1 Gen2, ThinkPad P53, et ThinkPad X1 Gen8.</p>
<p>L'histoire ne dit pas les motivations de l'opération mais Lenovo semble très enthousiaste et travaille avec Red Hat pour fournir une expérience utilisateur la plus propre possible avec les pilotes et les micrologiciels qu'ils faut en contribuant par exemple à la plateforme <a href="https://fwupd.org/">Linux Vendor Firmware Service</a>.</p>
<p>Étant donné la politique de Fedora "<a href="https://fedoraproject.org/wiki/Staying_close_to_upstream_projects"><em>Upstream First</em></a>", gageons que cela sera aussi bénéfique aux autres distributions Linux.</p>
<div><a href="https://linuxfr.org/users/spack/journaux/lenovo-fedora.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/120200/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/lenovo-fedora#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/120200/comments.atom
tag:linuxfr.org,2005:Diary/39098
2020-04-23T16:12:45+02:00
2020-04-23T16:12:45+02:00
Python 2.7.18, le dernier samouraĂŻ
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Ça y est, <a href="https://pythonclock.org/">l'horloge</a> a cessée de tourner et Python 2.7 n'est plus, en tout cas pour les mainteneurs officiels que sont les membres de la Python Software Foundation, et la toute dernière version de cette relique de l'histoire a été publiée ce <a href="https://mail.python.org/archives/list/python-dev@python.org/thread/OFCIETIXLX34X7FVK5B5WPZH22HXV342/">20 avril 2020</a>.</p>
<p>Alors oui, certains <a href="https://github.com/naftaliharris/tauthon">irréductibles</a> tentent bien de faire perdurer sa mémoire parce que Unicode, <code>str</code> ou <code>print</code> c'était mieux avant.</p>
<p>Bon alors, qu'y a-t-il de nouveau dans cette toute dernière version ? Eh bien, on ne sait pas ! En effet, il n'y a pas de notes de version associée à cette sortie. </p>
<p>De toute façon, il est déjà grand temps de passer à <a href="https://learnpythonthehardway.org/book/nopython3.html">Py</a><a href="https://changelog.complete.org/archives/10053-the-incredible-disaster-of-python-3">thon</a> <a href="https://changelog.complete.org/archives/10063-the-fundamental-problem-in-python-3">3</a>.</p>
<div><a href="https://linuxfr.org/users/spack/journaux/python-2-7-18-le-dernier-samourai.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/120148/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/python-2-7-18-le-dernier-samourai#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/120148/comments.atom
tag:linuxfr.org,2005:Diary/38170
2018-10-23T01:22:54+02:00
2018-10-23T01:22:54+02:00
SSPL: All your service are belong to us
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<h3 id="toc-gpl">GPL</h3>
<p>Je pense que l'on connait tous ici la licence <a href="https://www.gnu.org/licenses/gpl-3.0.en.html">GPL</a> qui protège les droits du code source du noyau Linux ainsi que de nombreux autres logiciels libres.</p>
<p>La licence impose à tous les ouvrages protégés par celle-ci de distribuer aux utilisateurs le code source à l'origine du produit fini. La licence est aussi dite virale du fait que tout ouvrage basé sur une modification d'un autre distribué sous licence GPL doit aussi être distribué sous les termes de la licence GPL.</p>
<p>Dit autrement, les possesseurs d'une copie d'un logiciel distribué sous GPL peuvent accéder aux médiums ayant conduit à la construction du dit logiciel mais aussi que toutes modifications d'un logiciel distribué sous GPL doit aussi être redistribué sous licence GPL à ses possesseurs. De ce fait il est assuré que le savoir est partagé.</p>
<p>Oui, mais qu'est-ce que la distribution ? Le terme est ainsi définit par la licence GPL :</p>
<blockquote>
<p>To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.</p>
</blockquote>
<p>Si on veut traduire cela pourrait donner :</p>
<blockquote>
<p>« Distribuer » un ouvrage signifie toute diffusion permettant d'autres parties de faire ou recevoir des copies. Une simple interaction à travers un réseau informatique, sans transfert d'une copie, n'est pas une distribution.</p>
</blockquote>
<p>Ah ah ! Je peux donc modifier un logiciel distribué sous GPL, en faire un service réseau et mes utilisateurs interagissant avec ce dernier uniquement par le réseau, nul besoin de transmettre mes modifications.</p>
<h3 id="toc-agpl">AGPL</h3>
<p>C'est ici qu'arrive la licence <a href="https://www.gnu.org/licenses/agpl.html">AGPL</a>. Elle vient mettre un peu d'ordre dans tout cela :</p>
<blockquote>
<p>If you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version.</p>
<p>Si vous modifiez le Programme, il est important que votre version modifiée offre aux utilisateur interagissant avec celle-ci à distance à travers un réseau informatique (si votre version supporte une telle interaction) l'opportunité de recevoir la Source Correspondant à votre version.</p>
</blockquote>
<p>You lose, game over. La modification d'un logiciel distribué sous licence AGPL doit aussi est redistribuée sous cette même licence et ce même dans le cas d'une simple interaction par le réseau.</p>
<h3 id="toc-mongodb">MongoDB</h3>
<p>C'est d'ailleurs sous cette <a href="https://www.mongodb.com/blog/post/the-agpl">licence</a> qu'<a href="https://github.com/mongodb/mongo/commit/5851c894963cb2d675f2c0628e2dc782e23e65a9">était</a> distribué MongoDB. Afin que toutes les modifications apportées au projet soient redistribuées à la communauté.</p>
<p>Mais il y a toujours des petits malins à tester les limites. Et puisqu'ils ne veulent pas donner le code source, pourquoi pas le service tout entier ?</p>
<h3 id="toc-sspl">SSPL</h3>
<p><a href="https://www.mongodb.com/">MongoDB Inc.</a> <a href="https://www.mongodb.com/press/mongodb-issues-new-server-side-public-license-for-mongodb-community-server">annonce</a> donc la <a href="https://www.mongodb.com/licensing/server-side-public-license">Server Side Public License</a>. Celle-ci à pour base la license AGPL mais requiert cette fois-ci que toute l'infrastructure permettant de faire tourner un service utilisant MongoDB (ou tout autre logiciel sous cette licence), soit redistribué sous licence SSPL :</p>
<blockquote>
<p>“Service Source Code” means the Corresponding Source for the Program or the modified version, and the Corresponding Source for all programs that you use to make the Program or modified version available as a service, including, without limitation, management software, user interfaces, application program interfaces, automation software, monitoring software, backup software, storage software and hosting software, all such that a user could run an instance of the service using the Service Source Code you make available.</p>
<p>« Code Source du Service » signifie, la Source Correspondant au Programme ou sa version modifiée, et la Source Correspondant à tous les programmes que vous utilisez afin de rendre le Programme ou sa version modifiée disponible en tant que service, incluant, mais non limités, logiciels de gestions, interfaces utilisateurs, interface de programmation, logiciels d'automatisation, logiciels de surveillance, logiciels de sauvegarde, logiciels de stockage, logiciels d'hébergement, tout ce qui permettra à l'utilisateur d’opérer une instance du service en usant du Code Source du Service que vous mettez à disposition.</p>
</blockquote>
<p>Mais cela ne s'arrête pas là , la redistribution de tout ces éléments doit être faite sous licence SSPL ! Cela ne sera pas sans causer quelques soucis de droit d'auteur étant donné qu'il ne sera pas permis de distribuer sous une autre licence tous les logiciels utilisés pour fournir un service.</p>
<p>En tout cas, cela semble être une belle tentative de la part de MongoDB à faire basculer une bonne partie des utilisateurs vers la version payante du logiciel. Ou peut-être, vers un autre choix de logiciel ?</p>
<div><a href="https://linuxfr.org/users/spack/journaux/sspl-all-your-service-are-belong-to-us.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/115531/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/sspl-all-your-service-are-belong-to-us#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/115531/comments.atom
tag:linuxfr.org,2005:Diary/38148
2018-10-07T20:31:03+02:00
2018-10-07T20:41:37+02:00
Programmez vos cellules
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Vous souhaiteriez raviver vos cheveux grisonnant ou encore retirer ce grain de beauté disgracieux ? Pourquoi ne pas programmer vos cellules ?</p>
<p>Bon d’accord il ne s’agit pas encore de programmer les cellules mais plutôt de <a href="http://molecular-programming.org/">programmation moléculaire</a>. Cependant l’idée de programmer les bio-organismes est à la fois intéressante et effrayante.</p>
<p><a href="https://arxiv.org/abs/1809.07430">CRN++</a>, publié sur <a href="https://github.com/marko-vasic/crnPlusPlus">Github</a> sous licence Apache, est un langage haut niveau de <a href="https://techxplore.com/news/2018-10-molecular-language-crn.html">programmation moléculaire</a>.</p>
<p>Développé en <a href="http://www.wolfram.com/language/fast-introduction-for-programmers/fr/">Wolfram</a> (moi non plus je ne sais pas ce que c’est), il s’agit en fait d’un langage permettant d’abstraire les réactions chimiques. L’idée étant de créer des molécules programmables et de définir les règles d’interaction avec les autres molécules et cela à l'aide d’un langage plus intuitif et expressif que les notations existante afin d’accélérer les recherches.</p>
<p>Bon je ne suis pas un expert du domaine mais cela semble être la première brique du moment où l’on se branchera au port USB de notre PC afin de nous reprogrammer.</p>
<div><a href="https://linuxfr.org/users/spack/journaux/programmez-vos-cellules.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/115441/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/programmez-vos-cellules#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/115441/comments.atom
tag:linuxfr.org,2005:Diary/38048
2018-07-26T14:35:32+02:00
2018-07-26T14:35:32+02:00
Ready At Dawn passe Ă Rust
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>La société de développement <a href="http://www.readyatdawn.com/">Ready At Dawn</a> éditrice des jeux Daxter, God of War ou encore Ōkami, a <a href="https://twitter.com/AndreaPessino/status/1021532074153394176">décidé</a> de passer tout ses futures projets au langage <a href="https://www.rust-lang.org/">Rust</a> parce que C/C++ <3 Rust.</p>
<blockquote>
<p>It's finally happening - after >30 years of pro use, 20 of which quite reluctantly, I am officially DONE with C/C++. Only maintenance from now on, everything new will be in @rustlang. THANKS Rust team for refining modern concepts into such a practical, elegant system. I love it.</p>
<p>Cela arrive enfin - après plus de 30 ans d'usage professionnel, dont 20 clairement de façon réticente, j'en ai FINI avec C/C++. Seule la maintenance sera assurée à partir de maintenant, tout ce qui est nouveau sera en <a href="https://twitter.com/rustlang">Rust</a>. MERCI à l'équipe Rust d'avoir affiné des concepts modernes dans un système si pratique et élégant. Je l'adore.</p>
</blockquote>
<p>L'annonce suscite en tout cas de l’intérêt. Affaire à suivre.</p>
<div><a href="https://linuxfr.org/users/spack/journaux/ready-at-dawn-passe-a-rust.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/114977/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/ready-at-dawn-passe-a-rust#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/114977/comments.atom
tag:linuxfr.org,2005:Diary/37141
2017-02-20T15:36:41+01:00
2017-02-20T15:36:41+01:00
De LiMux Ă Mundows
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>La ville de Munich à décider de <a href="http://www.techrepublic.com/article/linux-champion-munich-takes-decisive-step-towards-returning-to-windows/">lâcher Linux pour retourner vers Windows</a> et ce d'ici 2021.</p>
<p>La raison invoquée est un soucis de compatibilité avec les logiciels (Microsoft) du monde extérieur.</p>
<p>#JournalBookmark</p><div><a href="https://linuxfr.org/users/spack/journaux/de-limux-a-mundows.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/111293/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/de-limux-a-mundows#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/111293/comments.atom
tag:linuxfr.org,2005:Diary/36751
2016-07-29T16:13:07+02:00
2016-07-30T12:29:55+02:00
Ils ont cassé Internet
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Le créateur de Gmane, Lars Magne, a <a href="https://lars.ingebrigtsen.no/2016/07/28/the-end-of-gmane/">annoncé</a> hier l'arrêt du service. <a href="https://fr.wikipedia.org/wiki/Gmane">Gmane</a> est un service d'archivage des listes de distribution qu'il maintient depuis près de 14 ans.</p>
<p>La goutte ayant fait déborder le vase étant la recrudescence des attaques par déni de service. Gmane étant hébergé par l'employeur de Lars, le réseau de ce dernier est lui aussi impacté et ça fait désordre.</p>
<p>Lars a donc décidé de couper l'accès au service Web, les services d'archivage eux sont toujours actifs histoire de ne pas tout péter. Mais Lars ne s'amuse plus et veux bien passer le <a href="https://lars.ingebrigtsen.no/2016/07/28/the-end-of-gmane/comment-page-1/#comment-13502">relais à qui veut</a>.</p>
<p>En tout cas pour moi l'impact est visible, mes recherches se terminent maintenant souvent par une erreur 404. :(</p><div><a href="https://linuxfr.org/users/spack/journaux/ils-ont-casse-internet.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/109667/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/ils-ont-casse-internet#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/109667/comments.atom
tag:linuxfr.org,2005:Diary/36306
2016-01-14T18:07:51+01:00
2016-01-14T18:07:51+01:00
OpenSSH, UseRoaming no
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Theo de Raadt vient de <a href="http://marc.info/?l=openbsd-misc&m=145278077920530&w=2">poster un message</a> assez alarmant sur la liste de distribution <a href="https://marc.info/?l=openbsd-tech">openbsd-tech</a>.</p>
<p>D'après les <a href="http://www.undeadly.org/cgi?action=article&sid=20160114142733">informations glanées</a> ça et là , une faille dans une fonctionnalité non documentée du client OpenSSH permettrait une fuite de donnée importante de la mémoire du client. Par exemple la clé privée utilisée.</p>
<p>Le bug provient d'une fonctionnalité non documenté et active par défaut qui permet au client de relancer à nouveau une connexion SSH en cas de coupure. Pour fonctionner, cette fonctionnalité, doit être disponible sur le serveur or celle-ci n'a jamais été implémentée (ou du moins activée) côté serveur. Afin d'exploiter la faille il faut donc se connecter sur un serveur malicieux ou qui a été compromis.</p>
<p>En attendant la distribution des correctifs, la meilleure chose Ă faire est d'ajouter la ligne suivante dans le fichier <code>ssh_config</code>:</p>
<pre><code class="conf"><span class="w"> </span>UseRoaming<span class="w"> </span>no<span class="w"></span></code></pre>
<p>Affaire à suivre.</p><div><a href="https://linuxfr.org/users/spack/journaux/openssh-useroaming-no.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/107865/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/openssh-useroaming-no#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/107865/comments.atom
tag:linuxfr.org,2005:Diary/36011
2015-07-28T01:12:56+02:00
2015-07-28T06:55:47+02:00
Stagefright, une faille Android qui va faire mal ?
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>C'est marrant de voir comment toute faille découverte doit avoir son petit nom maintenant. C'est à celui qui aura <s>la plus grosse</s> le plus de succès.</p>
<p>Il n'empêche que celle-ci à l'air pas mal. La société <a href="https://www.zimperium.com/">Zimperium</a> a annoncée sur son <a href="http://blog.zimperium.com/experts-found-a-unicorn-in-the-heart-of-android/">blog</a> la découverte d'une faille qui toucherait 95% des mobiles Android. Celle-ci permettrait d'exécuter du code à distance uniquement avec un numéro de téléphone, le votre, et un <a href="http://blog.zimperium.com/wp-content/uploads/2015/07/Cat1.png">MMS</a>.</p>
<p>La faille se situerait dans la bibliothèque de lecture des fichiers <a href="http://source.android.com/devices/media.html">multimédias</a> d'Android. Étant donné que par défaut le MMS s'affiche dès la réception dans une notification, cela suffirait à lancer l'attaque.</p>
<p>Un patch corrigeant cette faille a d’ors et déjà été transmis à Google qui l'a appliqué mais mettre à jour pas moins 950 millions de mobiles (entres autres) ne sera pas une mince à faire et dépendra de la bonne volonté des constructeurs.</p>
<p>À savoir que Firefox serait aussi impacté pour les versions inférieures à la version 38.</p>
<p>Tout cela reste encore au conditionnel car l'histoire ne dévoile pas encore toute son intrigue. L'annonce complète se fera la semaine prochaine au <a href="https://www.blackhat.com/us-15/schedule/briefings-5.html">Blackhat USA 2015</a> et au <a href="https://www.defcon.org/html/defcon-23/dc-23-schedule.html">DEF CON 23</a>.</p>
<p>En attendant voilà une belle publicité pour cette société spécialisée dans la sécurité des équipements mobiles dont le blog à même du mal à supporter la charge actuelle.</p><div><a href="https://linuxfr.org/users/spack/journaux/stagefright-une-faille-android-qui-va-faire-mal.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/106388/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/stagefright-une-faille-android-qui-va-faire-mal#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/106388/comments.atom
tag:linuxfr.org,2005:Diary/36007
2015-07-26T13:04:27+02:00
2015-07-26T13:04:27+02:00
GnuPG et authentification SSH
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Vous avez maintenant votre <a href="//linuxfr.org/users/spack/journaux/openpgp-enlarge-your-privacy">clé PGP</a> et la traînez un peu partout avec vous. Il s'agirait maintenant de mettre cette clé unique à profit. Et quoi de mieux que de commencer avec l'authentification SSH ?</p>
<p>Ça tombe bien, l'agent GnuPG peut aussi agir comme <a href="https://en.wikipedia.org/wiki/Ssh-agent">agent SSH</a> et ainsi servir d'intermédiaire entre SSH et votre clé PGP stockée sur votre clé physique.</p>
<p>On va d'abord commencer par changer un peu la configuration de GnuPG afin d'afficher l'usage réservé aux clés. Ça permettra de retrouver facilement la clé d'authentification. Il suffit d'ajouter la ligne suivante dans le fichier <code>~/.gnupg/gpg.conf</code> :</p>
<pre><code class="conf">list-options<span class="w"> </span>show-usage<span class="w"></span></code></pre>
<p>Voilà maintenant la commande <code>gpg2 -k</code> listera les clés ainsi que leur usage. <code>S</code> pour signature, <code>E</code> pour chiffrement et <code>A</code> pour authentification. C'est cette dernière qui nous intéresse.</p>
<p>La prochaine étape est d'indiquer à GnuPG qu'il pourra utiliser notre clé d'authentification pour SSH. Pour cela on rajoute la poignée de la clé (<em>keygrip</em>) dans le fichier <code>~/.gnupg/sshcontrol</code>.</p>
<pre><code class="console"><span class="gp">$</span> gpg2 -k --with-keygrip
<span class="go">/home/jdoe/.gnupg/pubring.gpg</span>
<span class="go">------------------------------</span>
<span class="go">pub rsa4096/AABBCCDD 2015-XX-XX [SC] [expire : 2018-XX-XX]</span>
<span class="go"> Empreinte de la clef = AABB CCEE XXXX XXXX XXXX XXXX XXXX XXXX XXXX FFGG</span>
<span class="go"> Keygrip = AABBCCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDD</span>
<span class="go">uid [ultimate] John Doe <john.doe@example.com></span>
<span class="go">uid [ultimate] [jpeg image of size 47XX]</span>
<span class="go">sub rsa2048/BBCCDDEE 2015-XX-XX [S] [expire : 2016-XX-XX]</span>
<span class="go"> Keygrip = BBCCDDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEE</span>
<span class="go">sub rsa2048/CCDDEEFF 2015-XX-XX [E] [expire : 2016-XX-XX]</span>
<span class="go"> Keygrip = CCDDEEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFF</span>
<span class="go">sub rsa2048/DDEEFFGG 2015-XX-XX [A] [expire : 2016-XX-XX]</span>
<span class="go"> Keygrip = DDEEFFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXGG</span></code></pre>
<p>On repère la clé d'authentification <code>DDEEFFGG</code> avec la poignée associée que la va rajouter au fichier <code>~/.gnupg/sshcontrol</code>.</p>
<pre><code class="console"><span class="gp">$</span> <span class="nb">echo</span> <span class="s2">"DDEEFFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXGG 0"</span> >> ~/.gnupg/sshcontrol</code></pre>
<p>Le chiffre après la poignée est la durée en seconde que l'agent pourra garder la clé en mémoire. Si <code>0</code> la valeur par défaut est utilisée qui est de 30 minutes.</p>
<p>Il faut maintenant activer le support SSH dans l'agent GnuPG. Pour cela, on édite le fichier <code>~/.gnupg/gpg-agent.conf</code> et on y insère les lignes suivantes :</p>
<pre><code class="conf">enable-ssh-support<span class="w"></span>
pinentry-program<span class="w"> </span>/usr/bin/pinentry-gtk<span class="w"></span>
<span class="c">#allow-emacs-pinentry</span><span class="w"></span></code></pre>
<p>Pour ceux qui utilisent Emacs, la dernière ligne peut être utile. L'interface <code>pinentry</code> est aussi disponible en Qt ou curses. Consultez votre gestionnaire de paquets pour installer l'interface qui vous convient.</p>
<p>Si vous utilisez systemd et une unité utilisateur, il faudra relancer l'agent afin de prendre en compte la nouvelle configuration.</p>
<pre><code class="console"><span class="gp">$</span> systemctl --user restart gpg-agent.service</code></pre>
<p>La dernière étape est de <a href="https://www.gnupg.org/documentation/manuals/gnupg/Agent-Examples.html#Agent-Examples">configurer votre environnent</a> afin de permettre à SSH de trouver l'agent GnuPG. Il suffit d'exporter les bonnes variable d'environnement dans le script d'initialisation de votre shell.</p>
<pre><code class="sh"><span class="nb">export </span><span class="nv">GPG_TTY</span><span class="o">=</span><span class="k">$(</span>tty<span class="k">)</span>
<span class="nb">unset </span>SSH_AGENT_PID
<span class="k">if</span> <span class="o">[</span> <span class="s2">"${gnupg_SSH_AUTH_SOCK_by:-0}"</span> -ne <span class="nv">$$</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
<span class="nb">export </span><span class="nv">SSH_AUTH_SOCK</span><span class="o">=</span><span class="s2">"${HOME}/.gnupg/S.gpg-agent.ssh"</span>
<span class="k">fi</span></code></pre>
<p>J'ai aussi eu un petit <a href="https://www.gnupg.org/documentation/manuals/gnupg/Common-Problems.html">soucis</a> avec SSH ne sachant pas sur quelle affichage demander le code PIN. Il faut donc aussi lors de l'initialisation du shell indiquer l'affichage à utiliser. La ligne suivante devrait faire l'affaire :</p>
<pre><code class="sh"><span class="nb">echo</span> <span class="s2">"UPDATESTARTUPTTY"</span> <span class="p">|</span> gpg-connect-agent > /dev/null 2<span class="p">&</span>>1</code></pre>
<p>Voilà , tout est prêt sauf un petit détails. Où trouver la clé publique au format reconnu par OpenSSH ? <code>ssh-add -L</code> est ton ami. L'empreinte de la clé sera indiquée avec le label <code>cardno:_#SERIE_</code>. Il suffit ensuite d'ajouter cette empreinte au fichier <code>~/.ssh/authorized_keys</code> sur le serveur distant comme à l'accoutumé.</p>
<p>Vous pouvez maintenant profiter de l'authentification SSH par clé publique avec votre clé PGP.</p><div><a href="https://linuxfr.org/users/spack/journaux/gnupg-et-authentification-ssh.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/106375/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/gnupg-et-authentification-ssh#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/106375/comments.atom
tag:linuxfr.org,2005:Diary/35953
2015-06-21T03:45:52+02:00
2015-06-23T09:40:44+02:00
OpenPGP, enlarge your privacy
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#usage">Usage</a></li>
<li><a href="#support">Support</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#configuration-de-gnupg">Configuration de GnuPG</a></li>
<li>
<a href="#pr%C3%A9paration-de-la-yubikey">Préparation de la Yubikey</a><ul>
<li><a href="#configuration-du-mode-otp">Configuration du mode OTP</a></li>
</ul>
</li>
<li>
<a href="#pr%C3%A9parer-la-carte">Préparer la carte</a><ul>
<li><a href="#codes-pin">Codes PIN</a></li>
<li><a href="#identification">Identification</a></li>
</ul>
</li>
<li>
<a href="#g%C3%A9n%C3%A9ration-des-cl%C3%A9s-gpg">Génération des clés GPG</a><ul>
<li><a href="#cl%C3%A9-primaire">Clé primaire</a></li>
<li><a href="#sous-cl%C3%A9s">Sous-clés</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ul><p>Il y a quelques mois, <a href="//linuxfr.org/users/gouttegd">gouttegd</a> nous faisait un cours magistral sur l'usage d'<a href="//linuxfr.org/news/openpgp-card-une-application-cryptographique-pour-carte-a-puce">OpenPGP sur les cartes à puce</a> et récidivait sur le sujet de la <a href="//linuxfr.org/users/gouttegd/journaux/de-la-gestion-des-clefs-openpgp">gestion des clés</a>.</p>
<p>Ce comportement <em>inadmissible</em> mérite que l'on s'y intéresse de plus près. J'ai donc décidé de me lancer dans l'aventure et de générer moi aussi ma clé <a href="https://fr.wikipedia.org/wiki/Pretty_Good_Privacy">PGP</a>. J'espère donc ici apporter un complément aux excellents articles pondus par <em>gouttegd</em> en expliquant comment j'ai posé les premières pierres de mon <em>Web of Trust</em>.</p>
<h2 id="usage">Usage</h2>
<p>Bon d'ailleurs, pourquoi faire une clé PGP ? Ben, il parait que l'on peut <a href="https://xkcd.com/1181/">signer des emails</a> avec. Mais ce n'est <a href="http://secushare.org/PGP">pas tout rose</a>.</p>
<p>Lorsque l'on dit : « PGP », on pense le plus souvent : « e-mail ». Mais PGP ne concerne pas que les e-mails. Avec PGP, on peut : chiffrer, signer et authentifier, tout et n'importe quoi. Donc pas uniquement des e-mails.</p>
<p>Le principal usage pour moi sera l'<a href="https://fr.wikipedia.org/wiki/Authentification_forte">authentification forte</a> en combinant quelque chose que je sais, un mot de passe, combien font : « 2 + 2 », etc…, et quelque chose que j'ai, une paire de cou<sup>W</sup> clés. J'utiliserai cette possibilité pour améliorer l'authentification sur mes serveurs et autres services.</p>
<p>Un autre cas d'usage sera la signature des commits et des tags dans Git.</p>
<h2 id="support">Support</h2>
<p>Je n'avais pas de clé GPG auparavant. Uniquement des clés SSH, en moyenne une par machine cliente utilisée. La multiplication des clés d'authentification n'est pas très optimal car je peux arrêter d'utiliser une machine d'un jour à l'autre, perdre les clés, ou devoir les copier d'une machine à l'autre. Du coup le suivi des clés actives s'avère compliqué.</p>
<p>Stop ! Il me faut une clé pour les gouverner tous. Pour cela je dois toujours posséder cette clé sur moi et pouvoir la transporter en toute sécurité.</p>
<p>J'ai tout simplement opté pour une <a href="https://www.yubico.com/products/yubikey-hardware/yubikey-neo/">Yubikey NEO</a> qui à l'avantage d'un grande communauté et qui me permettra aussi de générer des OTP et ainsi bénéficier d'un second facteur d'authentification sur de nombreux <a href="http://www.dongleauth.info/">services Web</a>.</p>
<p>Ce support sera un peu ma carte d'identité numérique.</p>
<h2 id="installation">Installation</h2>
<p>Il faut d'abord installer les outils nécessaires. Bon moi j'utilise Fedora 22 mais vous pourrez sûrement obtenir le même résultat avec d'autres distributions moins performantes.</p>
<p>Nous allons utiliser <a href="https://www.gnupg.org/">GnuPGP</a>, dans sa version 2.1 de préférence, l'implémentation libre du standard OpenPGP qui n'est plus à présenter.</p>
<p>Sur Fedora, le paquet <code>gnupg2-smime</code> contient le binaire <code>scdaemon</code> qui permet de communiquer avec la carte. Si vous le cherchez sur Debian, il est dans le paquet <a href="https://packages.debian.org/jessie/gpgsm">gpgsm</a>. De lĂ Ă comparer GPG et le SM, il n'y a qu'un pas que je vous laisserai franchir dans les commentaires.</p>
<pre><code class="console"><span class="gp">#</span> dnf install gnupg2 gnupg2-smime</code></pre>
<p>L'agent GPG est nécessaire au bon fonctionnement du système. Il faut donc s'assurer qu'il soit lancé en même temps que la session utilisateur. Utilisons ce fichier <em>Unit</em> récupéré sur l'excellent <a href="https://wiki.archlinux.org/index.php/GnuPG#Start_gpg-agent_with_systemd_user">Wiki Archlinux</a>.</p>
<pre><code class="ini"><span class="k">[Unit]</span>
<span class="na">Description</span><span class="o">=</span><span class="s">GnuPG private key agent</span>
<span class="na">IgnoreOnIsolate</span><span class="o">=</span><span class="s">true</span>
<span class="k">[Service]</span>
<span class="na">Type</span><span class="o">=</span><span class="s">forking</span>
<span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/bin/gpg-agent --homedir=%h/.gnupg --daemon --use-standard-socket</span>
<span class="na">ExecStop</span><span class="o">=</span><span class="s">/usr/bin/pkill --uid %u gpg-agent</span>
<span class="na">Restart</span><span class="o">=</span><span class="s">on-abort</span>
<span class="k">[Install]</span>
<span class="na">WantedBy</span><span class="o">=</span><span class="s">default.target</span></code></pre>
<p>Mettre cela dans le fichier <code>~/.config/systemd/user/gpg-agent.service</code> et activer ce nouveau service.</p>
<pre><code class="console"><span class="gp">$</span> systemctl --user <span class="nb">enable </span>gpg-agent.service
<span class="gp">$</span> systemctl --user start gpg-agent.service</code></pre>
<p>C'est déjà pas mal pour l'installation de GnuPG. Comme nous l'a clairement <a href="//linuxfr.org/news/openpgp-card-une-application-cryptographique-pour-carte-a-puce#le-middleware-pcsc-lite">expliqué</a> <em>gouttegd</em>, l'accès à la carte ne se fait pas, du moins pas de façon optimale, en direct. <code>pcsc-lite</code> permet de communiquer avec la carte de façon plus efficace.</p>
<pre><code class="console"><span class="gp">#</span> dnf install pcsc-lite pcsc-lite-ccid
<span class="gp">#</span> systemctl <span class="nb">enable </span>pcscd.service
<span class="gp">#</span> systemctl start pcscd.service</code></pre>
<p>VoilĂ Â ! On devrait ĂŞtre bon niveau installation. Passons Ă la suite, la configuration de GnuPG.</p>
<h2 id="configuration-de-gnupg">Configuration de GnuPG</h2>
<pre><code class="console"><span class="gp">$</span> man gpg2 <span class="p">|</span> wc -l
<span class="go">2473</span></code></pre>
<p>2400 lignes, et ça ce n'est que pour la page de manuel. Autant laisser les paramètres de sécurité a ceux dont c'est le <a href="https://www.gnupg.org/people/index.html">métier</a>. <a href="https://g10code.com/">Hum…</a>. Il est en effet assez facile de compromettre totalement sa sécurité en changeant un paramètre qui semble anodin.</p>
<p>On peut cependant changer quelques options afin de rendre l'utilisation de <code>gpg2</code> plus agréable.</p>
<pre><code class="conf"><span class="c"># Explicit is better than implicit.</span><span class="w"></span>
gnupg<span class="w"> </span><span class="c"># Respecte le standard OpenPGP plus amélioration de compatibilité entre les implémentations.</span><span class="w"></span>
require-cross-certification<span class="w"> </span><span class="c"># S'assure que la sous-clé de signature provient bien du trousseau de l'utilisateur.</span><span class="w"></span>
<span class="w"> </span><span class="c"># https://www.gnupg.org/faq/subkey-cross-certify.en.html</span><span class="w"></span>
no-comments<span class="w"> </span><span class="c"># Les commentaires c'est mal : https://www.debian-administration.org/users/dkg/weblog/97</span><span class="w"></span>
no-emit-version<span class="w"> </span><span class="c"># Exclu la version de gpg lors de l'export des clés.</span><span class="w"></span>
no-greeting<span class="w"> </span><span class="c"># Supprime le message de copyright.</span><span class="w"></span>
armor<span class="w"> </span><span class="c"># Favorise l'affichage en ASCII blindé.</span><span class="w"></span>
with-fingerprint<span class="w"> </span><span class="c"># Mieux vaut vérifier les clés sur leur empreinte.</span><span class="w"></span>
keyserver<span class="w"> </span>hkp://keys.gnupg.net<span class="w"> </span><span class="c"># DNS Round Robin, pas besoin de plus.</span><span class="w"></span></code></pre>
<p>Ça devrait suffire. Si vous avez d'autres paramètres de choix, n'hésitez pas à les partager.</p>
<h2 id="préparation-de-la-yubikey">Préparation de la Yubikey</h2>
<p>Votre distribution devrait fournir les paquets nécessaires à la configuration de la Yubikey. Il faut donc les installer.</p>
<pre><code class="console"><span class="gp">#</span> dnf install yubikey-personalization-gui ykpers</code></pre>
<p>Chez Fedora, le paquet <code>ykpers</code> contient l’outil de de personnalisation en ligne de commande. La première chose à faire est d'activer OpenPGP qui ne l'est pas par défaut.</p>
<p>La Yubikey possède plusieurs modes de fonctionnement. Quatre de ces modes permettent d'activer la carte OpenPGP :</p>
<ul>
<li>
<code>1</code> : OpenPGP seul ;</li>
<li>
<code>2</code> : OTP + OpenPGPÂ ;</li>
<li>
<code>5</code> : <a href="https://www.yubico.com/applications/fido/">U2F</a> + OpenPGPÂ ;</li>
<li>
<code>6</code> : OTP + U2F + OpenPGP.</li>
</ul><p>En ajoutant <code>80</code> aux modes précédents, on active le mode d'éjection automatique de la carte qui permet de (1) éjecter la carte OpenPGP après un certain temps, (2) éjecter la carte lorsqu'un autre mode est actif.</p>
<p>Pour ma part, j'ai choisi d'activer toutes les fonctionnalités de la Yubikey en utilisant le mode <code>6</code>. Pour faire cela, on fait appel à la commande <code>ykpersonalize</code>.</p>
<pre><code class="console"><span class="gp">$</span> ykpersonalize -m86
<span class="go">Firmware version 3.4.3 Touch level 1797 Program sequence 1</span>
<span class="go">The USB mode will be set to: 0x86</span>
<span class="gp">></span> Commit? <span class="o">(</span>y/n<span class="o">)</span> <span class="o">[</span>n<span class="o">]</span>:y</code></pre>
<h3 id="configuration-du-mode-otp">Configuration du mode OTP</h3>
<p>Si vous avez aussi opté pour le mode OTP, la Yubikey vous permettra de stocker 2 configurations distinct. Celles-ci peuvent aussi être configuré par la ligne de commande mais l'interface graphique est plus conviviale.</p>
<p>Dans le premier compartiment de configuration, on va stocker la configuration <em>Yubico OTP</em> en utilisant le mode avancé. Il suffit simplement de générer une identité publique et privée ainsi qu'une clé secrète et de sauvegarder le tout. Je conseille aussi de protéger la configuration par un code secret qui peut être oublié car cette configuration ne devrait plus changer.</p>
<p>Je n'ai pas encore trouvé d'usage pour une seconde configuration mais les possibilités sont les suivantes :</p>
<ul>
<li>
<a href="https://en.wikipedia.org/wiki/HMAC-based_One-time_Password_Algorithm">OATH-HOTP</a>, qui s'avère avoir quelques <a href="http://crypto.stackexchange.com/a/2221/25175">faiblesses</a> ;</li>
<li>mot de passe statique ;</li>
<li>défi/réponse.</li>
</ul><h2 id="préparer-la-carte">Préparer la carte</h2>
<p>Encore une fois si vous ne l'avez pas encore fait, jetez un œil à l'<a href="//linuxfr.org/news/openpgp-card-une-application-cryptographique-pour-carte-a-puce#pr%C3%A9parer-la-carte">article</a> de <em>gouttegd</em> qui explique très bien cette étape et les suivantes. Je vais reprendre ici les étapes que j'ai suivi mais le tout provient globalement de l'article.</p>
<p>On commence donc par définir les paramètres de la cartes.</p>
<pre><code class="console"><span class="gp">$</span> gpg2 --card-edit
<span class="go">Application ID ...: D27600012401020000XXXXXXXXXX0000</span>
<span class="go">Version ..........: 2.0</span>
<span class="go">Manufacturer .....: Yubico</span>
<span class="go">Serial number ....: XXXXXXXXXX</span>
<span class="go">Name of cardholder: [non positionné]</span>
<span class="go">Language prefs ...: [non positionné]</span>
<span class="go">Sex ..............: non indiqué</span>
<span class="go">URL of public key : [non positionné]</span>
<span class="go">Login data .......: [non positionné]</span>
<span class="go">Signature PIN ....: forcé</span>
<span class="go">Key attributes ...: 2048R 2048R 2048R</span>
<span class="go">Max. PIN lengths .: 127 127 127</span>
<span class="go">PIN retry counter : 3 3 3</span>
<span class="go">Signature counter : 0</span>
<span class="go">Signature key ....: [none]</span>
<span class="go">Encryption key....: [none]</span>
<span class="go">Authentication key: [none]</span>
<span class="go">General key info..: [none]</span>
<span class="gp">></span> gpg/carte></code></pre>
<h3 id="codes-pin">Codes PIN</h3>
<p>Bien, commençons par protéger la carte par des codes PIN. Le code PIN administrateur par défaut est <code>12345678</code>, celui pour lui pour l'utilisateur est <code>123456</code>.</p>
<pre><code class="console"><span class="gp">$</span> gpg/carte> admin
<span class="go">Les commandes d'administration sont permises</span>
<span class="gp">></span> gpg/carte> passwd
<span class="go">gpg: carte OpenPGP nº D27600012401020000XXXXXXXXXX0000 détectée</span>
<span class="go">1 - change PIN</span>
<span class="go">2 - unblock PIN</span>
<span class="go">3 - change Admin PIN</span>
<span class="go">4 - set the Reset Code</span>
<span class="go">Q - quit</span>
<span class="gp">></span> Quel est votre choix ? 3
<span class="go">PIN changed.</span>
<span class="go">1 - change PIN</span>
<span class="go">2 - unblock PIN</span>
<span class="go">3 - change Admin PIN</span>
<span class="go">4 - set the Reset Code</span>
<span class="go">Q - quit</span>
<span class="gp">></span> Quel est votre choix ? 1
<span class="go">PIN changed.</span>
<span class="go">1 - change PIN</span>
<span class="go">2 - unblock PIN</span>
<span class="go">3 - change Admin PIN</span>
<span class="go">4 - set the Reset Code</span>
<span class="go">Q - quit</span>
<span class="gp">></span> Quel est votre choix ? 4
<span class="go">Reset Code set.</span>
<span class="go">1 - change PIN</span>
<span class="go">2 - unblock PIN</span>
<span class="go">3 - change Admin PIN</span>
<span class="go">4 - set the Reset Code</span>
<span class="go">Q - quit</span>
<span class="gp">></span> Quel est votre choix ? q
<span class="gp">></span> gpg/carte></code></pre>
<p>Le nombre minimum de chiffres semble être de <strong>8</strong> pour le code administrateur et <strong>6</strong> pour le code utilisateur. J'ai aussi choisi de générer un code de réinitialisation que j'ajouterai sur mon support de sauvegarde des secrets.</p>
<p>J'ai généré mes codes PIN avec la commande suivante :</p>
<pre><code class="console"><span class="gp">$</span> xxd -l <span class="m">128</span> -p /dev/urandom <span class="p">|</span> sed -E <span class="s1">'s/[^0-9]*//g'</span> <span class="p">|</span> head -c X</code></pre>
<p>OĂą <code>X</code> est le nombre de chiffres voulu.</p>
<h3 id="identification">Identification</h3>
<p>On va maintenant renseigner les informations sur le propriétaire de la carte.</p>
<pre><code class="console"><span class="gp">></span> gpg/carte> name
<span class="go">Nom du détenteur de la carte : Doe</span>
<span class="go">Prénom du détenteur de la carte : John</span>
<span class="gp">></span> gpg/carte> lang
<span class="go">Préférences de langue : fr</span>
<span class="gp">></span> gpg/carte> sex
<span class="go">Sexe ((M)asculin, (F)Ă©minin ou espace) : M</span>
<span class="gp">></span> gpg/carte> login
<span class="go">Données d'identification (nom du compte) : jdoe</span></code></pre>
<p>Une fois la clé publique disponible en ligne vous pourrez aussi le renseigner dans la carte avec la commande <code>url</code>.</p>
<h2 id="génération-des-clés-gpg">Génération des clés GPG</h2>
<p>Nous y sommes enfin, la génération des clés. Tirez les rideaux, déconnectez vous du réseau, redémarrez la machine et assurez vous d'avoir un minimum de programme en cours de fonctionnement. Ou, installez carrément un système minimal tout frais qui n'a jamais vu à quoi ressemble un câble Ethernet. Il s'agit de s'assurer que la clé privée primaire, reste privée.</p>
<p>On va procéder de la façon suivante :</p>
<ul>
<li>1 clé primaire RSA de signature, 4096 bits, générée sur la machine ;
<ul>
<li>1 sous-clé RSA de signature, 2048 bits, générée sur la carte ;</li>
<li>1 sous-clé RSA d'authentification, 2048 bits, générée sur la carte ;</li>
<li>1 sous-clé RSA de chiffrement, 2048 bits, générée sur la carte.</li>
</ul>
</li>
</ul><p>Ou pourra ainsi sauvegarder la clé primaire et la mettre en sécurité hors ligne tout en gardant des sous-clés, inconnues du système car générées par la carte, pour une utilisation quotidienne.</p>
<p>Pour ma <a href="https://xkcd.com/936/">passphrase</a>, j'utilise la commande suivante afin de lier un ensemble de mot aléatoirement choisis.</p>
<pre><code class="console"><span class="gp">$</span> <span class="k">for</span> i in <span class="sb">`</span>seq 4<span class="sb">`</span><span class="p">;</span> <span class="k">do</span> shuf -n1 /usr/share/dict/words<span class="p">;</span> <span class="k">done</span> <span class="p">|</span> paste -s -d - <span class="p">|</span> tr <span class="s1">'[:upper:]'</span> <span class="s1">'[:lower:]'</span>
<span class="go">blue-fish-mermaid-copycutter-hurris</span></code></pre>
<p>Ça permet d'avoir un secret pas trop compliqué à retenir mais difficile à deviner.</p>
<h3 id="clé-primaire">Clé primaire</h3>
<pre><code class="console"><span class="gp">$</span> gpg2 --full-gen-key
<span class="go">Sélectionnez le type de clef désiré :</span>
<span class="go"> (1) RSA et RSA (par défaut)</span>
<span class="go"> (2) DSA et Elgamal</span>
<span class="go"> (3) DSA (signature seule)</span>
<span class="go"> (4) RSA (signature seule)</span>
<span class="gp">></span> Quel est votre choix ? 4
<span class="go">les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.</span>
<span class="go">Quelle taille de clef désirez-vous ? (2048) 4096</span>
<span class="go">La taille demandée est 4096 bits</span>
<span class="go">Veuillez indiquer le temps pendant lequel cette clef devrait ĂŞtre valable.</span>
<span class="go"> 0 = la clef n'expire pas</span>
<span class="go"> <n> = la clef expire dans n jours</span>
<span class="go"> <n>w = la clef expire dans n semaines</span>
<span class="go"> <n>m = la clef expire dans n mois</span>
<span class="go"> <n>y = la clef expire dans n ans</span>
<span class="gp">></span> Pendant combien de temps la clef est-elle valable ? <span class="o">(</span>0<span class="o">)</span> 3y
<span class="go">La clef expire le XXXXXXXXXXXX</span>
<span class="gp">></span> Est-ce correct ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="go">GnuPG doit construire une identité pour identifier la clef.</span>
<span class="gp">></span> Nom réel : John Doe
<span class="gp">></span> Adresse Ă©lectronique : john.doe@example.com
<span class="go">Commentaire : </span>
<span class="go">Vous avez sélectionné cette identité :</span>
<span class="go"> « John Doe <john.doe@example.com> »</span>
<span class="gp">></span> Changer le <span class="o">(</span>N<span class="o">)</span>om, le <span class="o">(</span>C<span class="o">)</span>ommentaire, l<span class="err">'</span><span class="o">(</span>A<span class="o">)</span>dresse Ă©lectronique ou <span class="o">(</span>O<span class="o">)</span>ui/<span class="o">(</span>Q<span class="o">)</span>uitter ? o
<span class="go">De nombreux octets aléatoires doivent être générés. Vous devriez faire</span>
<span class="go">autre chose (taper au clavier, déplacer la souris, utiliser les disques)</span>
<span class="go">pendant la génération de nombres premiers ; cela donne au générateur de</span>
<span class="go">nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.</span>
<span class="go">gpg: clef AABBCCDD marquée de confiance ultime.</span>
<span class="go">gpg: répertoire « /home/jdoe/.gnupg/openpgp-revocs.d » créé</span>
<span class="go">les clefs publique et secrète ont été créées et signées.</span>
<span class="go">gpg: vérification de la base de confiance</span>
<span class="go">gpg: 3 marginale(s) nécessaire(s), 1 complète(s) nécessaire(s),</span>
<span class="go"> modèle de confiance PGP</span>
<span class="go">gpg: profondeur : 0 valables : 1 signées : 0</span>
<span class="go"> confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.</span>
<span class="go">gpg: la prochaine vérification de la base de confiance aura lieu le 2018-XX-XX</span>
<span class="go">Remarquez que cette clef ne peut pas être utilisée pour chiffrer. Vous pouvez</span>
<span class="go">utiliser la commande « --edit-key » pour générer une sous-clef à cette fin.</span>
<span class="go">pub rsa4096/AABBCCDD 2015-XX-XX [expire : 2018-XX-XX]</span>
<span class="go"> Empreinte de la clef = 1234 5678 XXXX XXXX XXXX XXXX XXXX XXXX XXXX EEFF</span>
<span class="go">uid [ultimate] John Doe <john.doe@example.com></span>
<span class="gp">></span> gpg> quit
<span class="gp">></span> Faut-il enregistrer les modifications ? <span class="o">(</span>o/N<span class="o">)</span> o</code></pre>
<p>Pour commencer, j'ai décidé de garder cette clé 3 ans afin de voir comment se passe la prise en main. Je ne saurais que conseiller de sauvegarder la date de renouvellement dans votre calendrier <strong>maintenant</strong> car il y a peu de chance de s'en rappeler dans 3 ans.</p>
<p>J'ai aussi ajouté ma photographie à la clé. Pour cela, il faut éditer la clé et ajouter un fichier JPEG avec la commande <code>addphoto</code>. Il est conseillé une image de 240x288 pixels et 6 Ko au maximum.</p>
<p>GnuPG fait appel au programme <code>xloadimage</code> pour afficher les photos. Il faut donc s'assurer de l'avoir installé.</p>
<pre><code class="console"><span class="gp">#</span> dnf install xloadimage</code></pre>
<pre><code class="console"><span class="gp">$</span> gpg2 --edit-key AABBCCDD
<span class="go">La clef secrète est disponible.</span>
<span class="go">pub rsa4096/AABBCCDD</span>
<span class="go"> créé : 2015-XX-XX expire : 2018-XX-XX utilisation : SC </span>
<span class="go"> confiance : ultimate validité : ultimate</span>
<span class="go">[ultimate] (1). John Doe <john.doe@example.com></span>
<span class="gp">></span> gpg> addphoto
<span class="go">Choisissez une image pour votre photo d'identité. L'image doit être</span>
<span class="go">un fichier JPEG. Rappelez-vous que cette image est stockée dans la</span>
<span class="go">clef publique. Si l'image est très grosse, la clef le sera aussi.</span>
<span class="go">Une taille de l'ordre de 240x288 est conseillée.</span>
<span class="gp">></span> Entrez le nom du fichier JPEG pour la photo d<span class="err">'</span>identité : /home/jdoe/images/id.jpg
<span class="gp">></span> Cette photo est-elle correcte <span class="o">(</span>o/N/q<span class="o">)</span> ? o
<span class="go">pub rsa4096/AABBCCDD</span>
<span class="go"> créé : 2015-XX-XX expire : 2018-XX-XX utilisation : SC </span>
<span class="go"> confiance : ultimate validité : ultimate</span>
<span class="go">[ultimate] (1). John Doe <john.doe@example.com></span>
<span class="go">[ unknown] (2) [jpeg image of size 4XXX]</span>
<span class="gp">></span> gpg> quit
<span class="gp">></span> Faut-il enregistrer les modifications ? <span class="o">(</span>o/N<span class="o">)</span> o</code></pre>
<h3 id="sous-clés">Sous-clés</h3>
<p>C'est maintenant le tour des sous-clés.</p>
<pre><code class="console"><span class="gp">$</span> gpg2 --edit-key AABBCCDD
<span class="go">La clef secrète est disponible.</span>
<span class="go">pub rsa4096/AABBCCDD</span>
<span class="go"> créé : 2015-XX-XX expire : 2018-XX-XX utilisation : SC </span>
<span class="go"> confiance : ultimate validité : ultimate</span>
<span class="go">[ultimate] (1). John Doe <john.doe@example.com></span>
<span class="go">[ultimate] (2) [jpeg image of size 4XXX]</span>
<span class="gp">></span> gpg> addcardkey
<span class="go">Signature key ....: [none]</span>
<span class="go">Encryption key....: [none]</span>
<span class="go">Authentication key: [none]</span>
<span class="go">Veuillez sélectionner le type de clef à générer :</span>
<span class="go"> (1) Clef de signature</span>
<span class="go"> (2) Clef de chiffrement</span>
<span class="go"> (3) Clef d'authentification</span>
<span class="gp">></span> Quel est votre choix ? 1
<span class="go">Veuillez indiquer le temps pendant lequel cette clef devrait ĂŞtre valable.</span>
<span class="go"> 0 = la clef n'expire pas</span>
<span class="go"> <n> = la clef expire dans n jours</span>
<span class="go"> <n>w = la clef expire dans n semaines</span>
<span class="go"> <n>m = la clef expire dans n mois</span>
<span class="go"> <n>y = la clef expire dans n ans</span>
<span class="gp">></span> Pendant combien de temps la clef est-elle valable ? <span class="o">(</span>0<span class="o">)</span> 1y
<span class="go">La clef expire le XXXXXXXXXXX</span>
<span class="gp">></span> Est-ce correct ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="gp">$</span> Faut-il vraiment la créer ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="gp">></span> gpg> addcardkey
<span class="go">Signature key ....: 1234 5678 XXXX XXXX XXXX XXXX XXXX XXXX XXXX EEFF</span>
<span class="go">Encryption key....: [none]</span>
<span class="go">Authentication key: [none]</span>
<span class="go">Veuillez sélectionner le type de clef à générer :</span>
<span class="go"> (1) Clef de signature</span>
<span class="go"> (2) Clef de chiffrement</span>
<span class="go"> (3) Clef d'authentification</span>
<span class="gp">></span> Quel est votre choix ? 2
<span class="go">Veuillez indiquer le temps pendant lequel cette clef devrait ĂŞtre valable.</span>
<span class="go"> 0 = la clef n'expire pas</span>
<span class="go"> <n> = la clef expire dans n jours</span>
<span class="go"> <n>w = la clef expire dans n semaines</span>
<span class="go"> <n>m = la clef expire dans n mois</span>
<span class="go"> <n>y = la clef expire dans n ans</span>
<span class="gp">></span> Pendant combien de temps la clef est-elle valable ? <span class="o">(</span>0<span class="o">)</span> 1y
<span class="go">La clef expire le XXXXXXXXXXX</span>
<span class="gp">></span> Est-ce correct ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="gp">></span> Faut-il vraiment la créer ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="gp">></span> gpg> addcardkey
<span class="go">Signature key ....: 1234 5678 XXXX XXXX XXXX XXXX XXXX XXXX XXXX EEFF</span>
<span class="go">Encryption key....: 1234 5678 XXXX XXXX XXXX XXXX XXXX XXXX XXXX EEFF</span>
<span class="go">Authentication key: [none]</span>
<span class="go">Veuillez sélectionner le type de clef à générer :</span>
<span class="go"> (1) Clef de signature</span>
<span class="go"> (2) Clef de chiffrement</span>
<span class="go"> (3) Clef d'authentification</span>
<span class="gp">></span> Quel est votre choix ? 3
<span class="go">Veuillez indiquer le temps pendant lequel cette clef devrait ĂŞtre valable.</span>
<span class="go"> 0 = la clef n'expire pas</span>
<span class="go"> <n> = la clef expire dans n jours</span>
<span class="go"> <n>w = la clef expire dans n semaines</span>
<span class="go"> <n>m = la clef expire dans n mois</span>
<span class="go"> <n>y = la clef expire dans n ans</span>
<span class="gp">></span> Pendant combien de temps la clef est-elle valable ? <span class="o">(</span>0<span class="o">)</span> 1y
<span class="go">La clef expire le XXXXXXXXXXX</span>
<span class="gp">></span> Est-ce correct ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="gp">></span> Faut-il vraiment la créer ? <span class="o">(</span>o/N<span class="o">)</span> o
<span class="go">pub rsa4096/AABBCCDD</span>
<span class="go"> créé : 2015-XX-XX expire : 2018-XX-XX utilisation : SC </span>
<span class="go"> confiance : ultimate validité : ultimate</span>
<span class="go">sub rsa2048/00112233</span>
<span class="go"> créé : 2015-XX-XX expire : 2016-XX-XX utilisation : S </span>
<span class="go">sub rsa2048/11223344</span>
<span class="go"> créé : 2015-XX-XX expire : 2016-XX-XX utilisation : E </span>
<span class="go">sub rsa2048/22334455</span>
<span class="go"> créé : 2015-XX-XX expire : 2016-XX-XX utilisation : A </span>
<span class="go">[ultimate] (1). John Doe <john.doe@example.com></span>
<span class="go">[ultimate] (2) [jpeg image of size 4XXX]</span>
<span class="gp">></span> gpg> quit
<span class="gp">></span> Faut-il enregistrer les modifications ? <span class="o">(</span>o/N<span class="o">)</span> o</code></pre>
<p>Voilà , les sous-clés sont sur la carte. J'ai décidé de les garder 1 an. Comme pour la clé primaire, la date de renouvellement est enregistrée dans mon calendrier.</p>
<p>On va vérifier que la <a href="https://www.gnupg.org/faq/subkey-cross-certify.en.html">certification croisée</a> des clés est bien en place.</p>
<pre><code class="console"><span class="gp">$</span> gpg2 --edit-key AABBCCDD
<span class="go">La clef secrète est disponible.</span>
<span class="go">pub rsa4096/AABBCCDD</span>
<span class="go"> créé : 2015-XX-XX expire : 2018-XX-XX utilisation : SC </span>
<span class="go"> confiance : ultimate validité : ultimate</span>
<span class="go">sub rsa2048/00112233</span>
<span class="go"> créé : 2015-XX-XX expire : 2016-XX-XX utilisation : S </span>
<span class="go">sub rsa2048/11223344</span>
<span class="go"> créé : 2015-XX-XX expire : 2016-XX-XX utilisation : E </span>
<span class="go">sub rsa2048/22334455</span>
<span class="go"> créé : 2015-XX-XX expire : 2016-XX-XX utilisation : A </span>
<span class="go">[ultimate] (1). John Doe <john.doe@example.com></span>
<span class="go">[ultimate] (2) [jpeg image of size 4XXX]</span>
<span class="gp">></span> gpg> cross-certify
<span class="go">la sous-clef de signature 00112233 a déjà une certification croisée</span>
<span class="go">la sous-clef 11223344 ne signe pas et n'a donc pas besoin de certification croisée</span>
<span class="go">la sous-clef 22334455 ne signe pas et n'a donc pas besoin de certification croisée</span>
<span class="gp">></span> gpg> quit</code></pre>
<p>Voilà , on est bon pour la génération des clés. On peut maintenant la publier.</p>
<pre><code class="console"><span class="gp">$</span> gpg2 --send-key AABBCCDD
<span class="go">gpg: envoi de la clef AABBCCDD au serveur hkp keys.gnupg.net</span></code></pre>
<h2 id="conclusion">Conclusion</h2>
<p>La génération d'un ensemble de clés OpenPGP n'est pas une tâche aisée. Mais la sécurité viens toujours avec un ensemble de contraintes.</p>
<p>Ă€ partir de ce moment, la Yubikey ne me quitte plus. Mais ce n'est pas encore fini. Il reste encore Ă :</p>
<ul>
<li>protéger notre ensemble de clés en générant des informations de récupération ;</li>
<li>enlever la clé primaire du trousseau et de la sauvegarder sur un ou plusieurs supports à tenir secret.</li>
</ul><p>Nous verrons ces étapes dans un prochain article car celui-ci se fait déjà très long.</p><div><a href="https://linuxfr.org/users/spack/journaux/openpgp-enlarge-your-privacy.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/106142/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/openpgp-enlarge-your-privacy#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/106142/comments.atom
tag:linuxfr.org,2005:Diary/35831
2015-05-03T13:36:29+02:00
2015-05-03T13:36:29+02:00
HTTP poussé vers la sortie ?
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Accompagnée d'organisations telles que l'IETF ou le <a href="https://w3ctag.github.io/web-https/">W3C</a>, la fondation Mozilla a annoncée son intention de <a href="https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/">mettre fin au support du protocole HTTP</a> dans sa forme non sécurisée et souhaite encourager la mise en place de <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security">TLS</a> pour la plupart des sites Web. L'équipe de Chromium elle aussi <a href="https://www.chromium.org/Home/chromium-security/marking-http-as-non-secure">y pense fortement</a>.</p>
<p>En effet l'ambiance du moment est de <a href="https://tools.ietf.org/html/rfc7258">retirer les protocoles en texte clair de l'usage d'Internet</a> afin d'assurer une meilleure protection de la vie privée. Notons aussi que Google attribue un <a href="http://googlewebmastercentral.blogspot.be/2014/08/https-as-ranking-signal.html">meilleur classement aux sites HTTPS</a> (ironie du sort, leur blog n'est lui pas disponible en HTTPS).</p>
<p>Notons toujours que Mozilla a décidée d'implémenter la prochaine génération du protocole HTTP, <a href="https://http2.github.io/">HTTP/2</a>, <a href="https://wiki.mozilla.org/Networking/http2">uniquement qu'à travers TLS</a>. Firefox supporte d'ors et déjà ce nouveau protocole depuis la version <a href="https://www.mozilla.org/en-US/firefox/36.0/releasenotes/">36</a>.</p>
<p>Alors si la majeure partie du contenu disponible sur le Web est dit public, il n'empêche que l'usage d'un protocole en texte clair apporte quelques problèmes concernant la vie privée :</p>
<ul>
<li>il est possible d'espionner tout trafic aussi anodin soit-il et pouvoir établir le profil de l'utilisateur ;</li>
<li>et on peut se permettre de <a href="http://arstechnica.com/tech-policy/2013/04/07/how-a-banner-ad-for-hs-ok/">modifier le contenu à la volée</a>.</li>
</ul><p>L'usage exclusif de HTTPS n'est pas non plus sans apporter son lot de soucis. Aussi bien que Mozilla entend bien continuer à supporter HTTP mais n'y apportera aucune nouvelle fonctionnalité. Il n'empêche qu'assurer la bonne sécurité de son site Web via SSL/TLS n'est pas une chose aisée. Rappelons que si l'attaque <a href="https://www.openssl.org/%7Ebodo/ssl-poodle.pdf">POODLE</a> [PDF] a été rendu possible, en plus d'un <a href="http://www.openbsd.org/papers/bsdcan14-libressl/mgp00001.html">mauvais code</a>, c'est aussi à cause de l'usage répandu du vieux protocole <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security#SSL_1.0.2C_2.0_and_3.0">SSLv3</a> largement déprécié par les versions ultérieurs de TLS. Alors vaut-il mieux être non sécurisé ou mal sécurisé ?</p>
<p>Pour aider à la configuration de son serveur HTTP, Mozilla a mis en ligne un <a href="https://mozilla.github.io/server-side-tls/ssl-config-generator/">générateur de configuration SSL</a>. Mais un copier/coller sans comprendre ce que l'on fait suffit-il à se croire en sécurité ?</p>
<p>Le système des autorités de certification n'est lui aussi pas parfait. Que faire d'une <a href="https://blog.mozilla.org/security/2015/04/02/distrusting-new-cnnic-certificates/">autorité dont la confiance peut être mise en cause</a> ou d'une à qui on veut bien faire confiance mais qui a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=215243">du mal à se faire accepter</a> ? Doit-on déléguer la gestion de cette confiance à notre navigateur ? Le projet <a href="http://www.certificate-transparency.org/">Certificate Transparency</a> a pour but de répondre a ces questions mais mis, je ne sais pas quelle est la portée de ce projet.</p>
<p>Sans compter qu'obtenir un certificat est le plus souvent payant, ce qui peut être un frein pour les petites structures. Il y a bien des initiatives en cours telles que <a href="https://letsencrypt.org/">Let's Encrypt</a> ou <a href="https://sslmate.com/">SSLMate</a> (payant) pour démocratiser la création de certificats. Mais dans le cas de <em>Let's Encrypt</em>, il reste encore à voir ce que cela donnera à l'usage.</p>
<p>Alors cher journal, prêt à passer à HTTPS ?</p><div><a href="https://linuxfr.org/users/spack/journaux/http-pousse-vers-la-sortie.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/105641/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/http-pousse-vers-la-sortie#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/105641/comments.atom
tag:linuxfr.org,2005:Diary/35641
2015-02-24T14:04:04+01:00
2015-02-24T14:04:04+01:00
Effacer le téléchargement d'Internet, Total Wipes a essayé
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Bon d'accord, il semblerait que se soit "un bug" de leur part mais ça a au moins le mérite d'être drôle… ou effrayant.</p>
<p><a href="https://www.totalwipesmusicgroup.com">Total Wipes</a> est une société chargée de défendre les droits des musiciens sur Internet. Une de leur méthode de protection utiliserait un script qui parcours les sites Web à la recherche de contenu protégé et fait une demande automatique auprès de Google afin de déréférencer le lien.</p>
<p>Sauf que récemment, leur script a eu un <a href="https://www.facebook.com/permalink.php?story_fbid=840960355966998&id=240401712689535">petit bug</a> :</p>
<blockquote>
<p>Due to technical servers problems on the first february week our script sent hundreds DMCA to hundreds domains not related at all any copyrights of our contents.</p>
<p>It was our fault, no doubts about it. The DMCA is a serious issue and it must be carefully managed.</p>
</blockquote>
<p>Tous les liens contenant le mot clé "<em>download</em>" était considéré comme un lien à abattre. Du coup une <a href="https://www.chillingeffects.org/notices/10416081">liste assez importante</a> a été envoyée à Google. On y retrouve pas mal de logiciels libres et autres grands noms du Web.</p>
<p>Selon Total Wipes, <a href="https://www.facebook.com/permalink.php?story_fbid=841209739275393&id=240401712689535">97% des liens</a> ont été rejetés mais il n'empêche que c'était bien tenté. A savoir ce qu'il se serait passé si c'est liens avait été effectivement retirés de la base Google.</p><div><a href="https://linuxfr.org/users/spack/journaux/effacer-le-telechargement-d-internet-total-wipes-a-essaye.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/104907/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/effacer-le-telechargement-d-internet-total-wipes-a-essaye#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/104907/comments.atom
tag:linuxfr.org,2005:Diary/35534
2015-01-12T12:38:18+01:00
2015-01-12T12:38:18+01:00
Notepad++ est Charlie
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Le créateur de <a href="http://notepad-plus-plus.org/">Notepad++</a> est Français même si apparemment il n'aime pas <a href="https://twitter.com/ho_don/status/496783255182385152">être désigné comme tel</a>.</p>
<p>Il n'empêche qu'une <a href="http://notepad-plus-plus.org/news/notepad-6.7.4-je-suis-charlie-edition.html">version spéciale de Notepad++</a> a vu le et lors du premier lancement, le message suivant est affiché.</p>
<blockquote>
<p>Freedom of expression is like the air we breathe, we don't feel it, until people take it away from us.</p>
<p>For this reason, Je suis Charlie, not because I endorse everything they published, but because I cherish the right to speak out freely without risk even when it offends others.<br>
And no, you cannot just take someone's life for whatever he/she expressed.</p>
<p>Hence this "Je suis Charlie" edition.</p>
</blockquote>
<p>Le logiciel libre milite lui aussi pour la liberté d'expression.</p><div><a href="https://linuxfr.org/users/spack/journaux/notepad-est-charlie.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/104460/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/notepad-est-charlie#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/104460/comments.atom
tag:linuxfr.org,2005:Diary/35496
2014-12-26T14:21:07+01:00
2014-12-26T14:23:31+01:00
Indication de type pour Python
Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr
<p>Python est connu pour son typage dynamique et son approche <a href="https://fr.wikipedia.org/wiki/Duck_typing">duck typing</a> qui permet décrire des fonctions gérant plusieurs types de données sans même y penser.</p>
<pre><code class="python"><span class="o">>>></span> <span class="n">fun</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">:</span> <span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span><span class="o">*</span><span class="n">c</span>
<span class="o">>>></span> <span class="n">fun</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="mi">9</span>
<span class="o">>>></span> <span class="n">fun</span><span class="p">(</span><span class="s">'pommes et '</span><span class="p">,</span> <span class="s">'oranges '</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="s">'pommes et oranges pommes et oranges pommes et oranges '</span>
<span class="o">>>></span></code></pre>
<p>Sauf que le problème est là . Une variable pouvant être de n'importe quel type, il faut aussi s'attendre à recevoir n'importe quel type et dans le cas échéant filtrer sur les types que l'on désir traiter.</p>
<pre><code class="python"><span class="o">>>></span> <span class="k">def</span> <span class="nf">fun2</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
<span class="o">...</span> <span class="n">it</span> <span class="o">=</span> <span class="p">[]</span>
<span class="o">...</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="o">...</span> <span class="n">it</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="o">...</span> <span class="k">else</span><span class="p">:</span>
<span class="o">...</span> <span class="k">try</span><span class="p">:</span>
<span class="o">...</span> <span class="n">it</span> <span class="o">=</span> <span class="nb">iter</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="o">...</span> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="o">...</span> <span class="n">it</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="o">...</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">it</span><span class="p">:</span>
<span class="o">...</span> <span class="k">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="n">fun2</span><span class="p">(</span><span class="s">'a'</span><span class="p">)</span>
<span class="n">a</span>
<span class="o">>>></span> <span class="n">fun2</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="mi">1</span>
<span class="o">>>></span> <span class="n">fun2</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="mi">1</span>
<span class="mi">2</span>
<span class="mi">3</span>
<span class="o">>>></span></code></pre>
<p>C'est tout de suite moins sexy et si l'on reçoit un type que l'on n'attendait pas, cela cause le plus souvent un arrêt du programme lors de l'exécution. Plutôt gênant quand on sait que les langages à typage statique n'ont pas ce problème car toute erreur de type est décelée à la compilation.</p>
<p>Que faire ? Le plus souvent, le paradigme de typage statique ou dynamique fait partie du cœur du langage et rares sont ceux qui permettent de mixer les deux.</p>
<p>Le projet <a href="http://mypy-lang.org/">mypy</a> permet déjà d’annoter les éléments du langage afin du vérifier statiquement l'usage des types. Des <a href="http://thread.gmane.org/gmane.comp.python.ideas/30432">discussions</a> sont actuellement en cours afin d'intégrer ces mêmes fonctionnalités au cœur du langage.</p>
<p>Il sera ainsi possible d'annoter les fonctions afin de renseigner sur les types acceptés et le type de retour.</p>
<pre><code class="python"><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">c</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">pass</span></code></pre>
<p>La solution actuellement <a href="https://quip.com/r69HA9GhGa7J">proposée</a> par Guido van Rossum (créateur de Python) pour annoter les variables est d'utiliser les commentaires.</p>
<pre><code class="python"><span class="n">a</span> <span class="o">=</span> <span class="mi">1</span> <span class="c"># type: int</span></code></pre>
<p>Une solution moins élégante que celle actuellement proposée par <a href="http://mypy-lang.org/examples.html">mypy</a>.</p>
<p>Une chose est sûre, l'indication des types restera optionnelle et ne doit aucunement changer le langage. Toute erreur générée par l'analyse statique des types ne serait que purement informelle et ne causerait pas l'arrêt du programme.</p><div><a href="https://linuxfr.org/users/spack/journaux/indication-de-type-pour-python.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/104316/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/spack/journaux/indication-de-type-pour-python#comments">ouvrir dans le navigateur</a>
</p>
Spack
https://linuxfr.org/nodes/104316/comments.atom