Replies: 5 comments 3 replies
-
Wow, it seems like a very cool project. However, I don’t understand what exactly is stored in RocksDB, and why did you need to patch it? What is the advantage over CryFS (except performance)? |
Beta Was this translation helpful? Give feedback.
-
Files are identified by unique IDs, and the underlying storage is only responsible for storing the content of that file by ID. The actual metadata of the files (filenames, directory hierarchy, permissions, etc.) is stored in RocksDB. Since RocksDB does not support encryption (actually they have one implementation, but is rather limited and only capable of really basic encryption), I patched it to support custom encryption. Advantages over CryFS, if leave aside performance (which is really significant according to a comparison), are, to be honest, scarce and trivial:
As a side note, Bijou supports file size obfuscation (which is one of the main features of CryFS) as an optional functionality. However, the implementation in Bijou is less tested and is theoretically slower since CryFS seems to employ an advanced algorithm to manage file blocks, while Bijou only uses basic data structures. |
Beta Was this translation helpful? Give feedback.
-
OK but why not encrypt the values manually before storing them in the database, or simply use another database that supports encryption? I ask this question because I believe that software patching is generally a bad practice when developing open-source projects in the long run by a small team. And this stems from my experience: DroidFS actually uses 4 patched projects that I maintain myself next to. The custom storage backend is a very interesting feature as it could allow DroidFS to work with remote volumes, for example with cloud providers applications. |
Beta Was this translation helpful? Give feedback.
-
Firstly the encryption / decryption would then be too frequent and might impact the performance. Second, for storing directory structures in the database, there are two ways I can think of:
Overall, simply encrypting the whole database stood out to me as the best approach. I'd like to clarify a little bit about "patching". Theoretically speaking, I'm not patching RocksDB, but instead |
Beta Was this translation helpful? Give feedback.
-
Okay, I see. This is more of an extension than a patch.
Sounds fair. But why didn't you choose to use a database that supports encryption natively, and possibly even one written in rust? |
Beta Was this translation helpful? Give feedback.
-
Some days ago I was seeking for a cross-platform way to store data securely. At that time, I couldn't find such a project and assumed there was no proper way to accomplish this, eventually leading me to develop my own solution. So I made Bijou, a cross-platform and flexible encrypted file system. The library currently has a FUSE interface.
I discovered this project while making a Android app for Bijou. This project is great! So rather than starting from scratch, I convinced myself to extend this existing project.
Some advantages over existing implementations that I could think of include:
Drawbacks exist as well. For instance, Bijou is not as thoroughly tested as other implementations and should be considered experimental.
I look forward to hearing your opinions on this. Feel free to ask me details regarding Bijou, and it's totally okay if you suggest some features / tweaks for BIjou. It's still in the early development stage anyway.
Beta Was this translation helpful? Give feedback.
All reactions