Show HN: ETSD – Transmit sensitive data encrypted across your organization
adontz 2021-08-19 11:39:33 +0000 UTC [ - ]
spapas82 2021-08-19 12:13:18 +0000 UTC [ - ]
The result is that if the server is compromised no data should be leaked.
c22 2021-08-19 13:07:17 +0000 UTC [ - ]
spapas82 2021-08-19 13:21:54 +0000 UTC [ - ]
Also I'm really not sure if such a determined attacker could be stopped somehow... Any suggestions?
c22 2021-08-19 14:10:35 +0000 UTC [ - ]
With this system, specifically, active attacks will be quite rewarding to any potential attacker because secrets are saved indefinitely and every user-key they steal will allow the recovery of multiple secrets. Since the rewards are high you should expect the chances of active attack to be heightened.
In order to mitigate against this you need the enduser to be able to verify the proper functioning of the encryption/decryption apparatus. Usually this is accomplished with separate binaries, checksums, reproducible builds, and etc. Of course any solution will be vulnerable during updates of the encryption/decryption endpoints, often an out-of-band channel is used to transfer the update or the verification checksum.
These challenges are particularly fraught when attempting to implement a secure system using in-browser javascript. Not only is the entire encryption/decryption algorithm redistributed frequently, regardless of whether or not it has changed, but the tooling around authentication and validation of browser-resident javascript is currently very weak. In addition to compromise of the server, the system is still vulnerable to local attacks as well as a whole host of in-transit attacks that more static e2e systems don't have to worry about (e.g. someone forgets to enable https, or happens to connect through a suss proxy).
Perhaps some sort of javascript pinning could help to alleviate some of the threat-surface, but to my knowledge no major browsers support anything like that.
spapas82 2021-08-19 14:43:28 +0000 UTC [ - ]
However, let's suppose that I packed the client functionality to an electron app (i.e executable with some signature) so the .js files doing the encryption/decryption would not be downloaded from the server each time but they would reside inside the electron app. Would that be better from a security standpoint against the attacks you mention or I'm missing something?
upofadown 2021-08-19 12:29:12 +0000 UTC [ - ]
spapas82 2021-08-19 12:40:52 +0000 UTC [ - ]
So if an authority loses access to its private key then they need to generate a new key pair and start over. Of course they will lose access to all the files that are stored in the server and have been encrypted with that key's pair (unless they have already downloaded them and saved then in a different place).
spapas82 2021-08-18 10:59:27 +0000 UTC [ - ]
I'm submitting it in case anybody finds it useful for his organization but also if somebody would like to take a peek and give me any security related feedback.
Thank you!
unixhero 2021-08-19 09:54:29 +0000 UTC [ - ]
Cheers
spapas82 2021-08-19 10:00:20 +0000 UTC [ - ]
henryackerman 2021-08-19 09:46:41 +0000 UTC [ - ]
upofadown 2021-08-19 12:15:37 +0000 UTC [ - ]
The whole thing is generally more secure then many of these file transfer things due to the use of the passphrase. The idea of strongly protecting the secret key against local attacks is a PGPism that tends to be forgotten these days.
spapas82 2021-08-19 12:17:43 +0000 UTC [ - ]
spapas82 2021-08-19 09:59:44 +0000 UTC [ - ]
We wanted to use PGP because it's a well known and heavily tested solution. Also, the openpgp.js library is great and makes it really easy to encrypt/decrypt the messages to the client side without the need to really mess with security stuff. Finally, the users would want to have access to their old messages in the future so using ephemeral keys for each transmission wasn't really possible.