Cours - SSH et notions de cryptographie
Principe, vocabulaire
Protéger des messages (confidentialité, authenticité, intégrité) en s’aidant souvent de secrets ou clés.
- Confidentialité : seul l'expéditeur et le destinaire ont accès au message
- Authenticité : le message reçu par le destinaire provient bien de l'expéditeur
- Intégrité : le message reçu est complet et n'a pas été déformé
chiffrement symétrique
Historique : le nombre de César
- un algoritme : décalage des lettres dans l'alphabet
- un secret / une clef (par exemple : 3)
- pour déchiffrer : opération inverse triviale
Linux c'est sympatoche
Olqxa f'hvw vbpsdwrfkh
Pas d'équivalent classique ...
- imaginer un sorte de nombre de César où l'on chiffre en décalant de 3 ...
- ... mais pour déchiffrer, il faut faire -12 !
Les mathématiques permettent de générer un couple de clef (A, B) :
chiffrer(message, A)peut être déchiffré uniquement avecBchiffrer(message, B)peut être déchiffŕe uniquement avecAOn nomme une clef la clef privée : on la garde secrètement rien que pour nous
On nomme l'autre la clef publique : on la donne à tout le monde
Si quelqu'un cherche à vous envoyer un message, ils chiffrent en utilisant votre clef publique
Vous seul avez la clef privée et pouvez déchiffrer.


- Le chiffrement asymétrique assure la confidentialité et l'integrité
- Mais pas l'authenticité !
- Besoin d'un mécanisme de "signature"


Echange de clef
- Vous recevez un mail de Edward Snowden avec sa clef publique en copie
- Comment s'assurer que c'est la vraie bonne clef ?
- (Spoiler alert : vous ne pouvez apriori pas...)
Problème général de sécurité : il est difficile de s'assurer de l'authenticité initiale de la clef publique
Solution 1 : la vraie vie
Voir Edward Snowden en chair et en os, et récupérer la clef avec lui
Solution 2 : web of trust
La clef de Edward Snowden a été signé par pleins de journalistes et activitstes indépendant à travers le monde, ce qui diminue le risque d'une falsification
Solution 3 : autorités de certification
Vous faites confiance à Microsoft et Google (!?), qui certifient avoir vérifié que E. Snowden possède cette clef.
- C'est le principe des autorités de certification utilisé par HTTPS
- Votre navigateur fait confiance à des clefs prédéfinies correspondant à des tiers de "confiance" (e.g. Google, ...)
- Le certificat HTTPS contient une signature qui a été produite avec l'une des clefs de ces tiers de confiance
- Vous pouvez ainsi faire confiance "par délégation"
Applications
- HTTPS (SSL/TLS, x509)
- SSH
- Emails chiffrés
- Signature des paquets dans APT
- ...
Se connecter et gérer un serveur avec SSH
À propos des serveurs
Serveur (au sens matériel)
- machine destinée à fournir des services (e.g. un site web)
- allumée et connectée 24/7
- typiquement sans interface graphique
- ... et donc administrée à distance
Serveur (au sens logiciel)
- aussi appelé "daemon", ou service
- programme qui écoute en permanence et attends qu'un autre programme le contacte
- par ex. : un serveur web attends des clients
- écoute typiquement sur un ou plusieurs port
- par ex. : 80 pour HTTP
Serveurs : quel support matériel ?



... Plot twist !

"Virtual" Private Server (VPS)
VPS = une VM dans un datacenter

... qui tourne quelque part sur une vraie machine


SSH : Secure Shell
- Un protocole client-serveur, par défaut sur le port 22
- Prendre le contrôle d'une machine à distance via un shell
- Sécurisé grâce à du chiffrement asymétrique
- le serveur a un jeu de clef publique/privé
- le client peut aussi en avoir un (sinon : mot de passe)
- Outil "de base" pour administrer des serveurs
Syntaxe : ssh utilisateur@machine
$ ssh admin@ynh-forge.netlib.re
The authenticity of host 'ynh-forge.netlib.re (46.101.221.117)' can't be established.
RSA key fingerprint is SHA256:CuPd7AtmqS0UE6DwDDG68hQ+qIT2tQqZqm8pfo2oBE8.
Are you sure you want to continue connecting (yes/no)? █
$ ssh admin@ynh-forge.netlib.re
The authenticity of host 'ynh-forge.netlib.re (46.101.221.117)' can't be established.
RSA key fingerprint is SHA256:CuPd7AtmqS0UE6DwDDG68hQ+qIT2tQqZqm8pfo2oBE8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ynh-forge.netlib.re' (RSA) to the list of known hosts.
Debian GNU/Linux 9
admin@ynh-forge.netlib.re's password: █
$ ssh admin@ynh-forge.netlib.re
The authenticity of host 'ynh-forge.netlib.re (46.101.221.117)' can't be established.
RSA key fingerprint is SHA256:CuPd7AtmqS0UE6DwDDG68hQ+qIT2tQqZqm8pfo2oBE8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ynh-forge.netlib.re' (RSA) to the list of known hosts.
Debian GNU/Linux 9
admin@ynh-forge.netlib.re's password:
Last login: Thu Oct 4 08:52:07 2018 from 90.63.229.46
admin@ynh-forge:~$ █
SSH : se logguer
- ACHTUNG : Soyez attentif à dans quel terminal vous tapez !!!
- En se connectant la première fois, on vérifie la clef publique du serveur
- On a besoin du mot de passe pour se connecter
- ... mais la bonne pratique est d'utiliser nous-aussi une clef
SSH : avec une clef
... mais pourquoi ?
- Pas de mot de passe qui se balade sur le réseau
- Pas nécessaire de retaper le mot de passe à chaque fois
- Possibilité d'automatiser des tâches (clef sans mot de passe)
- (Plusieurs personnes peuvent avoir accès à un meme utilisateur sans devoir se mettre d'accord sur un mot de passe commun)
1 - Générer avec ssh-keygen -t rsa -b 4096 -C "commentaire ou description"
$ ssh-keygen -t rsa -b 4096 -C "Clef pour la formation"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/alex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): # Mot de passe
Enter same passphrase again: # (again)
Your identification has been saved in /home/alex/.ssh/id_rsa.
Your public key has been saved in /home/alex/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ZcAKHVtTXUPz3ipqia4i+soRHZQ4tYsDGfc5ieEGWcY "Clef pour la formation"
2 - Configurer la clef sur le serveur
- soit depuis le client avec
ssh-copy-id -i chemin/vers/la/clef user@machine
- soit depuis le serveur en rajoutant la clef dans
~/.ssh/authorized_keys- (generalement, l'admin vous demande votre clef)
3 - Utiliser la clef pour se connecter
$ ssh -i ~/.ssh/ma_clef alex@jaimelecafe.com
Enter passphrase for key '/home/alex/.ssh/ma_clef':
Last login: Mon Oct 8 19:46:32 2018 from 11.22.33.44
user@jaimelecafe.com:~$ █
- Le système peut potentiellement se souvenir du mot de passe pour les prochaines minutes, comme avec sudo
- Il peut ne pas y avoir de mot de passe (utilisation dans des scripts)
SSH : configuration côté client
- Le fichier
~/.ssh/configpeut être édité pour définir des machines et les options associées
Host jaimelecafe
User alex
Hostname jaimelecafe.com
IdentityFile ~/.ssh/ma_clef
- On peut ensuite écrire simplement :
ssh jaimelecafe

SCP : copier des fichiers
scp <source> <destination> permet de copier des fichiers entre le client et le serveur
- Le chemin d'un fichier distant s'écrit
machine:/chemin/vers/fichier - ou (avec un user) :
utilisateur@une.machine.com:/chemin/vers/ficier
Exemples :
$ scp slides.html bob@dismorphia.info:/home/alex/
$ scp bob@dismorphia.info:/home/alex/.bashrc ./
Divers
- Client SSH sous Windows : MobaXterm
sshfspour monter des dossiers distantsssh -Dpour créer des tunnels chiffrés (similaires à des VPNs)