Skip to content

Latest commit

 

History

History
56 lines (49 loc) · 1.79 KB

README.md

File metadata and controls

56 lines (49 loc) · 1.79 KB

PMNG-Cipher

Polymapping N-gram cipher.

This cipher was used as part a challenge in Cyber Discovery's "Content Creators Club CTF", CH06. You can see writeup.md for a writeup of this challenge, which also serves of a usage example for this cipher.

cipher.py is a script that provides an implementation of encryption/decryption using this cipher. Because of the way decryption works (see below), it relies on word frequency as a heuristic for decryption at points, to simulate human judgement of the more likely decryption candidate.

Algorithm

The cipher is a substituion cipher with three additions. The first is that some plaintext characters encrypt to the same ciphertext character. As a result, when decrypting, some characters have two possible plaintext counterparts. These are indicated in bold and italics in the table below.

Plaintext Ciphertext
A O
B V
C K
D G
E Y
F F
G Q
H J
I L
J Q
K K
L M
M R
N T
O W
P B
Q Z
R A
S C
T P
U X
V X
W N
X Z
Y H
Z Z

Additionally, certain N-grams in plaintext are encrypted into single characters. For clarity, these N-gram mappings and polymapped characters are summarised below.

Plaintext Ciphertext
ING I
ST S
EA E
OU U
TH F
----- -----
F, TH F
C, K K
G, J Q
U, V X
Q, X, Z Z

Finally, double letters are encrypted differently. In ciphertext, a double letter is notated by a D followed by the letter that is doubled. For example, the plaintext word BELL would encrypt to VYDM. The BE encrypts to VY, and L maps to M. Because M is prefaced with a D, it would expand to VYMM which then decrypts back to BELL.