Skip to content

Encrypted Data Storage #8

@Pertempto

Description

@Pertempto

Background

In general we don't want to have the liability of storing our user's data, but in some situations I think the convenience factor of having data easily synced across devices is going to force us to store data on our servers if we want people to actually use our apps

Goals

When we do store user data, I think we should aim for a few things

  • anonymized
    • as system admins, when we access the file storage we should not be able to easily tell who's files are whos
  • encrypted
    • we should aim to store the data in such a way that we can not access the data, even with direct access to the files. everything should be encrypted by a key only known by the user
    • for convenience, we can look into ways of storing the key on the user's device so that they don't have to enter it every time they access an app, but we should be very careful to make sure that is done in a secure way

Ideas

  • Create a dedicated repo called files
  • Create a dedicated service on files.kwila.cloud that handles files for the apps that require it
  • The files service should have an API which apps can make requests to for saving and loading files
    • The v1 API could be SUPER simple
      - GET https://files.kwila.cloud/api/v1/files/:uuid
      - get an encrypted file by UUID
      - the decryption obviously must happen on the client side in order for the file contents to actually be private
      - POST https://files.kwila.cloud/api/v1/files/:uuid
      - save an encrypted file by UUID
      - we need some auth token for verifying that they are the original owner of the file, so that not just anyone can access it
      - POST https://files.kwila.cloud/api/v1/files
      - create a new file entry. return the UUID and auth token
  • Research existing systems that we could build on
    • Even if we build our own system from scratch, we should use other systems for inspiration

Other Notes

I'm sure there is systems out there that we can build on for this. It's an important thing to at least get the basic system in place before we go crazy implementing apps. We can always improve it later.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions