## PMC Encryption Engine

### The polymorphic encryption method (PMC)

CyProtect AG offers the polymorphic encryption method (basis-technology) for licencing to other companies for their applications, encryption on data-connections and others.

Even the implementation in software for network-dataconnections (for example videoconferences, satellitebroadcasts, etc.) are possible with the **PMC Stream-Cipher-version**.

An additional application of the cipher is to use it as a "licencing machine", which means that it can be used as a copyprotection for software including licencing.

Furthermore your can contact us for project work, if you want to include the **PMC encryption method in your application**. If you have interest, please do not hesitate to ask us.

**Introduction to the polymorphic encryption method (PMC)**

The widespread DES algorithm has long been supposed to be unbreakable. In January 1999 a test performed by RSA Data Security, Inc. (San Mateo, Calif., USA) proved that it takes less than 22.25 hours to crack the 56 bit algorithm by brute-force (by trying all 2 high56 possibilities). That was 365 days after the same company needed 41 days for that task! RSA claim to have a much better cipher, which is obviously true.

Today a code length of 128 bit is regarded as safe by experts (corresponding to approx. 1650 bit for RSA). Thus, it took just 25 years for the experts to actually double their requirements in key size (which is effectively 10000000000000000000 times more than what was initially regarded "safe"!!!).

A new approach for symmetric cryptography implying self-compiling machine code solves the speed problem for long keys. Execution time increases only linearly with key size. The idea behind it is to randomize the algorithm itself. That’s why it was named „Polymorphic Method“. What if both data and the actual encryption algorithm are undefined in the beginning. An opponent who wants to break your key feels deprived of any constant. Working with variables only quickly becomes pretty complex. Commonly known ciphers use one key - say one variable. A mathematic equation comprising two variables cannot be solved! For cryptography, there is of course a solution - but the only way to find it is to search exhaustively the whole keyspace. This problem is one-dimensional for common ciphers and two-dimensional for the Polymorphic Cipher.

The Polymorphic Method is among the strongest ciphers available today and it's probably the strongest. The method simply takes advantage of machine code assembled at random to yield extraordinary security against all kinds of attacks. It is even intrinsically safe against the analysis of the program's instruction sequence because the instruction sequence itself is a variable! It is important to know that the key assumption for successful cryptoanalysis is detailed knowledge of the encryption algorithm - but the actual Polymorphic Method’s algorithm is inherently UNKNOWN.

**Basic principle of the Polymorphic Method**

Two different passwords (or two parts of one password) are fed into random number generators. The one RNG on the left produces a byte stream which is compiled into machine code. The compiler simply assembles standardized building blocks, adjusts addresses as well as entry- and exit points to generate a piece of machine code which affects the key data array during execution of the machine code. The key data array is initialized by the right RNG which is biased by the right password.

After the machine code has been executed, the content of the key data array can be used to encrypt plaintext through the application of the xor function. The content of the key data array can and should alternatively be used for biasing an underlying cryptographic algorithm which is simple and fast. By doing this, the complexity of the total crypto system increases and it becomes much more difficult to analyze the internal state of the key data array, although the information it contains gives no clue about the keys.

It is even more confusing to sometimes recompile the instruction sequence. This makes the method dynamically polymorphic.

The compiler internal to the Polymorphic Encryption Method compiles replaceable code fragments which use the processor’s registers in an identical way. Each building block can be exchanged by any other. The actual code length can vary due to differences in complexity but not the way data is passed from one building block to the other. A data array is used as a long variable which is initialized by a password. It takes the place of the key as known from conventional crypto algorithms. The CPU works on this S-box and performs permutations, modulo-divisions, shifts and other nonlinear operations.

**Attack security of the Polymorphic Encryption Method (PMC)**

Each building block affects at least 32 bits of data and quite frequently it alters the key.

If there are only 4 cryptographic instruction blocks and 16 of these blocks can be assembled chaotically one after the other, there exist 416 = 4294967296 different possibilities for the actual encryption algorithm! If 128 instruction blocks were to be assembled, a choice of 4128 = 1,158*1077 combinations would result (standard 128 bit encryption yields a total of 3,403*1038).

