Take the 2-minute tour ×
Cryptography Stack Exchange is a question and answer site for software developers, mathematicians and others interested in cryptography. It's 100% free, no registration required.

Does there exist a cipher that can be encrypted twice with two different keys and then decrypted twice using either key first?

For example:

Plaintext is "Lemons are great!"
Encode with Key #1
Encode with Key #2
Decode with Key #1
Decode with Key #2
Result is "Lemons are great!"

To my understanding TLS does something like this, but I'm not sure. I've also tried reading about elliptical curve cryptography to no avail (of useful understanding, that is). I've also tried my own tests with OpenSSL but I feel like it's salting things and therefore is making it not work.

I understand this is possible with a ROT(n), but that's of course not considered cryptographically secure.

share|improve this question
2  
Use a stream cipher –  mikeazo Jul 15 at 23:04
1  
Welcome to crypto, Osmium. –  Maarten Bodewes - owlstead Jul 15 at 23:57
    
Thanks, @owlstead –  Osmium USA Jul 16 at 0:27

1 Answer 1

up vote 3 down vote accepted

$ROT(n)$ can be thought of as a character based stream cipher. It works because addition - the encryption method used - is commutative, i.e. $ROT(x, ROT(y, m)) = ROT(y, ROT(x, m))$.

Another well known commutative function is $XOR$. It is used by the one time pad, but - more practically - also for block ciphers in streaming mode. So you can encrypt using AES in CTR mode using two different keys in any order and get the same ciphertext. And decryption will work in any order as well.

Note that you should use an IV or nonce if you reuse the keys. A single IV should do even if you have two separate keys.

share|improve this answer
    
Other stream ciphers will work as well of course. –  Maarten Bodewes - owlstead Jul 16 at 0:12
    
Great answer! Is RC4 among those that can be used? I tried this in openssl and the final step said "bad magic number". And I don't think it supports AES-CTR mode Is BF-CTR (which is, I assume, Blowfish) good too? –  Osmium USA Jul 16 at 0:47
    
Yes, RC4 could be used. But it shouldn't be used anymore. Use e.g. Salsa20 if you really want to use a stream cipher. BF-CTR is Blowfish yes, and will work; any block cipher in CTR mode will work. –  Maarten Bodewes - owlstead Jul 16 at 0:51
    
Never mind i figured it out with openssl, AES in CTR mode, and you have to use the -nosalt flag for it to work. Thanks for the help, and thanks to whoever added that tag to my question so now I know what it's called. –  Osmium USA Jul 16 at 1:13
1  
Only problem is that I always get confused with commutative and associative. As addition and xorring are both, I guess it's not harmful in this case. –  Maarten Bodewes - owlstead Jul 16 at 1:15

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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