# Tip: DM-Crypt verschlüsseln der Festplatte

## drfunfrock

Nachdem cryptoloop aus dem Kernel verschwinden soll und die Implementierung sowieso als problematisch gilt habe dem DM-Crypt installiert und eine Platte mit AES verschlüsselt. 

Das Prinzip ist folgendes:

[Filesystem]<->[Device-Mapper]<->[Partition-Device]

 ........................ ^         ^

 ........................ |          |

 ........................ v         v

......................[ AES, Blowfish ...]

Man legt mit Cryptsetup ein Mapper-Dev (AES-verschlüssselt) an z.B. für /dev/hdf7:

#> cryptsetup -y create "hdf7"  "/dev/hdf"

Password: .......

Anschliessend das Filesystem einrichten:

#> mkreiserfs /dev/mapper

Es ist allerdings für eine opt. Sicherheit besser die Partition mit mit Zufallswerten zu beschreiben. 

Anschliessend Partition mounten:

#>mount -t reiserfs /dev/mapper /mnt/cryptoplatte

Das wars.... nein, es fehlt noch das Init-Skript:

---- CUT -----

#!/sbin/runscript

dmcryptconf="/etc/conf.d/dm-crypt"

dmapper() {

    /sbin/cryptsetup $1 $2 $3

}

depend() {

	need checkroot modules

	need localmount

	provide dmcrypt

}

