Hello Goblins,
I would like to build an application able to persist secrets and to allow only authorized users to read them , Goblins always seemed the perfect way to achieve that. I read a couple of times the manual and Heart of Spritely but I wrote little code yet.
This is what I have in mind please let me know whether I’m on the right track or not. The POC I’m implementing should work like this:
user1@localhost:~ my-tool create --name secret-name --value secret-value --share-with=user2
created ~/secret.enc
user1@localhost:~ my-tool read ~/secret.enc --name secret-name
secret-value
user1@localhost:~ sudo -u user2 my-tool read ~/secret.enc --name secret-name
secret-value
user1@localhost:~ sudo -u user3 my-tool read ~/secret.enc --name secret-name
error: user3 doesn't have the capability to read
This example is assuming that all of the three users have already generated some kind of private key or identity file stored at a known location (probably under $XDG_CONFIG_HOME
or something like that) that will allow the tool to map a linux user to a capabilities set. All of this is pretty vague for now, I understand, but it is just to give you the vision of where I’d like to go so that maybe my questions make more sense.
My questions for you Goblins are about persistence, access control, and privacy. My understanding is that a sealed object’s content is private and there are a lot of mentions of public key cryptography in the Goblins manual in the sealers sections, so:
- is a sealed object cryptographically private? as in it takes a comparable amount of time to brute force it or violate it as rsa or ecdsa? I understand that these are battle tested and Goblins is very new so there may be undiscovered security issues but my question is really of principle. if I serialize and store into a linux plain file a sealed object containing a password, is it a security concern?
- is it possible with current Goblins serialization/persistence to serialize a sealed object that can be unsealed by two different object (e.g. user1 and user2 in the example above) which should themselves be serialized/persisted somehow (the private key/identity file in the example)?
- are sealers even the way to implement this? am i completely out of track and there is a much more simpler way? please do let me know
Thank you for your awesome work and for being awesome persons from what I could gather,