Crypto

Charger tous les modules crypto

Pour les charger: for i in $(ls -1 /lib/modules/2.6.32-5-686/kernel/crypto | sed 's/.ko//' ) ; do echo "Loading $i ..." ; modprobe $i ; done

Pour voir ce qu'on a de dispo: grep -E '^type\s+: cipher' -A 3 -B 6 /proc/crypto | grep -E '^name|m..\s|bloc|--'

En mode liste: grep -E '^type\s+: cipher' -A 3 -B 6 /proc/crypto | grep -E '^name' | awk '{print $3}' | sort | uniq

Luks

Pour afficher les slots:
cryptsetup luksHeaderBackup /dev/sda5 --header-backup-file /tmp/luks-header
Pour ajouter une cle:
cryptsetup luksAddKey /dev/sdb1
cryptsetup luksAddKey /dev/sdb1 -S <slot number>

# SI on veut que la clé soit un fichier:
cryptsetup luksAddKey  /dev/sdb1 <file>
Pour supprimer un slot (il faut mettre le secret directement):
cryptsetup luksRemoveKey /dev/sdb1

# Si on a oublié le MdP, on peut supprimer le slot:
cryptsetup luksKillSlot /dev/sdb1 <slot number>

# Si on veut tester la passphrase:
cryptsetup luksOpen --test-passphrase --key-slot 0 /dev/sda2 && echo correct
Si on veut voir toutes les clés losrque les FS sont montés:
dmsetup table --showkeys 

# Pour dumper la master key avec les infos de header:
cryptsetup luksDump --dump-master-key /dev/sdb1

Pour extraire le header:

cryptsetup luksHeaderBackup /dev/sda5 --header-backup-file /tmp/luks-header

# Pour le restaurer:
cryptsetup luksHeaderRestore <device> --header-backup-file <file>

#Pour verifier si les headers sont present:
cryptsetup -v isLuks /dev/sdb2

Source:

Extra

BulletProof CryptSetup: https://skrilnetz.net/bullet-proof-data-encryption-with-luks-and-a-detached-header/

Benchmark à la mano avec dm-crypt

Un petit script que j'ai amélioré (source: https://github.com/ckujau/scripts/blob/master/benchmarks/cryptsetup_benchmark.sh). Attention, ça formate la partition !!!

#!/bin/sh
#
# (C)2013, lists@nerdbynature.de
# Poor man's dm-crypt benchmark
#

# DEBUG=echo

if [ ! -b "$1" -o -z "$5" ]; then
        echo "Usage: $0 [device] [cipher] [size] [runs] [size]"
        echo "Examples:"
        echo "`basename $0` /dev/sdu1 aes-cbc-plain 128 1024"
        echo "`basename $0` /dev/sdu1 aes-cbc-essiv:sha256 448 512"
        exit 1
else
        DEVICE="$1"
        CIPHER="$2"
          SIZE="$3"
          RUNS="$4"
     FILE_SIZE="$5"
            MD=bench
            FS=ext4
           CSV=/root/bench.csv
fi

# Cleaning
umount -R /mnt 2>/dev/null
cryptsetup remove $MD 2>/dev/null

# Creation
printf "Creating crypted volume and filesystem ... "
$DEBUG head -c $SIZE /dev/urandom > /tmp/$MD.key
$DEBUG cryptsetup -c $CIPHER -s $SIZE -d /tmp/$MD.key create $MD $DEVICE || exit 1
## $DEBUG cryptsetup status $MD || exit 1
mkfs -t $FS -F /dev/mapper/$MD > /dev/null
mount /dev/mapper/$MD /mnt

printf "$CIPHER / $SIZE : \n"

# Benchmark - write
i=0
while [ $i -lt $RUNS ]; do
        printf " - Write bench $i: "
        $DEBUG sysctl -qw vm.drop_caches=3

        RESULT=$(dd if=/dev/zero of=/mnt/file_${i} bs=1M count=$FILE_SIZE 2>&1 | tail -n 1)

        echo $RESULT
        printf "%s;%s;%s;%s;write;%s %s %s\n"  $(date "+%Y-%m-%d %H:%M:%S") $CIPHER $SIZE $(echo -ne $RESULT | awk '{print $1 ";" $3 " " $4 ";" $6 ";" $8 " " $9 }') >> $CSV
        i=$((i+1))
done

# Benchmark - read
i=0
while [ $i -lt $RUNS ]; do
        printf " - Read pass $i: "
        $DEBUG sysctl -qw vm.drop_caches=3

        RESULT=$(dd of=/dev/null if=/mnt/file_${i} bs=1M count=$FILE_SIZE 2>&1 | tail -n 1)

        echo $RESULT
        printf "%s;%s;%s;%s;read;%s %s %s\n"  $(date "+%Y-%m-%d %H:%M:%S") $CIPHER $SIZE $(echo -ne $RESULT | awk '{print $1 ";" $3 " " $4 ";" $6 ";" $8 " " $9 }') >> $CSV
        i=$((i+1))
done

# Clean
umount -R /mnt
cryptsetup remove $MD

Pour l'appeler:

./cryptsetup_benchmark.sh /dev/sda2 aes-cbc-plain 128 10 2048

Pour tester différents algos:

Générer une liste des algos possibles

Pour savoir comment construire la chaine de charactere de l'algo, il faut voir cette page: https://code.google.com/p/cryptsetup/wiki/DMCrypt , mais en gros, ça corresponds à ça: <cipher[:keycount]-chainmode-ivmode[:ivopts]> <key> <iv_offset> <device path> <offset> [<#opt_params> <opt_params>]

La liste de IV est fixe: plain plain64 essiv benbi

Pour les chainmod: xts cbc

Pour la fiabilité, il faut prendre xts.

Page last modified on April 01, 2017, at 06:01 AM EST