Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Client-keyed Encryption #6

Open
countvajhula opened this issue Jul 6, 2023 · 0 comments
Open

Client-keyed Encryption #6

countvajhula opened this issue Jul 6, 2023 · 0 comments

Comments

@countvajhula
Copy link
Collaborator

One approach to privacy would be to store data so that only the client knows who has the data. But a better way is to encrypt the data using keys maintained by each client so that the data is publicly available but only the client can decipher it.

It's possible that the index (mapping filenames to blocks), and the block catalog (mapping blocks to filenames), should be maintained by each client since, indeed, each client may have their own filenames for the same data. Of course, the data being encrypted means that even if two clients store the same file on the network, these would be treated as distinct by the filesystem since the actual stored data would be different.

For a file F, the cycle with encryption would look like:

F - encrypt -> F' - encode -> F'' - decode -> F' - decrypt -> F

For the same reasons as #5, encoding for error recovery should be the last step, done after encryption.

Including compression, the full cycle would look like:

F - compress -> F' - encrypt -> F'' - encode -> F''' - decode -> F'' - decrypt -> F' - decompress -> F

It's important to compress before encrypting because encryption yields data that is uniformly distributed and contains minimum redundancy, making it effectively incompressible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant