Ich arbeite an dem akademischen Projekt, das teilweise eine transparente Verschlüsselung (AES-CTR) auf die ausgewählten Ext4-Dateien auf der Festplatte anwendet (ich kann sie bereits mit neuen ioctl usw. als verschlüsselt markieren.) / p>
Um dies zu tun, muss ich den besten Ort finden, um meinen Algorithmus auf die Daten zuzugreifen, während er vom Gerät gelesen oder geschrieben wird. Aufgrund der großen Anzahl von Features (wie Journal, Inline, O-Direct, Extents), die vom Dateisystem zur Verfügung gestellt werden, kämpfe ich nun seit einigen Tagen um die richtige Lösung zu finden - ich muss die Rohdaten bearbeiten, wie sie gespeichert sind die Datenblöcke.
Ich hatte einige Ideen im Hinterkopf, man sollte sich irgendwo auf dem Callpath von sys_read(...)
und sys_write(...)
, genauer gesagt ext4_file_write(...)
und generic_file_aio_read(...)
einhaken - aber das würde nicht funktionieren mit mmap
, und Wahrscheinlich ist das nicht der richtige Weg. Ein anderer Ansatz wäre, dies über ext4_writepages(...)
und ext4_readpages(...)
(und es ist Callback, da es async ist) zu machen, wenn die Speicherseiten auf die Festplatte geschrieben werden.
Weil es keine Produktionsversion ist, nur ein Proof of Concept - ich kann einige Ext4-Funktionen ausschalten, um die Aufgabe zu vereinfachen. Während der Verwendung des Algorithmus muss ich auf die Xargs des Inodes zugreifen können (wo die Schlüssel-ID gespeichert ist) und ebenso die Blocknummer kennen, um den Anfangsvektor zu erzeugen, der in [en / de] cryption verwendet wird. Haben Sie Ideen und / oder Vorschläge zu diesem Thema?
Es gibt viele Alternativen, um die Lösung dafür zu entwerfen.
Eine Möglichkeit könnte sein, Wrapps (ein stapelbares Dateisystem) zu verwenden, mit denen Sie den Aufruf von VFS an das zugrunde liegende physische Dateisystem abfangen können . Sie können Ihren Hook vor oder nach dem Aufruf des zugrunde liegenden Dateisystemaufrufs hinzufügen.
Vorteile von diesem Weg wäre. 1. Ihr Code kann nahtlos mit jedem physischen Dateisystem arbeiten. 2. Sie müssen den ursprünglichen Dateisystemcode nicht ändern / ändern. 3. Sie werden ein völlig anderes Modul haben.
So würde die Anrufhierarchie aussehen, Anwendung & lt; = & gt; VFS & lt; = & gt; Wrappfs & lt; = & gt; Physische FS (ext3 / ext4 / etc)
FUSE ( Dateisysteme im Benutzerbereich ) ist eine gute Alternative, da es im Benutzerbereich einfacher implementiert werden kann als im Kernel-Bereich. Sie haben eine große Auswahl an Sprachen zur Auswahl. Dieser Ansatz wird viel einfacher sein.
Tags und Links c cryptography linux-kernel filesystems ext4