# [Kernel] Tip: Encrypted Filessystems mit Kernel 2.4.22

## drfunfrock

Da dieser Kernel zwar die Algorithmen, aber nicht die Cryptoloop enthält, holt man sich den patch "patch-cryptoloop-jari-2.4.22.0" von www.kernel.org und legt ihn im Verzeichnis /usr/src/linux-2.4.22 ab.

Dann ein "patch -p 1 < patch-cryptoloop-jari-2.4.22.0" und die Sourcen sind gepatcht. Schnell noch kontrollieren, ob in den Blockdevices die Flags für das Loop-Device und die Cryptoloop gesetzt sind. Ach ja, auch das Flag für die gewünschte Verschlüsselungsmethode sollte gesetzt sein. Ich ziehe twofish vor, da blowfish ein Vorgänger ist und andere ausser AES nicht so sicher sind. 

Nach der Installation des Kernels, benötigt man noch das Packet util-linux.2.12. Ohne geht es nicht!

Ich habe gleich eine ganze Partition verschlüsselt: 

> modprobe cryptoloop

> modprobe twofish

> losetup /dev/loop0 /dev/hd<x> -e twofish

Password: *******

> dd if=/dev/hd<x> of=/dev/loop0 bs=64k conv=notrunc

# Warte jetzt eine kleine Weile

> mount /dev/loop0 /mnt/cryptdisk

Die Patition verfügte also über ein funktionierendes Dateisystem. Nun möcht man das ganze ohne ein losetup in Betrieb setzen. Daher wird in die Datei "/etc/conf.d/cryptoloop" mit folgendem Inhalt beschrieben:

loop=/dev/loop0 cipher=twofish  device=/dev/hd<x>

Anschliessend muß noch die Datei "/etc/init.d/crypto-loop" mit diesem Inhalt beschrieben:

--------- CUT ----------------------

#!/sbin/runscript

# Copyright 1999-2003 Gentoo Technologies, Inc.

# Distributed under the terms of the GNU General Public License v2

# Author: Matthew Kennedy <mkennedy@gentoo.org>

# $Header: /home/cvsroot/gentoo-src/rc-scripts/init.d/crypto-loop,v 1.2 2003/01/06 21:32:43 azarah Exp $

loopconf="/etc/conf.d/crypto-loop"

depend() {

	 need checkroot modules

	 before localmount

}

start() {

	local status="0"

	ebegin "Starting crypto loop devices"

	if [ -e ${loopconf} ]

	then

		egrep "^loop" ${loopconf} | \

		while read loopline

		do

			eval ${loopline}

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

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

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

			then

				einfo "  Loop ${loop} on device ${device} (cipher ${cipher}, key size ${keysize}): "

#				if ! /sbin/losetup -e ${cipher} -k ${keysize} ${loop} ${device} ${other}

				if ! /sbin/losetup -e ${cipher} ${loop} ${device} ${other}

				then

					ewarn "Failure configuring ${loop}.  Skipping."

					status=1

                                else

                                	mount ${loop}

				fi

			else

				ewarn "  Loop ${loop} on device ${device} are already configured"

			fi

		done

	fi

	ewend ${status} "Failed to start some loop devices."

	# We do not fail if some loop devices did not start ...

	return 0

}

stop(){

	local status="0"

	ebegin "Stopping crypto loop devices"

	if [ -e ${loopconf} ]

	then

		egrep "^loop" ${loopconf} | \

		while read loopline

		do

			eval ${loopline}

			configured=` /sbin/losetup ${loop} | awk -v "FS=:;DEV=${loop}"  '( $1 == DEV ) {print "yes"}' `

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

			then

                        	umount ${loop}

				einfo "  Remove Loop ${loop} on device ${device} "

				if ! /sbin/losetup -d ${loop}

				then

					ewarn "Failure configuring ${loop}.  Skipping."

					status=1

				fi

			else

				ewarn "  Loop ${loop} on device ${device} not configured"

			fi

		done

	fi

	ewend ${status} "Failed to shutdown some loop devices."

	# We do not fail if some loop devices did not shutdown...

	return 0

}

# vim:ts=4

--------- CUT ----------------------

Anschliessend kann das verschlüsselte Dateisystem mit einem 

	"/etc/init.d/crypto-loop start"

gestartet werden. Nun das Password sollte immer per Hand eingeben werden.

Warnung: Ich habe nicht überprüft, wie das Passwort im Speicher ehalten wird oder ob es gar ausgelagert werden kann.

[mod edit]

Titel angepasst

Beforegod

----------

## piefke

hatte vor kurzem auch ne reiserfs partition per twofish verschluesselt.

