Tomb - el sepulturero criptográfico
Jaromil @ Dyne.org
Hackmeeting 2019
NextEmerson CSA
Firenze

https://dyne.org/software/tomb
https://github.com/dyne/tomb
https://files.dyne.org/tomb
http://freshcode.club/projects/tomb

Una Tomba consiste di:
- File .tomb che e' il file grande con i dati
- File .key che e' la chiave per accedere ai dati
- Password da memorizzare per attivare la chiave
l'estensione non e' obbligatoria,
puo' essere una qualsiasi

Scava una tomba di 100 MiB:
:
tomb dig -s 100 loculo.tomb

Forgia una chiave (e scegline la password)
:
tomb forge -k loculo.key

Sigilla la tomba con la chiave
:
tomb lock -k loculo.key loculo.tomb

A questo punto il file `loculo.tomb`
puo' essere aperto solo in
presenza della chiave `loculo.key`
e conoscendone la password.

Apri loculo.tomb
su /media/loculo
usando loculo.key
:
tomb open -k loculo.key loculo.tomb

Per chiuderla
tomb close loculo
 oppure solo
tomb close

C'e' altro:
tomb resize
tomb index
tomb search
tomb list
tomb ps
tomb slam
...

!Quiz!
l'algoritmo crittografico
che protegge la chiave
con una password
e' simmetrico o asimmetrico?


Fully compliant with the FIPS 197 advanced encryption standard
published by NIST and with the following industry standards:
    Information technology -- Security techniques -- Encryption algorithms
        ISO/IEC 18033-1:2015 -- Part 1: General
        ISO/IEC 18033-3:2010 -- Part 3: Block ciphers
Tomb implementation is known to address at least partially issues raised in:
    Information technology -- Security techniques -- Key management
        ISO/IEC 11770-1:2010 -- Part 1: Framework
        ISO/IEC 11770-2:2008 -- Part 2: Mechanisms using symmetric techniques
    ISO/IEC 27005:2011 Information technology -- Security techniques
                       -- Information security risk management
    ISO/IEC 24759:2014 Information technology -- Security techniques
                       -- Test requirements for cryptographic modules

Usi un po' piu' avanzati di Tomb

Per la sicurezza dei dati
e' molto importante
tenere la chiave
separata dalla tomba
su differenti supporti fisici:
memorie di massa,
chiavette usbe o server online.

Con Tomb e' anche possibile
nascondere la chiave dentro
una JPEG
:
tomb bury -k loculo.key sorrento.jpeg
tomb open -k sorrento.jpeg loculo.tomb

Per tenere la chiave su un server
e usarla senza mai salvarla in locale
:
scp loculo.key io@casa.dyndns.net
wipe loculo.key
ssh io@casa.dyndns.net 'cat ./loculo.key' |
    tomb open loculo.tomb -k -`

Nuova feature di Tomb: l'Oracolo della Sfinge!


Tomb usando l'oracolo di sphinx
Libsphinx e' un'implementazione libera
del "Password-authenticated key agreement"
anche detto "PAKE"
https://github.com/stef/libsphinx
https://github.com/stef/pwdsphinx


Fatti coraggio, clona Tomb ed entra nell'anfratto
git clone https://github.com/dyne/tomb

Se sei un hipster e usi docker basta fare
:
cp -v extras/test/Dockerfile .
docker build -t dyne/tomb .
docker run -it --privileged dyne/tomb /bin/bash


Istalla le dipendenze di sistema
:
apt-get update -y -q && apt-get install -y -q \
zsh cryptsetup gawk libgcrypt20-dev steghide qrencode \
python python2.7 python3-pip python3-dev libsodium-dev \
libssl-dev make gcc g++ sudo gettext file bsdmainutils
:
per sphinx servono `python python2.7 python3-pip
 python3-dev libsodium-dev`
eppoi il pacchetto wheel in pip3
:
pip3 install setuptools wheel


Compila ed istalla sphinx
:
set -ex
git clone https://github.com/stef/libsphinx 
cd libsphinx
git submodule update --init --recursive --remote
cd src
sed -i 's|/usr/local|/usr|' makefile
make
sudo make install
ldconfig
pip3 install pwdsphinx
sudo mkdir -p /etc/sphinx


Istalla la configurazione di sphinx da dentro tomb
:
cp test/sphinx.cfg /etc/sphinx/config

[client]
verbose = False
address = 127.0.0.1
port = 2355
datadir = /tmp/.sphinx/

[server]
verbose = False
address = 127.0.0.1
port = 2355
datadir = /tmp/.sphinx/
keydir = /tmp/.sphinx/

[websphinx]
pinentry=/usr/bin/pinentry
log=


Fai partire l'oracolo di sphinx (un demone in python)
:
oracle &


usa il client sphinx per creare, ritrovare e cambiare le password
:
echo 'password principale'
  | sphinx create utente https://example.com ulsd 0
ulsd sono delle flags:
- `u` lettere maiuscole
- `l` lettere minuscole
- `s` simboli
- `d` numeri

Get
:
echo 'password principale'
  | sphinx get username https://example.com

Change + Commit
:
echo 'password principale'
  | sphinx change username https://example.com
echo 'password principale'
  | sphinx commit username https://example.com

Delete
:
sphinx delete username https://example.com


Proviamo a fare una tomba con sphinx
:
docker run -it --privileged dyne/tomb /bin/bash

Scava una tomba di 10MiB
:
tomb dig -s 10 test-sphinx.tomb

Crea una chiave usando l'oracolo di sphinx
:
tomb forge --sphx-user jaromil --sphx-host https://dyne.org


Blocca la tomba con la chiave nell'oracolo di sphinx
:
tomb lock --sphx-user jaromil --sphx-host https://dyne.org \
          -k test-sphinx.key test-sphinx.tomb 


Apri la tomba con la chiave nell'oracolo di sphinx
:
tomb open --sphx-user jaromil \
          --sphx-host https://dyne.org \
          -k test-sphinx.key test-sphinx.tomb

Domande?
Risposte?
!Quiz!
:^)

 ,--.
( o O)
 \|||

 ,--.
( x o)
 \|||

 ,--.
( x x)
 \|:|
