Algorithm

mobilEEnigma product use a fast ciphering method specially design to cipher any plain text in a mobile platform and on your computer desktop.

The algorithm used 8 private Substitutions boxes of 256 elements of 64 bits, and 1 user encryption Pass-Phrase with no maximum length.

Using the provided Pass Phrase, the first goal is to generate a seed number then using that number to xored with the 4 subtitions box together tp generate a private (pk).

pp is passphrase symbol
pp_len is the length of PassPhrase
pk is the private key
k0 is a compute value to generate the final private key

ops = 0
For i=0 to pp_len
if(ops == 0)
k0 |= ppi;
else if(ops == 1)
k0 += ppi
else if(ops == 2)
k0 -= ppi
else if(ops == 3)
k0 *= ppi
else if(ops == 4)
k0 /= ppi
else if(ops == 5)
k0 ^= ppi

if( (ppi % 2) )  k0 = k0 << (ops+1) else  k0 = k0 >> (ops+1)
if(++ops > 5) ops = 0

For i=0 to 256
pk[i] = ((((k0 ⊕ k1[i]) ⊕ k2[i]) ⊕ k3[i]) ⊕ k4[i])

At this point the Private Key (pk) is generated and ready to cypher or decipher plain text.

Then to cipher plain text :

pt is plain text
pt_len is plain text length
cd is cypher data

For i=pt_len-1; i>-1
c1 = pt[i–]
c2 = c3 = c4 =0

if(i > -1) c2 = pt[i–]
if(i > -1) c3 = pt[i–]
if(i > -1) c4 = pt[i–]

c4 = c4 ⊕ c2
c3 = c3 ⊕ c1
c2 = c2 ⊕ c3

uc = c4
uc = (uc << 16)
uc |= c3
uc = (uc << 16)
uc |= c2
uc = (uc << 16)
uc |= c1
t = uc ⊕ pk[k]
t ⊕= S0[k]
t ⊕= S1[k]
t ⊕= S2[k]
t ⊕= S3[k++]
if(k>255) k = 0
cd += t

At the end, cd will contain all cypher value.

Even knowing the private Substitutions boxes, the strenght is clearly define in Pass-Phrase length and complexity.

By eliminating any direct dictionary attack, guessing few words Pass-Phrase is one thing but a Pass-Phrase that can be as long as a user define and in any language is another problem, so a dictionary attack failure will conduct to a brute force option.

A brute force operation is an option, this is a very long process to try out, my maths stop there. How long that can be to test all unichar value convert in a number that can hold from 0 to 18,446,744,073,709,551,615 and for each Pass-Phrase unichar possibilities with a undefined Pass-Phraselength.

The complexity is in the language itself, linguist has been used in the past to help on dictionary attack, but in modern world, anyone can translate few words, out of no where like « it’s rainning like cat and dogs» in Japanese will be : それは、猫と犬のよう時半だ。(Google translator), of course the demonstration here is only to demonstrate that a Pass-Phrase can be anything, the Japanese translation is not really a good translation but who care, it just add to the randomness of this algorithm. As you see, it’s very easy to use a Pass-Phrase with a foreign language, since that, how a linguist can be helpful to build a dictionary attack?

In conclusion, there exist no perfect system, because human been are lazy by nature, most of the people won’t use an efficient Pass-Phrase system. We suggest, before using mobilEEnigma, to always take the time to set a good Pass-Phrase system that will offer the best protection that system can give.

The Cipher solution for iPhone, Android and BlackBerry.

Never send out any plain text with sensitive information.