It is important to note that this is without affecting execution time because there is the requirement for a well-shuffled key data array which must be guaranteed by conventional algorithms as well.

The Polymorphic Method features a substancially higher attack security than any conventional method. In order to calculate the total attack security, the number of code combinations must be multiplied by the number of key combinations. Key size may be 16 bytes = 128 bits; thus there exist 2128 = 3,403*1038 combinations for the key stored in the key data array. The two keyspaces multiplied yield 1,158*1077 * 3,403*1038 = 3,913*10115 possible key combinations for the Polymorphic Method.

In order to compare conventional cryptographic methods with the Polymorphic Method, the total keyspaces must be compared. As both methods are assumed to work on a 128 bit data key, this comparison is legal. Thus, the polymorphic method beats any conventional method by a factor of 3,913*10115 / 3,403*1038 = 1,150*1077 (!). This is more than the number of atoms on our planet!

**Attacks and their likelyhood of success on the Polymorphic Method**

Attacks are not algorithms, but instead just general approaches which must be reinvented for every new type of cipher.

It is generally assumed that The Opponent knows the design of the cipher and has virtually any amount of plaintext and corresponding ciphertext ("known plaintext"). It is further assumed that The Opponent has the real-time ability to obtain "defined plaintext" by enciphering messages at will and collecting the resulting ciphertext.

**Exhaustive Search (Brute Force on the keys)**

Attacks are not algorithms, but instead just general approaches which must be reinvented for every new type of cipher.

It is generally assumed that The Opponent knows the design of the cipher and has virtually any amount of plaintext and corresponding ciphertext ("known plaintext"). It is further assumed that The Opponent has the real-time ability to obtain "defined plaintext" by enciphering messages at will and collecting the resulting ciphertext.

**Exhaustive Search (Brute Force on the keys)**

Try each possible key until the message deciphers properly. Try most-likely keys first.

A keyspace of at least 128 bits should be sufficient to prevent exhaustive search in the foreseeable future. The keying system for the Polymorphic Method is hard to implement with less than 256 bits and has usually a keyspace substancially beyond this value - around 2048 bits, not counting the key combinations for the instruction key which usually provide more than 99.9999999999% of the total security.

Chosen Key

Try various keys on known plaintext and compare the resulting ciphertext to the actual ciphertext, to try and build the correct key value.

As the key is more or less the algorithm itself, the task of an opponent is hopeless because the one-way polymorphic function comes in different shapes with each key, which is so big, that there is no possibility to isolate and work separately on some kind of table. A computer can only be as big as there are atoms on this planet.

**Ciphertext-Only Codebook**

Collect as many ciphertexts as possible and try to understand their contents through usage and relationships; then, when a ciphertext occurs, look it up. This treats the block cipher like a code, and is the classic approach to code-breaking.

Just as some letters are more frequently used than others, words and phrases also have usage frequencies, as do blocks which contain plaintext. If the cipher block size is small (under 64 bytes), and if the ciphering key is not changed frequently, it may be possible to build a codebook of block values with their intended meanings.

Codebook attacks of any sort are ideally prevented by having a large number of block values, which implies a large block size. Once the block size is at least, say, 64 bytes, it can be expected that the amount of uniqueness in each block exceeds anyone's ability to collect and form a codebook.

Since the complexity of any sort of a codebook attack is related to block size only, doing "triple" anything will not affect increase this complexity. In particular, this means that Triple DES is no stronger than DES itself under this sort of attack, which is based on block size and not transformation complexity.

The Polymorphic Method is best implemented with a 1024 byte block size and the instruction sequence changing with every block. The method is further ideal for producing a seed for some random number generator which decouples the algorithm from the generation of the confusion sequence. Because a Polymorphic Method comes in different shapes with each key, any kind of codebook will contain mostly noise and will not be of great use.

**Known Plaintext**

Somehow "obtain" both the plaintext and the corresponding ciphertext for some large number of encipherings under one key.