ebenfalls kernel 2.4.22 .. naja ein systemabsturz und das dateisystem war nichmehr wiederherzustellen :(

konnte den fehler mit hartem reboot sogar reproduzieren ..

naja trotzdem viel spass beim verschluesseln ;)

aso: welches dateisystem hast du verschluesselt?

----------

## drfunfrock

 *piefke wrote:*   

> hatte vor kurzem auch ne reiserfs partition per twofish verschluesselt.
> 
> ebenfalls kernel 2.4.22 .. naja ein systemabsturz und das dateisystem war nichmehr wiederherzustellen 
> 
> konnte den fehler mit hartem reboot sogar reproduzieren ..
> ...

 

ReiserFS  :Smile: 

Ich denke, das Problem ist der harte Reboot der verschlüsselten Partition. Wenn ein Block geschädigt ist, kann nicht mehr entschlüsselt werden und ReiserFS kann sein Journal nicht mehr ausnützen. Ist wohl doch besser eine Datei als nenes Filesystem zu nehmen und zu verschlüsseln, da dann ein journaling Filesystem seine Stärken ausspielen kann. Da muß ich meine Partition erstmal entschlüsseln....

Es scheinen die meisten nicht zu verschlüsseln. Die Zahl der Tips ist hier sehr begrenzt. Das es keinen einheitlich abgesegneten Patch für den Kernel 2.4.22 gibt ist schon sehr dumm. Ich hoffe die Situation verbessert sich mit dem Kernel 2.6.0. Auf jeden Fall werde ich P2P und meine EMail damit absichern.

----------

## mikkk

Hallo,

Die Idee mit dem Skript ist echt gut! Ich hab im Forum noch 'ne ähliche Anleitung gefunden. Wer will, kann sich das ja mal unter

https://forums.gentoo.org/viewtopic.php?t=31363

anschauen. Da wird auch beschrieben, wie man die root-Partition verschlüsseln kann. (Obwohl die Anleitung den Eindruck macht, als sei sie zu einem grossen Teis aus dem Loop-AES-README abgeschrieben  :Wink: )

mikkk

----------

## jay

Der Cryptoloop patch ist Bestandteil des 2.6er kernels - lohnt sich vielleicht mal diesen näher anzuschauen.

----------

## drfunfrock

 *mikkk wrote:*   

> Hallo,
> 
> Die Idee mit dem Skript ist echt gut! Ich hab im Forum noch 'ne ähliche Anleitung gefunden. Wer will, kann sich das ja mal unter
> 
> https://forums.gentoo.org/viewtopic.php?t=31363
> ...

 

Ich würde es nicht machen, weil es beim einem Hardreset zu einem grossen Problem kommt, da Schreibzugriffe nicht mit Transaktionen abgefangen werden. Verschlüsseln würde ich nur eine Datei mit einem virtuellem Dateisystem wie beim Anlegen einer CD. Dann sind Schreibzugriffe vernünftig abgefangen, falls es zu einem Totalabsturz kommt. Ich muß also den Tip umarbeiten.

----------

## drfunfrock

 *jay wrote:*   

> Der Cryptoloop patch ist Bestandteil des 2.6er kernels - lohnt sich vielleicht mal diesen näher anzuschauen.

 

Du brauchst neue Modutils und die sind noch maskiert.  Wenn nach dem nächsten rsync die in das gewöhnliche Update verschwinden, einfach noch mal ein unmerge machen. 

Ich würde den 6. Kernel noch nicht zum Arbeiten einsetzen, da mit Test7 der erste brauchbare herausgekommen ist. Ansonsten hast du recht, interessant wird er werden.

----------

## mikkk

 *Quote:*   

> 
> 
> Ich würde es nicht machen, weil es beim einem Hardreset zu einem grossen Problem kommt, da Schreibzugriffe nicht mit Transaktionen abgefangen werden. Verschlüsseln würde ich nur eine Datei mit einem virtuellem Dateisystem wie beim Anlegen einer CD.
> 
> 

 

Richtig sicher ist das aber nicht! Wenn man Container verschlüsselt und dann das Original löscht, ist die unverschlüsselte Datei ja immer noch vorhanden. Das Problem hat man bei Partitionen nicht.

Ausserdem hat man noch Murks mit temporären Dateien. Daher würde ich zumindest noch /var und /tmp mitverschlüsseln. Deshalb ist meiner Meinung nach Deine erste Idee viel besser. Gegen das Hardreset würde ich einfach Backups empfehlen. Schliesslich kann ein Dateisystem auch kaputtgehen, wenn es nicht verschlüsselt ist  :Wink: .

mikkk

----------

## drfunfrock

 *mikkk wrote:*   

>  *Quote:*   
> 
> Ich würde es nicht machen, weil es beim einem Hardreset zu einem grossen Problem kommt, da Schreibzugriffe nicht mit Transaktionen abgefangen werden. Verschlüsseln würde ich nur eine Datei mit einem virtuellem Dateisystem wie beim Anlegen einer CD.
> 
>  
> ...

 

