So, if I get this right, ZeroDB ends up being a service to persist (to it) a flat dictionary of encrypted buckets.<p>When a given bucket is requested and decrypted by the client, it will have the data as well as the references that let the client treat them as a B-tree, presumably because the clients put them there?<p>I'm taking that assumption from "The server doesn’t know how individual objects are organized within a tree structure, or whether they even belong to a tree structure at all."<p>What does this mean for adding a node? Does the client have to traverse the whole B-tree (requesting log(n) entries) down to the point of addition? How about rebalancing, etc? It seems like the clients would be wholly responsible for maintaining the tree.
Interesting that it's built on ZODB. For those that aren't familiar, in essence ZODB gives your Python application a 'magic dictionary' which automatically persists any keys written to it. It was probably my ignorance, but while I thought the concept was interesting I ultimately abandoned using it since I couldn't find any out-of-band way of inspecting saved data. Eg, sometimes you want to run some ad hoc SQL to see what is stored in a relational database but the only way to access data in ZODB (AFAICT) is within the application itself.<p>It looks like ZeroDB abstracts away these issues, luckily. Is it intended to be a full-scale application data store, or something more specialized like a secrets store?
<i>"The server doesn’t know how individual objects are organized within a tree structure, or whether they even belong to a tree structure at all.
...
When a client performs a query, it asks the server to return buckets of the tree as it traverses it, in a just-in-time fashion"</i><p>The server can however infer quite a lot from the order of bucket request, especially which buckets constitute a tree.
How does this work without exposing the client keys in server memory? You still need to send the server your private key to query and decrypt data you specifically didn't make via other connected clients, right?<p>Edit: I phrased that wrong. How do you usefully query other user's data with only your keys?
This is a very exciting project, but since the use cases are security related, I am hesitant to use a closed source project. Are there any plans to open source this?