

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer

I'm wondering if it would be a problem to split up a 256 bit AES-Key into two 16-Byte blocks and distribute it, to implement some kind of a four-eyes-principle (you need two persons to decrypt a message)?

I know there are some encryption schemes which use multiple secrets, but none of them are part of the .NET Framework and I think it would be better to use the AES-.NET Classes than to try to implement some of these schemes by myself.

share|improve this question
up vote 4 down vote accepted

It is not a problem necessarily, but the better approach is to encrypt the master key with X number of keys sequentially. This reveals fewer details about the encrypted information depending on encryption mode and also supports any number of required participants. Each individual or location then stores an entire key that is used in series to decrypt the master key.

share|improve this answer

Generic solution for sharing a secret is Shamir's algorithm. This is not hard to implement, but it requires some mathematical knowledge. I am not aware of a ready-to-use open-source .NET implementation.

An easier solution is to use a hash function. If you have n people who each own a "secret element", then just concatenate all the secret elements in due sequence, hash the lot with SHA-256, and take the first 128 bits of the SHA-256 output as key for AES-128. This scales to more than two shares, and avoids any potential issue with a "partially known" AES-256 key; also, it lets you use the much more sensible AES-128.

There is no known issue with a half-known 256-bit AES key, but AES is known to be somewhat flaky with regards to related-key attacks which, from a general overview, somewhat look to be potentially relevant. To be brief, it seems somewhat risky to rely on AES being robust against partially revealed keys.

share|improve this answer

Your Answer


