I'm thinking about the scenario of using a set of (potentially untrusted) hosts to store (potentially private) files. Think something like distributed backup where you contribute some disk space and in exchange you get to store N copies of your data in other nodes. The issue is how to combine key management + deduplication and I saw the following approach somewhere which looked really promising:

  • split up the data in fixed-size chunks (not really a necessity, just makes the balancing of the storage simple)
  • hash the chunk using SHA-512 for example
  • using the hash as key, encrypt the chunk and store it

The idea is that if two people have the same data (like "kernel32.dll" for a particular version / patch level of Windows for example), they will independently come up with the same chunks and the data will be deduplicated without them having to coordinate. At the same time if you don't have access to the data, you can't compute the key (hash) and thus this is usable for private data also.

Do people see any problem with the security of this scheme?