Das Loopdevice legt keine temporären Dateien an, sondern verschlüsselt nur Blöcke im Speicher.Da ich mehrere Partitionen habe und nicht das Root-Device verschlüssele kann ich mir die Datei als Virtuelles Dateisystem leisten, denn 30GB sind etwas problematisch zu sichern. So sichert mir ReiserFS die Schreibzugriffe ab und das ReiserFS im Dateisystem, die Daten. Zudem sollte man Originale "richtig" mit einem wipe  löschen oder die Datei gleich am richtigen Ort anlegen. Im Falle von MLDonkey kann ein spezielles TMP-verzeichnis angelegt werden. Bei KMail und anderen Email-Programmen sieht die Sache in der Tat problematischer aus. KDE benutzt tmp.

In der Tat sollte man daher tmp und var auch in das verschlüsselte Verzeichnis legen. Ich werde die Tips noch mal updaten.

----------

## mikkk

Ein Backup von 30GB ist wirklich nicht ganz ohne. Aber könnte man nicht die Vorteile von Datei und Partition verbinden, indem man

- erst eine Partition anlegt

- dann ein Filesystem darin anlegt

- und dann eine Datei im Filesystem anlegt, die so gross ist wie die Partition?

Diese Datei kann man dann als Container verwenden. Das sollte zumindest leichte Geschwindigkeitsvorteile gegenüber der "normalen" Datei bringen.

mikkk

----------

## drfunfrock

 *mikkk wrote:*   

> Ein Backup von 30GB ist wirklich nicht ganz ohne. Aber könnte man nicht die Vorteile von Datei und Partition verbinden, indem man
> 
> - erst eine Partition anlegt
> 
> - dann ein Filesystem darin anlegt
> ...

 

Wo ist der Unterschied? Im Ernst genau das hatte ich vor. Da ReiserFS aber beim finden von Dateien sowieso schnell ist, habe ich damit auch keine Probleme. 

Die Datei in eniem ReiserFS anlegen und dann ein neues ReiserFS in der Datei anlegen, natürlich verschlüsselt. Da ist loop sozusagen nur eine Art Tor, in welchem die Bits gewürfelt werden.

----------

## Adrastos

Hi.

Hm... ich hab meinen 2.4.20 Kernel gepatcht und kann trotzdem kein "Loop Crypto support" installieren. Beim kompilieren tritt folgender fehler auf:

cryptoloop.c:64:3: warning: #warning LO_CRYPT_CRYPTOAPI not (yet) defined in ker

nel header

cryptoloop.c: In function `cryptoloop_init':

cryptoloop.c:107: `LOOP_IV_SECTOR_SIZE' undeclared (first use in this function)

cryptoloop.c:107: (Each undeclared identifier is reported only once

cryptoloop.c:107: for each function it appears in.)

cryptoloop.c: At top level:

cryptoloop.c:156: parse error before "loop_iv_t"

cryptoloop.c:157: warning: function declaration isn't a prototype

cryptoloop.c: In function `cryptoloop_transfer':

cryptoloop.c:159: `lo' undeclared (first use in this function)

cryptoloop.c:163: `size' undeclared (first use in this function)

cryptoloop.c:167: `cmd' undeclared (first use in this function)

cryptoloop.c:173: `raw_buf' undeclared (first use in this function)

cryptoloop.c:174: `loop_buf' undeclared (first use in this function)

cryptoloop.c:189: `IV' undeclared (first use in this function)

cryptoloop.c:189: `LOOP_IV_SECTOR_SIZE' undeclared (first use in this function)

cryptoloop.c: In function `cryptoloop_ioctl':

cryptoloop.c:237: `LOOP_IV_SECTOR_SIZE' undeclared (first use in this function)

make[3]: *** [cryptoloop.o] Error 1

make[3]: Leaving directory `/usr/src/linux-2.4.20-gentoo-r7/crypto/drivers'

make[2]: *** [first_rule] Error 2

make[2]: Leaving directory `/usr/src/linux-2.4.20-gentoo-r7/crypto/drivers'

make[1]: *** [_subdir_drivers] Error 2

make[1]: Leaving directory `/usr/src/linux-2.4.20-gentoo-r7/crypto'

make: *** [_dir_crypto] Error 2

Weiß wer was das heißt?

----------

## drfunfrock

Scheint mir, du hast die Aktivierung des Loop-Dev vergessen  :Smile:  Ansonsten nimm gleich den Kernel 2.4.22.

----------

## Adrastos

Du meinst loop-dev für Blockdevices? Hab ich aktiviert und compiliert funkt trotzdem nicht   :Sad: 

----------

