I need to distribute symmetric AES key into number of end points which will use it to decrypt data. The AES key will be the same on all end points, it is not possible to generate unique on every end point.

I am thinking about using asymmetric keys and certificates stored on USB cryptographic token to provide access to encrypted AES key and decrypt it with private key.

Is there any cryptographic scheme that can ensure that N of private keys will be able to decrypt AES key (assuming that the cryptogram of AES is same on all endpoints)?

The AES should be encrypted by public key and distributed.


1 Answer 1


This is easy, if you are willing to take a huge storage overhead, just encrypt the AES key with all the public keys and store the ciphertexts along with the public key hashes for retrieval.

So let $K$ be your AES key. Let $(pk_i,sk_i)$ be your, e.g. RSA, public key encryption keypairs, where the private key is unextractable on a smartcard. Then you want to have a data-structure, which doesn't reveal any information about $K$ by itself, but allows for retrieval of $K$ using any $sk_i$.

The solution to this is simple: Store $\large{\parallel}^n_{i=1}$$\left(h(pk_i),E_{pk_i}(K)\right)$, that is a list of pairs of public key hashes and the corresponding encrypted AES key, on each endpoint for an arbitrary (potentially insecure) hash function $h$ and a secure public key encryption scheme $E$ e.g. RSA-OAEP. The idea being that when you want to access the key with any given smartcard, you compute the hash of the public key you have on your card and iterate over the list of public key hashes, to find the ciphertext most relevant to you. If you wouldn't do that and would just try to decrypt each ciphertext, which is a possibility, then this would be quite slow, because smart-cards are not exactly known for their speed when it comes to private-key operations.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.