(27-08-2019, 02:45 PM)Koen G Wrote: You are not allowed to view links. Register or Login to view.Radapox, just to get an idea, how long would it take you to encode a full page in your proposed system? Is this a matter of minutes? Hours? Days? And how long would it take you to decode a page someone else did?
Hmm, I think the very simplistic version I used to illustrate the principle would be somewhere in the ballpark of minutes/hours. But as I explained, I think a character-based version like that would be too straightforward, or someone would have detected it by now. A more advanced version would be to work on syllable or word level. The principle would be comparable to the idea I described in You are not allowed to view links.
Register or
Login to view., only using syllables or words as a basis rather than letters. The mapping from plaintext to ciphertext could be letters > syllables/words (e.g. BOOK >
ma pu ke lo - just making this up along the way) or syllables/words > syllables/words, or other units I haven't thought of.
Again, an example to illustrate what I'm talking about. We'll use letter > syllable mapping, meaning that a four
letter word in our plaintext ends up as four
syllables in our ciphertext. Pretty darn inefficient, but who knows.
- Step 1 is to choose two sets of letters, one for consonants, one for vowels. These will be the "alphabets" from which our cipher syllables are built. The syllables always have a CVC structure, but either of the Cs can be empty (Ø). We'll take Øbcdfghjklmnpqrstvwxz as our consonant set, and aeiouy as our vowel set. So possible syllables could be pal, Øek (realized as ek), zaØ (za), ØiØ (i), etc.
- Now to each letter of the alphabet in our source language (let's keep it at English for this example) we assign a unique mutation, consisting of "steps" to be taken in the consonant and vowel sets. There are three possible mutations: 0 (= stay where you are), + (= go one step right) and - (= go one step left). Each component of the cipher syllable (C1, V and C2) has to be mutated, so each mutation consists of a triplet, like 0+-, +++, 00-, --0, etc. The first element in the triplet refers to the first C, the second to the V, the third to the second C, so a mutation like -+0 means: for C1, go one step left in the consonant list (-); for V, go one step right in the vowel list (+); for C2, stay at the same position in the consonant list (0).
There are 3^3 = 27 possible mutation triplets, allowing us to include the space as well:
English character Mutations
C1 V C2
[space] 0 0 0
a 0 0 +
b 0 0 -
c 0 + 0
d 0 + +
e 0 + -
f 0 - 0
[...]
x - - 0
y - - +
z - - -
- Okay, so let's encipher the word BED. Like the letter-based version in my original post, we first need to choose a "starting position" to apply the first mutation on, but instead of a letter, this time the starting point must be a syllable. Let's choose ØaØ for this (realized as a); i.e., a syllable that has Ø as its first "consonant" (C1), a as its vowel, and another Ø as its second "consonant" (C2):
ØaØ starting syllable
- Now to encipher the first letter of our plaintext (B), we look up the corresponding mutation in the list above, which is 00-. This translates to "for C1, stay at the same position in the consonant list (i.e., stay at Ø); for V, stay at the same postition in the vowel list (stay at a); for C2, move one step left in the consonant list (go to z - the letter to the "left" of Ø in the consonant list if you think circularly). Thus, the B has resulted in our starting syllable ØaØ having mutated to Øaz (realized as az):
ØaØ starting syllable
00- mutation for B
[font=Courier New]Øaz resulting syllable for B[/font]
- The resulting syllable Øaz is now taken as the starting point for enciphering our next letter, E. Again, we look up the corresponding mutation, which is 0+-, and apply this to the previous syllable. As begore, C1 remains unchanged (0) so stays Ø, but V moves one step to the right (1) in the vowel list, becoming e; while C2 moves one step to the left (-), becoming x. The resulting syllable for E thus becomes Øex:
[font=Courier New]ØaØ starting syllable[/font]
[font=Courier New]00- mutation for B[/font]
[font=Courier New][font=Courier New]Øaz resulting syllable for B[/font][/font]
[font=Courier New][font=Courier New][font=Tahoma, Verdana, Arial, sans-serif][font=Courier New]0+- mutation for E[/font][/font][/font][/font]
[font=Courier New][font=Courier New]Øex resulting syllable for E[/font][/font]
- And the same for the D. The mutation is 0++, so C1 once more stays Ø, V moves one right so becomes i, and C2 moves one to the right, back to z:
ØaØ starting syllable
[font=Courier New]00- mutation for B[/font]
[font=Courier New][font=Courier New]Øaz resulting syllable for B[/font][/font]
0+- mutation for E
[font=Courier New][font=Courier New]Øex[/font][/font] resulting syllable for E
[font=Courier New][font=Tahoma, Verdana, Arial, sans-serif][font=Courier New]0++ mutation for D
[font=Courier New][font=Courier New]Øiz[/font][/font][/font][/font][/font] resulting syllable for D
- There we are: BED has become Øaz Øex Øiz, realized as az ex iz. (You could choose to include the starting syllable a, but this is not necessary).
So there. This is how a differential letter-to-syllable code might work. Again, this is a highly simplified example just to show the principle (although quite a bit more convoluted than the letter-to-letter version, as I'm sure you'll agree), and the parameters could be tweaked in thousands of different ways, but the takeaway of this all is how this method
creates strings of words that are very similar or even identical to their neighbours, something we see a lot in the VM.
As before, I cannot overstress enough that this is not what I'm
claiming is going on in reality, or that loads of other principles couldn't be at play at the same time as well. It's just an interesting thought that I had and would love to hear your feedback on. So thanks once more!