start() {

	ebegin "Starting device mapper and mount crypto device"

	if [ -e ${dmcryptconf} ]

	then

	    local IFS="#"

	    for loopline in `egrep "^dmmap" ${dmcryptconf}`

	    do

		eval ${loopline}

		local configured="`awk -v MOUNT="${dmdir}" \

		    '($2 == MOUNT) { print "yes" }' /proc/mounts`"

		if [ "${configured}" != "yes" ]

		then

		    if ! dmapper status ${dmname} | grep "inactive" > /dev/null

		    then

		      eend 1 "dev-map ${dmname} at ${dmmap} already exists!"

		    else

			einfo "map dev-map ${dmname} on ${dmmap}"

			if ! dmapper create ${dmname} ${dmmap}

			then

			    eend 1 "Can't setup dev-map ${dmname} on ${dmmap}"

			else

			    einfo "mount /dev/mapper/${dmname}"

			    if ! mount /dev/mapper/${dmname} ${dmdir}

			    then

				dmapper remove ${dmname}

				eend 1 "Can't mount /dev/mapper/${dmname} to ${dmdir}!"

			    else 

				eend 0

			    fi

			fi

		    fi

		else

		    eend 1 "crypto harddisk already configured"

		fi

	    done

	fi

	eend $?

}

stop() {

    ebegin "Stopping device mapping(s) and unmount cryptodevice(s)"

    if [ -e ${dmcryptconf} ]

    then

        local IFS="#"

        for loopline in `egrep "^dmmap" ${dmcryptconf}`

        do

    	    eval ${loopline}

	    local configured="`awk -v MOUNT="${dmdir}" \

		    '($2 == MOUNT) { print "yes" }' /proc/mounts`"

	    if [ "${configured}" == "yes" ]

	    then

		umount ${dmdir}

		dmapper remove ${dmname}

	    else

		eend 1 "dev-map is not configured"

	    fi

	done

    fi

    eend $?

}

---- CUT -----

Nun noch die Konfigurationsdatei für belieg viele Mapping:

---- CUT -----

# /etc/conf.d/dm-crypt:

# Specify dm-crypt configurations here. The format of this file is

# shown in the following commented-out example. One line per mapping

# configuration.

dmmap=/dev/hdf7 dmname=hdf7 dmdir=/mnt/cryptoplatte

---- CUT -----

Und wer mit mldonkey arbeitet kann dann noch in dessen Init-Skript  in der Funkftion depend() eintragen:

---- CUT -----

	need dmcrypt

---- CUT -----

Doc Funfrock

----------

## Lenz

Muss man dann beim Mounten immer ein Passwort eingeben oder wie funktioniert das?

----------

## drfunfrock

 *Lenz wrote:*   

> Muss man dann beim Mounten immer ein Passwort eingeben oder wie funktioniert das?

 

Ja, oder du holst dir das Passwort aus einer Datei. 

Die Reihenfolge ist so:

1) Device  auf Mapper-Dev mappen und Passwort angeben (Init-Skript)

2) Mapper-Dev mounten

----------

## Lenz

Kann man das nicht so einrichten, dass der das beim Systemstart nicht mounted, und sobald man die Platte mounten will, fragt er nach dem Passwort?

Was bringt mir eine verschlüsselte Platte, wenn sie bei jedem Systemstart automatisch gemounted wird. Später mit init-script mounten ist ja auch nicht so das Wahre...

Ideal wäre. wenn man das verschlüsseln könnte, sodass er, sobald man "mount /mnt/cryptodrive" eingibt, nach dem Passwort fragt. Wäre sowas theoretisch bzw. auch praktisch möglich?

-- Lenz

----------

## drfunfrock

 *Lenz wrote:*   

> Kann man das nicht so einrichten, dass der das beim Systemstart nicht mounted, und sobald man die Platte mounten will, fragt er nach dem Passwort?
> 
> Was bringt mir eine verschlüsselte Platte, wenn sie bei jedem Systemstart automatisch gemounted wird. Später mit init-script mounten ist ja auch nicht so das Wahre...
> 
> Ideal wäre. wenn man das verschlüsseln könnte, sodass er, sobald man "mount /mnt/cryptodrive" eingibt, nach dem Passwort fragt. Wäre sowas theoretisch bzw. auch praktisch möglich?
> ...

 

Ja, wenn du z.B. 

#>/etc/init.d/dm-crypt start

eintippelst, dann geschieht das von "Hand". Das von mir vorgeschlagene Skript mountet auch die Partition. Und wenn du das configfile entsprechend pflegst, auch alle eingetragenen Partitionen auf einmal.

----------

## Dellerium

Ich habe mal ne Frage dazu .. das sieht mir sehr ähnlich zu Loop AES aus ... ist der einzige Vorteil in Zukunft der, das der Device Mapper in Zukunft gleich im Kernel drin ist, während man für Loop AES extra nen KernelModul kompilieren muss ? Oder gibt es noch mehr Vorteile ? 

ps.: Ich hab Loop AES im Einsatz .. deshalb frage ich  :Wink: 

----------

## drfunfrock

 *Dellerium wrote:*   

> Ich habe mal ne Frage dazu .. das sieht mir sehr ähnlich zu Loop AES aus ... ist der einzige Vorteil in Zukunft der, das der Device Mapper in Zukunft gleich im Kernel drin ist, während man für Loop AES extra nen KernelModul kompilieren muss ? Oder gibt es noch mehr Vorteile ? 
> 
> ps.: Ich hab Loop AES im Einsatz .. deshalb frage ich 

 

Nachdem was ich gelesen habe ist die Implementation problematischer, weil auch z.B. die Supernode verschlüsselt wird, so das einem Known-Plaintext-Angriff nichts im Wege steht. Insgesamt scheint die Konstruktion für die Cryptoloop problematischer zu sein

Der Device-Mapper ist sauberer aufgebaut als die Loop-Devices (wird als hack bezeichnet)  und flexibler, da weder Namen noch Anzahl beschränkt sind. Die Konstruktion des Scripts war tatsächlich einfacher als bei einer Cryptoloop. 

Selbst Device-Resizing ist mit dem Device-Mapper einfach möglich.

Und warum sollte ich mir ein zusätzliches Modul in den Kernel holen, wenn es nicht notwendig ist?

Lese hier nach: 

http://www.saout.de/misc/dm-crypt/

----------

## regime

Hallo,

das mit der Verschlüsselung ist ne feine Sache, aber weiss einer von Euch, ob man den Krypto-Chip auf einem ViaM10000 Board zum laufen bekommen kann, so dass es nicht nur über die CPU geht? 

Gruß

regime

----------

## drfunfrock

 *regime wrote:*   

> Hallo,
> 
> das mit der Verschlüsselung ist ne feine Sache, aber weiss einer von Euch, ob man den Krypto-Chip auf einem ViaM10000 Board zum laufen bekommen kann, so dass es nicht nur über die CPU geht? 
> 
> Gruß
> ...

 

Im Prinzip bräuchtest du einen Treiber. Wenn es einen geben sollte, dann ist er bestimmt für die Cryptoloop.

----------

## leuenberger

Gibt es eine Möglichkeit Dateien zu verschlüsseln wie beim Cryptoloop? So wie im folgenden Beispiel:

```
> dd if=/dev/urandom of=/home/raysoft/.cryptfile bs=1M count=20

> losetup -e twofish /dev/loop0 /home/raysoft/.cryptfile

Available keysizes (bits): 128 192 256

Keysize:

Passwort:

> mke2fs /dev/loop0

> losetup -d /dev/loop0
```

Ich habe es folgendermassen versucht:

```
> dd if=/dev/urandom of=/home/raysoft/.cryptfile bs=1M count=20

> cryptsetup -c twofish -y create test /home/raysoft/.cryptfile
```

Funktioniert leider nicht. Es wird ein Block-Device erwartet.

Gruss Reto

----------

## leuenberger

Ich habe es herausgefunden:

```
> dd if=/dev/urandom of=/home/raysoft/.cryptfile bs=1M count=20 

> losetup /dev/loop7 /home/raysoft/.cryptfile 

> cryptsetup -c twofish -y create test /dev/loop7

Enter passphrase:

Verify passphrase:

> mke2fs /dev/loop7

> mount /dev/loop7 /mnt
```

Und das ganze wieder abbauen:

```
> umount /mnt

> cryptsetup remove test

> losetup -d /dev/loop7
```

Eine fstab-fähige Version habe ich noch nicht gefunden.

Gruss Reto

----------

## drfunfrock

 *leuenberger wrote:*   

> Gibt es eine Möglichkeit Dateien zu verschlüsseln wie beim Cryptoloop? So wie im folgenden Beispiel:
> 
> ```
> > dd if=/dev/urandom of=/home/raysoft/.cryptfile bs=1M count=20
> 
> ...

 

Es soll gehen, wenn man vorher ein loop-device mit der Datei verbindet, um dieses dann zu mappen  :Smile: 

Doc Funfrock

----------

## MrPrez

Ich habe leider festplattentechnisch nicht den Platz dazu, mich würde aber extrem die Geschwindigkeit im Gegensatz zum cryptoloop interessieren. Ich verschieb ab und an mal paar Dateien und da macht sich ein Geschwindigkeitsvorteil schon bemerkbar. Also wäre für Erfahrungsberichte sehr dankbar!

----------

## ian!

 *Lenz wrote:*   

> Kann man das nicht so einrichten, dass der das beim Systemstart nicht mounted, und sobald man die Platte mounten will, fragt er nach dem Passwort?
> 
> Was bringt mir eine verschlüsselte Platte, wenn sie bei jedem Systemstart automatisch gemounted wird. Später mit init-script mounten ist ja auch nicht so das Wahre...

 

 *drfunfrock wrote:*   

> Ja, oder du holst dir das Passwort aus einer Datei.

 

Kleiner Tipp hierzu am Rande: Bei einem großen Elektromarkt ("ich bin doch nicht blöd" und mache hier noch "für die Mutter aller Schnäppchen" Werbung  :Wink: ) gibt es z. Zt. sehr günstig (~13 EUR) USB-Sticks, die sich ausgezeichnet hierfür eignen.

Nur mal so als Gedanke...  :Wink: 

----------

## Tazok

 *drfunfrock wrote:*   

> 
> 
> Nachdem was ich gelesen habe ist die Implementation problematischer, weil auch z.B. die Supernode verschlüsselt wird, so das einem Known-Plaintext-Angriff nichts im Wege steht. Insgesamt scheint die Konstruktion für die Cryptoloop problematischer zu sein

 

Nur zum Verständnis: Meinst du mit Supernode den Superblock der Partition, oder liege ich da falsch?

----------

## |T5|

ebenfalls nur zum verständnis: Ich verstehe http://kerneltrap.org/node/view/2433 so, dass dmcrypt derzeit noch voll kompatibel zu cryptoloop devices und daher auch anfällig gegen die genannten tabellenbasierten wörterbuchattacken ist. Sehe ich das richtig?

----------

## Haldir

Wer loop-aes am laufen hat, dem würd ich atm nicht empfehlen extra auf dm-crypt umzusteigen, sondern lieber noch ein paar Kernel versionen warten  :Wink: 

loop-aes scheint auch bei einigen noch ein gutes Stück schneller zu laufen als dm-crypt

----------

## Baad3r

http://v4.livegate.net/wipe/crypto.html

Lt. diesem Review ist dm-crypt nicht wirklich sicher. Ich bin seit einiger Zeit auf der Suche nach einer guten Krypto-Lösung und werde daher wohl loop-AES mit twofish einsetzen.

----------

## Haldir

Dieses Review is imho für die Katz, das hat eher was mit Auflistung zu tun.

Lest euch nur mal den Punkt bei SafeGuard easy durch, bei der Anmerkung "This explanation seems to be reasonable. If they really cracked Safeguard Easy, why did they crack only 5 of the 16 computers?",

fragt man sich doch, vielleicht hatten die User einfach bei den 5 Rechnern leichte/kurze Passwörter ?...

Anyway, Dictionary attacks funktionieren auch ohne Probleme mit loop-aes...

Grundsätzlich ist dm-crypt durch die cryptoloop-Kompatibilität etwas weniger "sicher" als die anderen, aber mit passendem Password/Passphrase sicher genug für alle Anwendungen und die Sicherheitsprobleme sind auch überall aufgelistet.

Die Annahme loop-aes wär viel sicherer, bei gleicher Wahl der Parameter ist grundlegend falsch

----------

## Baad3r

Naja auch dazu gibt es verschiedene Meinungen.

http://lkml.org/lkml/2004/5/14/75

http://www.security-forums.com/forum/viewtopic.php?p=97828

 *Quote:*   

> Anyway, Dictionary attacks funktionieren auch ohne Probleme mit loop-aes... 
> 
> Die Annahme loop-aes wär viel sicherer, bei gleicher Wahl der Parameter ist grundlegend falsch

 

*schulterzuck* Mag sein oder nicht, für meine Zwecke ist es ausreichend. Mit genug Aufwand sind wahrscheinlich sowiso die meisten Sachen knackbar.

----------

## DaFire

wer gleichzeitig auch noch windows verwendet dem wuerd ich auch zu loop-aes raten...

http://www.scherrer.cc/crypt/

ich brenn backups mit loop-aes auf dvd und kann die fein unter windows und linux mounten  :Smile: 

----------

## blubbi

mmmh, when using the in it-script I get the following erros:

```
root@enterprise $ /etc/init.d/dm-crypt start

 * Starting device mapper and mount crypto device...

/sbin/runscript.sh: line 2: ($2 == MOUNT) { print "yes" }: command not found

 * map dev-map my-data on /dev/sdb1

Enter passphrase:

 * mount /dev/mapper/my-data                                                                                        [ ok ]

[~]

```

```

root@enterprise $ /etc/init.d/dm-crypt stop

 * Stopping device mapping(s) and unmount cryptodevice(s)...

/sbin/runscript.sh: line 2: ($2 == MOUNT) { print "yes" }: command not found

 * dev-map is not configured                                                                                          [ !! ]

                                                                                                                                      [ !! ]

[~]

```

Any Ideas what it could be?

Ouups is ja deutsch  :Smile: 

Ja, hat wer ne Idee, woran das liegen kann? Ich bin leider net so der Held im scripten.

Vielen Dank schon mal.

----------

## differential

Hallo,

wie sieht denn deine Zeile in dem Init-Skript aus? Du musst das \ Zeichen wechlassen und einfach durchschreiben. Das \ soll eigentlich nur deutlich machen, das es alles in eine Zeile gehört.

Vielleicht liegt es daran. Ansonsten poste doch mal dein Skript.

----------

## blubbi

lol, das wars .... Danke

Mann sollte scripte doch nicht nachts um 3 Uhr copy und pasten....

So aber mal ne andere frage, wie gebe ich nun mehrere verschlüsselte laufwerke in /etc/conf.d/dem-crypt an?

```

# /etc/conf.d/dm-crypt:

# Specify dm-crypt configurations here. The format of this file is

# shown in the following commented-out example. One line per mapping

# configuration.

dmmap=/dev/sda1 dmname=my-files dmdir=/mnt/100GB

dmmap=/dev/sdb1 dmname=my-data dmdir=/mnt/250GB

```

So klappt es nicht... mir gehen die Ideen aus.

Danke für eure hilfe.

----------

## blubbi

Keiner da der ne idee hat warum das obige script aus der /etc/conf.d/dm-crypt immer nur das letze Mapping nimmt und alle anderen ignoriert?

----------

## schuppi

 *blubbi wrote:*   

> Keiner da der ne idee hat warum das obige script aus der /etc/conf.d/dm-crypt immer nur das letze Mapping nimmt und alle anderen ignoriert?

 

doch

 *Quote:*   

> 
> 
>  local IFS="#"
> 
> for loopline in `egrep "^dmmap" ${dmcryptconf}`
> ...

 

was da ausgewertet wird sind alle zeilen zusammen, und eval nimmt daher natuerlich die letzten definitionen. hack: jede zeile in der config mit einem "#" abschliessen, dann passt es wieder mit dem IFS und die loop macht was sie soll

----------

## blubbi

Oh man, wie blind kann man sein! Das "#" hab ich glatt übersehen.

Jetzt funktioniert es.

Vielen Dank

----------

## schuppi

 *blubbi wrote:*   

> Oh man, wie blind kann man sein! Das "#" hab ich glatt übersehen.
> 
> Jetzt funktioniert es.
> 
> Vielen Dank

 

Das "#" ist im saout.de-wiki auch nicht in der config dringewesen (wahrscheinlich hat es der autor immer nur mit einem dmcrypt ausprobiert). ich habs auch dort korrigiert damit nicht noch mehr damit probleme haben  :Smile: 

gruss,

 schuppi

----------

## simex

hallo

ich hab jetzt das gentoo-forum schon ne ganze weile durchsucht und nichts dazu gefunden. bin ich denn mittlerweile allein mit kernel 2.4.?

mein problem: ich hab bisher meine home-partition mit cryptoloop und aes256 verschlüsselt. seit kernel 2.4.28-r8 ist cryptoloop aber aus den kernelquellen rausgeflogen. der nachfolger soll ja dm-crypt sein. nun hab ich aber bisher nur anleitungen für dm-crypt gefunden, die sich auf kernel 2.6 beziehen. in kernel 2.4.28 gibt s aber in der kernelconfig keinen devicemapper unter raid/lvm.

heißt das jetzt, dass ich gezwungen bin, loop-aes zu benutzen? weil es keine dm-crypt-unterstützung für kernel 2.4 gibt?

----------

## Haldir

ja, scheint so

----------

## blubbi

Warum wechselst du nicht langsam mal zu nem 2.6er Kernel?

Gibts dafür nen bestimmten Grund?

Gruß

blubbi

----------

## flash49

Zu dem Thema gab es schon einmal hier ein HOWTO (und das sogar in deutsch).  :Cool: 

Das, was cryptsetup als Passwort bezeichnet, ist eigendlich der Verschlüsselungskey. Warum es keine gute Idee ist sein Passwort als Key zu nehmen: http://clemens.endorphin.org/publications

Auch interessant scheint Luks zu sein.

----------

## schachti

 *flash49 wrote:*   

> 
> 
> Das, was cryptsetup als Passwort bezeichnet, ist eigendlich der Verschlüsselungskey.
> 
> 

 

AFAIK ist das nicht ganz richtig, auf das Paßwort, das man eingibt, wird die ausgewählte Hash-Funktion angewendet, bei dm-crypt ist das per default ripemd160, wenn man nichts anderes gewählt hat.

----------

## Neo_0815

Öhm - es gibt doch schon länger ein "crypto-mount" Ebuild, nehmt das doch einfach.

```

*  sys-apps/crypto-mount

      Latest version available: 0.6.1a

      Latest version installed: 0.6.1a

      Size of downloaded files: 3 kB

      Homepage:    http://www.ssm-server.de/

      Description: Script for automatically mount crypted partitions

      License:     GPL

```

MfG

----------

## Haldir

 *schachti wrote:*   

>  *flash49 wrote:*   
> 
> Das, was cryptsetup als Passwort bezeichnet, ist eigendlich der Verschlüsselungskey.
> 
>  
> ...

 

Yup, das Passwort wird noch gehashed, default per ripemd160

----------

## misterjack

 *Neo_0815 wrote:*   

> Öhm - es gibt doch schon länger ein "crypto-mount" Ebuild, nehmt das doch einfach.
> 
> ```
> 
> *  sys-apps/crypto-mount
> ...

 

Dein lokaler Overlay zählt nicht  :Wink:  Aber das ebuild gibts hier: https://forums.gentoo.org/viewtopic.php?t=242488

----------

## Neo_0815

Oh ich vergaß  :Wink:  Danke.

MfG

----------

## blubbi

also irgendwie funzt das script hier nicht, ich kann einfach keinen fehler finden.

Es funktiniert nur mit einem device. Mit 2 einträgen kommt dann folgendes:

Ach ja und noch was, wie kann ich in das script einbauen, das er mir das passwort aus einer Datei holt

ich hätte mir das dann in der config so gedacht, das man noch ein parameter angibt z.B. dmkey=/mnt/usbstick/dmkey.key

dann müsste das script mit der "-p" option arbeiten, aber ich habe es auf grund mangelnder scripting kentniss nicht hinbekommen.

Ganz davon abgesehen geht das script bei mir eh nicht.

 *Quote:*   

> 
> 
> jh-server root # /etc/init.d/dm-crypt start
> 
>  * Starting device mapper and mount crypto device...
> ...

 

und das ist der eintrag in der config:

 *Quote:*   

> 
> 
> dmmap=/dev/md1  dmname=dmdata   dmdir=/mnt/data#
> 
> dmmap=/dev/md0  dmname=dmfiling dmdir=/mnt/filing#
> ...

 

Grüße

blubbi

----------

## simex

 *blubbi wrote:*   

> Warum wechselst du nicht langsam mal zu nem 2.6er Kernel?
> 
> Gibts dafür nen bestimmten Grund?
> 
> 

 

 :Confused:  hm naja. eigentlich dachte ich immer, der 2.6er hat so  paar macken, weil mir immer so viele forentthreads zu bestimmten problemen mit 2.6 unter die augen gekommen sind dazu. außerdem weiss ich nicht, ob ich da nicht so einiges umstellen muss, z.b. das usb-system.....und dann bin ich da bisher andersrum rangegangen: warum sollte ich wechseln? (never touch a running system) es muss doch einen grund geben, dass auch der 2.4er noch weiter gepflegt wird.

nun ja, jetzt scheint es ja einen grund zum wechseln zu zu geben. :Rolling Eyes: 

----------

## simex

 *simex wrote:*   

> 
> 
> nun ja, jetzt scheint es ja einen grund zum wechseln zu zu geben.

 

oder vielleicht auch nicht?  :Very Happy: 

bin grade beim emerge -uD world und da tauchten ungefragt folgende ebuilds mit in der liste auf:

```
cryptsetup

device-mapper
```

ich werds mal probieren. am ende gehts doch mit 2.4.

----------

## schachti

 *simex wrote:*   

> 
> 
> und dann bin ich da bisher andersrum rangegangen: warum sollte ich wechseln?
> 
> 

 

Wegen besserer Performance, oder wegen dm-crypt zum Beispiel.  :Wink: 

----------

