Affine cipher: Difference between revisions
Tag: section blanking |
Tag: section blanking |
||
Line 1: | Line 1: | ||
The '''affine cipher''' is a type of [[monoalphabetic substitution cipher]], wherein each letter in an alphabet is mapped to its numeric equivalent, encrypted using a simple mathematical function, and converted back to a letter. The formula used means that each letter encrypts to one other letter, and back again, meaning the cipher is essentially a standard substitution cipher with a rule governing which letter goes to which. As such, it has the weaknesses of all substitution ciphers. Each letter is enciphered with the function <math>(ax+b)\mod(26)</math>, where <math>b</math> is the magnitude of the shift. |
The '''affine cipher''' is a type of [[monoalphabetic substitution cipher]], wherein each letter in an alphabet is mapped to its numeric equivalent, encrypted using a simple mathematical function, and converted back to a letter. The formula used means that each letter encrypts to one other letter, and back again, meaning the cipher is essentially a standard substitution cipher with a rule governing which letter goes to which. As such, it has the weaknesses of all substitution ciphers. Each letter is enciphered with the function <math>(ax+b)\mod(26)</math>, where <math>b</math> is the magnitude of the shift. |
||
==Weaknesses== |
|||
Since the affine cipher is still a monoalphabetic substitution cipher, it inherits the weaknesses of that class of ciphers. The Affine cipher is a [[Caesar cipher]] when <math>a=1</math> since the encrypting function simply reduces to a linear shift. |
|||
Considering the specific case of encrypting messages in English (i.e. <math>m=26</math>), there are a total of 286 non-trivial affine ciphers, not counting the 26 trivial Caesar ciphers. This number comes from the fact there are 12 numbers that are coprime with 26 that are less than 26 (these are the possible values of <math>a</math>). Each value of <math>a</math> can have 26 different addition shifts (the <math>b</math> value); therefore, there are 12*26 or 312 possible keys. This lack of variety renders the system as highly insecure when considered in light of [[Kerckhoffs' principle|Kerckhoffs' Principle]]. |
|||
The cipher's primary weakness comes from the fact that if the cryptanalyst can discover (by means of [[frequency analysis]], brute force, guessing or otherwise) the plaintext of two ciphertext characters then the key can be obtained by solving a [[simultaneous equation]]. Since we know <math>a</math> and <math>m</math> are relatively prime this can be used to rapidly discard many "false" keys in an automated system. |
|||
The same type of transformation used in affine ciphers is used in [[linear congruential generator]]s, a type of [[pseudorandom number generator]]. This generator is not a [[cryptographically secure pseudorandom number generator]] for the same reason that the affine cipher is not secure. |
|||
==Examples== |
==Examples== |
Revision as of 08:10, 7 August 2014
The affine cipher is a type of monoalphabetic substitution cipher, wherein each letter in an alphabet is mapped to its numeric equivalent, encrypted using a simple mathematical function, and converted back to a letter. The formula used means that each letter encrypts to one other letter, and back again, meaning the cipher is essentially a standard substitution cipher with a rule governing which letter goes to which. As such, it has the weaknesses of all substitution ciphers. Each letter is enciphered with the function , where is the magnitude of the shift.
Examples
In these two examples, one encrypting and one decrypting, the alphabet is going to be the letters A through Z, and will have the corresponding values found in the following table.
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Encrypting
In this encrypting example,[1] the plaintext to be encrypted is "AFFINE CIPHER" using the table mentioned above for the numeric values of each letter, taking to be 5, to be 8, and to be 26 since there are 26 characters in the alphabet being used. Only the value of has a restriction since it has to be coprime with 26. The possible values that could be are 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, and 25. The value for can be arbitrary as long as does not equal 1 since this is the shift of the cipher. Thus, the encryption function for this example will be . The first step in encrypting the message is to write the numeric values of each letter.
plaintext: | A | F | F | I | N | E | C | I | P | H | E | R |
x: | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Now, take each value of x, and solve the first part of the equation, . After finding the value of for each character, take the remainder when dividing the result of by 26. The following table shows the first four steps of the encrypting process.
plaintext: | A | F | F | I | N | E | C | I | P | H | E | R |
x: | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 | |
8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
The final step in encrypting the message is to look up each numeric value in the table for the corresponding letters. In this example, the encrypted text would be IHHWVCSWFRCP. The table below shows the completed table for encrypting a message in the Affine cipher.
plaintext: | A | F | F | I | N | E | C | I | P | H | E | R |
x: | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
8 | 33 | 33 | 48 | 73 | 28 | 18 | 48 | 83 | 43 | 28 | 93 | |
8 | 7 | 7 | 22 | 21 | 2 | 18 | 22 | 5 | 17 | 2 | 15 | |
ciphertext: | I | H | H | W | V | C | S | W | F | R | C | P |
Entire alphabet encoded
To make encrypting and decrypting quicker, the entire alphabet can be encrypted to create a one to one map between the letters of the cleartext and the ciphertext. In this example, the one to one map would be the following:
letter in the cleartext | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
number in the cleartext | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
(5x+8)mod(26) | 8 | 13 | 18 | 23 | 2 | 7 | 12 | 17 | 22 | 1 | 6 | 11 | 16 | 21 | 0 | 5 | 10 | 15 | 20 | 25 | 4 | 9 | 14 | 19 | 24 | 3 |
ciphertext letter | I | N | S | X | C | H | M | R | W | B | G | L | Q | V | A | F | K | P | U | Z | E | J | O | T | Y | D |
Programming examples
Using the Python programming language, the following code can be used to create an encrypted alphabet using the Roman letters A through Z.
#Prints a transposition table for an affine cipher.
#a must be coprime to m=26.
def affine(a, b):
for i in range(26):
print chr(i+65) + ": " + chr(((a*i+b)%26)+65)
#An example call
affine(5, 8)
Or in Java:
public void Affine(int a, int b){
for (int num = 0; num < 26; num++)
System.out.println(((char)('A'+num)) + ":" + ((char)('A'+(a*num + b)% 26)) );
}
Affine(5,8)
Or in Pascal:
Procedure Affine(a,b : Integer);
begin
for num := 0 to 25 do
WriteLn(Chr(num+65) , ': ' , Chr(((a*num + b) mod 26) + 65);
end;
begin
Affine(5,8)
end.
See also
- Affine functions
- Atbash code
- Caesar cipher
- ROT13
- Topics in cryptography
- Perl interface to "Affine cipher"
References
- ^ Kozdron, Michael. "Affine Ciphers" (PDF). Retrieved 22 April 2014.