Search code examples
securityencryptionvigenere

Breaking a Modified Vigenere Cipher


Im working on an algorithm to break a modified Vigenere Cipher. The regular Vigenere cipher works in the following way:

Plaintext: ATTACKATDAWN
Key: LEMONLEMONLE
Ciphertext: LXFOPVEFRNHR

Regular Version

CR[i] = (P[i] - 33 + K[i]) mod 94 + 33

Modified Version

CM[i] = (P[i] - 33 + K[i] + CM[i-1] - 33) mod 94 + 33

Notice how the modified version uses previous state/character to generate the new one. My theory to break it is to reverse the modified version back to the regular Vigenere cipher. This way I can apply some frequency analysis and other methods. I need to somehow rearrange that equation such that I have "previousC" on the LHS with C. Since both C and previousC are known values it should be easy to do the reversal (starting with the first character).

My only problem is, how do I rewrite the equation in terms of C and previousC? If someone could point that out that would help a lot.


Solution

  • CR represents the regular Viginere ciphertext, CM the modified Viginere ciphertext

    CR[i] = (P[i] + K[i]) mod 26
    CM[i] = (P[i] + K[i] + CM[i-1]) mod 26
          = (CR[i] + CM[i-1]) mod 26
    

    Now simply solve for the original ciphertext CR

    CR[i] = (CM[i] - CM[i-1]) mod 26
    

    Once you have the regular ciphertext, break it as usual.