With this kind of attack, one plaintext-ciphertext pair contains sufficient information to obtain the content of the key data array. In order to identify a key, both keys must be guessed using the Exhaustive Search method.

As both the input to the compiler as well as the keys are unknown, it is difficult to reveal the full internal state without revealing the underlying crypto system. The Polymorphic Method hides roughly three quarters of the internal state in the actual instruction code and that alone provides sufficient complexity. Note that a single known plaintext and ciphertext pair probably would identify a DES key!

**Known-Plaintext Codebook**

Collect as many ciphertexts and associated plaintext blocks as possible; then, when a ciphertext occurs, look it up.

Small block ciphers prevent codebook attacks by randomizing the plaintext (often with Cipher Block Chaining) so that the plaintext block values are distributed evenly across all possible block values.

Codebook attacks are ideally prevented by having a large number of block values, which implies a large block size. To prevent this attack for the future, a block size of 64 bytes is regarded as safe so the uniqueness it does contain assures that there will be too many different blocks to catalog. A 1024 byte block size and the use of a confusion sequence generator with at least 64 byte internal state makes it impossible to gain any ground on this kind of attack.

As the key is more or less the algorithm itself, the idea to create a table ends in logging noise.

**Chosen Plaintext**

Without knowing the key, arrange to cipher data at will and capture the associated ciphertext. Dynamically modify the data to reveal the key, or keyed values in the cipher.

The point here is not to decipher the associated ciphertext because the opponent is producing the original plaintext. If the opponents have chosen plaintext capabilities, they can probably also submit arbitrary ciphertext blocks for deciphering.

The weakness to be exploited here usually depends upon the ciphering system beyond the core cipher per se - a point with little internal state. As far as the Polymorphic Method is concerned, there is no static algorithm with some known weakness. Instead, there are a lot of possible weaknesses – each possible keyed state. The Chosen Plaintext attack is not applicable here.

**Chosen-Plaintext Codebook**

Create as many ciphertexts and associated plaintext blocks as possible; then, when a ciphertext occurs, look it up.

This is much like the previous codebook attacks, now with the ability to fill the codebook at will and at electronic speeds. Again, the ability to do this depends upon the cipher having a relatively small block size and on a fixed cryptographic algorithm. This attack is again not applicable because it’s simpler and equally efficient to try all possible keys.

**Meet-in-the-Middle**

With a multi-layered structure, given known-or defined-plaintext, search the top keyspace to find every possible result, and search the bottom keyspace to find every possible value.

With a two-level construct and a small block size, matches can be verified with a few subsequent known-plaintext/ciphertext pairs. Of course, three and more-level constructs can always be partitioned into two sections so a meet-in-the-middle attack can always be applied; this just may be pretty complex.

As each layer in a good crypto algorithm contains a huge amount of keyed state or „keyspace“, the Polymorphic Method uses a large key and consequently adds a huge amount of unknown algorithm which multiplies with in the beginning unknown data keyspace to yield extraordinary complexity.

**Key Bit Bias**

Through extensive ciphering of fixed plaintext data under a variety of different keys, it may sometimes be possible to associate key bits with the statistical value of some ciphertext bits. This knowledge will break a conventional cipher quickly.

As different keys inevitably produce different cipher algorithms, statistics cannot help to link ciphertext with plaintext. There’s simply a new independent variable in the game with the Polymorphic Method as each key state has some pretty unique weakness.

**Differential Cryptanalysis**

Exploit known properties of particular known substitution tables to effectively reduce the number of "rounds" in an iterated block cipher.

The original form of Differential Cryptanalysis mainly applies to iterated block ciphers with known tables, neither of which are present here. For an iterative cipher like DES, statistical unbalance can be found in known, fixed substitutions and that can be exploited to peer back into previous iteration steps.

For the Polymorphic Cipher Method, each different input value will actually select a different cipher, and this results in a completely variable transformation. It is hard and very inefficient to attack a transformation which changes it’s structure completely whenever it is probed.