2014-07-07 109 views
9

我正在研究學術項目,其中一部分將透明加密(AES-CTR)應用於存儲在磁盤上的選定Ext4文件(我已經可以將它們標記爲已加密新的ioctl等)。修改由Ext4文件系統寫入磁盤的數據

爲了做到這一點,我需要找到最適合在數據上調用我的算法的位置,同時讀取或寫入設備。由於文件系統提供的大量功能(如日誌,內聯,o-direct,擴展盤區),我現在正在努力尋找適當的解決方案 - 我需要對原始數據進行操作,因爲它存儲在數據塊。

我腦子裏想的一些想法,一個是從sys_read(...)sys_write(...),更精確地ext4_file_write(...)generic_file_aio_read(...)中的某處CALLPATH掛鉤 - 但不會與mmap工作,可能不是要走的路。另一種方法是通過ext4_writepages(...)ext4_readpages(...)(和它的回調,因爲它是異步的),當內存頁被寫入磁盤時。

因爲它不是生產版本,只是一個概念驗證 - 我可以關閉一些Ext4功能以簡化任務。使用該算法時,我需要能夠訪問inode的xargs(存儲密鑰id的位置),並且要知道塊編號以便生成[en/de]加密中使用的初始向量。你對這個問題有什麼想法和/或建議嗎?

回答

2

有許多替代方案可以爲此設計解決方案。

一種方法是使用Wrapfs(可堆疊文件系統),它將幫助您攔截從VFS到底層物理文件系統的調用。您可以選擇在調用底層文件系統調用之前或之後添加鉤子。

這樣做的好處是。 1.您的代碼可以與任何物理文件系統無縫協作。 2.您不需要更改/修改原始文件系統代碼。 3.您將擁有完全不同的模組。

所以調用層次會是什麼樣子, 應用< => VFS < => Wrapfs < =>物理FS(EXT3/EXT4 /等)

+0

非常感謝您的回答!這似乎是一個好方法,但我不確定是否可以接受,因爲它只是修改Ext4本身 - 顯然使事情變得更加困難...... –

+0

使用我提到的方法,您無需修改​​現有的EXT4實現,這是使用wrapfs的很酷的東西。請讓我知道,如果你需要進一步澄清這一點。 – Mavla

0

FUSE(Filesystems in userspace)是一個很好的選擇,因爲它更容易在用戶空間中比在內核空間中實現。您有多種語言供您選擇。這種方法會容易得多。

+0

謝謝,這似乎是一個有趣的方法。但是,我的主要觀點是在內核空間中執行它,並擴展了ext4fs,正如我已經指出的那樣。它是操作系統分支的一部分。 –

+0

我認爲馬伕拉試圖說你應該重新考慮改變規格。如果你的老師說他想要你修改Ext4,那可能是一個建議,而不是一個要求。我經常在大學談判變化沒有問題。 – ArekBulski