Best ways to make data impossible to change?

Problem: I need a dataset that can’t be changed unless multiple signatures are supplied. It has to be impossible to be changed by any hacker or vendor with millions of dollars incentivising them.

What is the most elegant way to do this?

The best solution I have so far is writing the data to an immutable blockchain. Then replacing the whole dataset with a new one when changes need to be made.

2 problems with that solution:

  1. It creates a 3rd party dependency with a cost to write data.
  2. The dataset endpoint needs to change each time there’s an update. And the code with that endpoint reference in it could be changed to reference another dataset.

Solutions?

Does it have to be impossible to change or impossible to change without you noticing? Also, if someone can change it (you, in this case), then anyone with enough resources can.

If I needed to have something protected with several private keys, I would encrypt the data with all of them in one place (to avoid eavesdropping) in order (if the encryption is not commutative). Then all those keys would be needed to read it back.

A better place to ask this would be https://crypto.stackexchange.com/

Thanks. I’ll move the thread.

But to answer your question…it needs to be changed only when multiple signatures are supplied. So long as the private keys that generated those signatures are never compromised, it needs to be impossible for unintended changes to happen.

Re: Your solution…Would it be possible to implement your solution using homomorphic encryption?

Maybe a homomorphically encrypted “black box”, with the keys & data. The blackbox would contain the endpoints. It would receive the inputs, generate signatures with those inputs, compare the inputs against the immutable data in the blackbox, then send the output only to a pre-defined endpoint.

Possible?

P.S. Moving this crypto.stackexchange.

Yes, but then you would probably need to maintain the order of ciphers used if the operation is not commutative.

Actually, I can’t think of a way to achieve this without using a homomorphic function.

I do not know anything about homomorphic encryption. But need to get up to speed on it fast. Any recommended resources to cut my learning curve would be appreciated.

Maybe wikipedia might help you https://en.wikipedia.org/wiki/Homomorphic_encryption

There also might be a MOOC about encryption somewhere. It might provide some structure to your learning. Or you can get a syllabus for an introductory cryptography course from some university.