Dynamische verschlüsselte Container mit Split Files für Cloud

CyberNation_RX

Cadet 4th Year
Registriert
Jan. 2016
Beiträge
101
Guten Abend zusammen,

ich suche eine Möglichkeit auf einem FUSE Cloud FS einen verschlüsselten Container anzulegen (min AES-128 oder gleichwertig), welcher dann gemountet werden soll. Um den Zugriff zu verbessern, sollte jeweils nur max. 50MB große Dateien angelegt werden. Wobei dann, wenn benötigt eine weitere Datei angelegt wird.

Also
container.file1
container.file2
container.file3
.....

Kennt jemand da eine Möglichkeit. Wäre euch seeehr dankbar.

Ein Bonus wäre es, wenn Paritäten ähnlich einem Raid5 System unterstützt werden würden. Also wenn container.file3948 fehlt, sollten die Daten aus den anderen wiederhergestellt werden.

Edit:Eine virtuelle Festplatte mit vmdk Dateien könnte eine Lösung sein. Diese unterstützen auch Verschlüsselung. Aber es gibt bestimmt einen besseren Weg. :rolleyes:
Ergänzung ()

Für die Problematik mit den Paritäten habe ich eine Lösung:

Hierbei werden mehrer Container Files zu einem Raid hinzugefügt:

dd if=/dev/zero of=/tmp/img1 bs=1024k count=1024
dd if=/dev/zero of=/tmp/img2 bs=1024k count=1024
dd if=/dev/zero of=/tmp/img3 bs=1024k count=1024
losetup -f /tmp/img1
losetup -f /tmp/img2
osetup -f /tmp/img3
mdadm -C /dev/md/test -l 5 -n 3 /dev/loop0 /dev/loop1 /dev/loop3
mkfs.ext4 /dev/md/test
mount /dev/md/test /mnt/tmp


Somit wäre die Datenmenge schonmal auf n Dateien verteilt. Allerdings lassen diese sich schlecht dynamisch erweitern
 
Zuletzt bearbeitet:
Ist zwar kein klassischer Container, sondern dateibasiert, aber wäre EncFS was für dich?

Hat natürlich den Nachteil, dass man nach wie vor die ungefähre Größe sowie die Anzahl der Dateien und Ordner sehen kann, funktioniert aber problemlos mit Netzwerk-Mounts. Ich benutze das, um Daten per sshfs auf meinen Homeserver zu packen, damit da gar nicht erst unverschlüsselte Daten ankommen.
 
Zuletzt bearbeitet:
Hi, danke für den Tipp. :)

EncFS habe ich bereits ausprobiert. Ist leider Sicherheitstechnisch nicht ganz so gut https://defuse.ca/audits/encfs.htm.
Ergänzung ()

Habe es jetzt nochmal mit der neusten Version getestet aber die Performance ist einfach extrem schlecht und es entstehen öfters I/O Fehler.
Ergänzung ()

