# OpenSSL

## Chiffrement

### Générer une clé RSA

```bash
openssl genrsa -out priv.key <taille>
```

On ne peut pas générer une clé de 256bits (trop petit). Il est recommandé d'utiliser une clé de 2048 bits minimum.

Par défaut la clé est encodée en base64. Pour la voir :

```bash
openssl rsa -text priv.key
```

### Chiffrer une clé RSA

Chiffrer la clé avec aes :
```bash
openssl enc -a -aes-128-cbc -in priv.key -out privC.key
```

**Salt :** préfixe aléatoire pour ralentir les attaques par force brute.

On ne peut pas utiliser une clé telle quel, pour chiffrer, il faut la déchiffrer avant.

```bash
openssl genrsa -aes128 -out priv.key 2048
```

Génère une clé RSA déjà chiffrée avec AES et dans le bon format pour pouvoir chiffrer direct avec.

### Générer la clé public

Cela se fait à partir de la clé privée : 

```bash
openssl rsa -in priv.key -out pub.key
```

## Signature numérique

Signer un fichier avec une clé privée `priv.pem` :

```bash
openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey priv.pem -keyform PEM -in hash >signature
```

vérifier la signature du fichier avec la clé public `pub.pem` qui correspond à la clé privée `priv.pem` : 

```bash
openssl rsautl -verify -inkey pub.pem -pubin -keyform PEM -in signature
```