Möglich wäre halt auch eine verschlüsselte VM laufen zu lassen und die VDisks in der Cloud anzulegen. Aber ich fürchte dies wäre eindeutig zuviel Overhead :(
 
Zuletzt bearbeitet:
CryFS wäre genau das richtige. Ich persönlich habe bisher allerdings die Finger davon gelassen, weil nur ein einziger Entwickler dahinter steckt und mir nicht ganz klar ist, wie ausgereift die Software schon ist und mir die Unterstützung von OS X fehlt. Es gibt auch eine GUI, die noch diverse andere Dateisysteme unterstützt. Einen Vergleich dieser Dateisysteme gibt es hier: https://nuetzlich.net/gocryptfs/comparison/.
 
@fax668
Hey VIELEN DANK! Die Übersicht ist echt gut :love:

Ich habe CryFS gerade gestestet und es scheint relativ gut zu laufen.
dd if=/urandom bs=1M count=100
104857600 bytes (105 MB, 100 MiB) copied, 12,0999 s, 8,7 MB/s
fs -> cryfs (fuse) -> acd_cli(fuse)


Ich werde in den nächsten Tagen mal ein paar TB übertragen und schauen wie stabil das ganze läuft bevor ich meine Daten migriere.


BTW: Hast du mit gocryptfs oder securefs Erfahrungen?
 
Leider nicht. Gocryptfs funktioniert noch nicht richtig unter OS X, sieht sonst aber ganz vernünftig aus. Securefs wird von einem einzelnen Entwickler in Peking geschrieben, da fehlt mir leider das Vertrauen. Vielleicht sollte ich mir doch mal Cryptomator anschauen. Das kann schon alle großen Desktopbetriebssysteme und iOS und eine Android App soll gerade in der Entwicklung sein. Momentan schiebe ich meine Daten noch mit einem möglichst kleinen Truecrypt Container in die Cloud. Auf Dauer macht das aber keinen Spaß.
 
Ubuntu und ChromeOS verwenden standardmäßig ecryptfs. Das verwendet kein FUSE sondern ist direkt im Kernel drin, und performt generell etwas besser als die FUSE-Lösungen.

Ansonsten kannst du auch aus 50 MB großen Dateien ein Software-RAID mit verschlüsseltem ext4 o.ä. machen.
 
Bei CryFS habe ich leider das Problem, dass bei stärkerer Belastung der Mountpoint nach einiger Zeit die Verbindung verliert, was es für meine Zwecke sehr ungeeignet macht.

Ich habe GoCryptFS nochmal ausprobiert, dieser ist aber nicht kompatible mit dem acd_cli Fuse Provider. Ich bekomme jede Menge Schreib u. Lesefehler bei Binärdateien. :heul:

@chithanh
Lässt sich das Software Raid mit 50MB Dateien den automatisch und ohne großen Performanceverlust automatisch skalieren? :watt:
Wenn ja wäre das eine Super Lösung.
 
Nein, automatisch geht das nicht. Wenn dein ext4 voll ist, neue(n) 50 MB Container im Sync-Verzeichnis anlegen und mdadm --grow gefolgt von resize2fs aufrufen.
 
@CyberNation_RX

Vielleicht hilft es dir, wenn du dir ein Skript schreibst, welches immer wieder überprüft wie voll das Raid ist. Sollte es dann bei z.b 90% sein, dann wird ein neuer Container erzeugt und dieser in den Raidverbund hinzugefügt.
 
Seit Linux 4.1 hat ext4 übrigens auch eine eigene Dateiverschlüsselung direkt eingebaut. Wenn ich das richtig verstanden habe, wird die auch von Google in Android 7.0 eingesetzt.
 
@dalini
mmh, das mit dem Skript habe ich auch schon überlegt. Hierbei gäbe es allerdings viele Dinge zu beachten. Die neuen Container müssen schneller erstellt werden können, als die max. Schreibgeschwindigkeit. Da ich mehrere TB an Daten speichern möchte, werden zig Tausende Loop Devices entstehen (weiß gerad nicht ob es eine Limitierung gibt, oder wie es mit der Performance aussieht). Außerdem muss das Raid beim Neustart automatisch wiederhergestellt werden usw. .Das scheint mir dann doch eine relativ fehleranfällige Methode zu sein. Obwohl die Grundidee echt gut ist.

@fax668
Richtig, das müsste einiges an Performance rausholen und deutlich schneller als encfs usw. sein. Leider wüsste ich nicht wie ich das auf ein Cloudbasiertes FUSE Filesytem anwenden sollte.
 
Soweit ich weiß geht mdadm je nach RAID-Typ nur bis 256 Geräte, da müsstest du testen ob das mit deinem gewünschten Typ auch geht.

Prinzipiell kannst du die Schreibgeschwindigkeit mit dem Prüfintervall deines Skripts multiplizieren, und dann weißt du wieviel freier Platz stets mindestens vorhanden sein muss. Wenn dieser Wert unterschritten wird, vergrößerst du das Array bis wieder genug frei ist.

Aber wie gesagt, alles ziemlich viel Handarbeit und ecryptfs bekommt es auch ohne diesen Aufwand hin.
 
Zurück
Oben