home *** CD-ROM | disk | FTP | other *** search
- <html>
-
- <head>
- <meta http-equiv="Content-Language" content="de">
- <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
- <meta name="ProgId" content="FrontPage.Editor.Document">
- <meta name="keywords" content="polymorphic cipher encryption cryptography bpp disk">
- <title>PMC Ciphers, Inc. - The Polymorphic Cipher: Basics of Polymorphic
- Encryption</title>
- </head>
-
- <body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#000080" VLINK="#4040C0" ALINK="#0000FF">
-
- <basefont face="Arial" color="#000000" size="2">
- <table border="0" cellpadding="0" cellspacing="0" align="left">
- <tr>
- <td colspan="2">
- <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" width="1024">
- <tr>
- <td><a href="http://www.pmc-ciphers.com/index.php">
- <img alt="pmc-ciphers.com" border="0" src="img/header_up.jpg" width="1024" height="87"></a></td>
- </tr>
- <tr>
- <td background="img/header_down.jpg" width="1024" height="24">
- <table border="0" cellpadding="0" cellspacing="0" align="left">
- <tr>
- <td width="160"></td>
- <td width="100" align="center">
- <a href="http://www.pmc-ciphers.com/index.php">
- <font face="Arial" size="2"><b>Home</b></font></a> </td>
- <td width="100" align="center">
- <a href="http://www.pmc-ciphers.com/products/index.php">
- <font face="Arial" size="2"><b>Products</b></font></a> </td>
- <td width="140" align="center">
- <a href="http://www.pmc-ciphers.com/technology/index.php">
- <font face="Arial" size="2"><b>PMC Technology</b></font></a> </td>
- <td width="160" align="center">
- <a href="http://www.pmc-ciphers.com/services/index.php">
- <font face="Arial" size="2"><b>Services & Capabilities</b></font></a>
- </td>
- <td width="100" align="center">
- <a href="http://www.pmc-ciphers.com/partners/index.php">
- <font face="Arial" size="2"><b>Partners</b></font></a> </td>
- <td width="100" align="center">
- <a href="http://www.pmc-ciphers.com/dev/index.php">
- <font face="Arial" size="2"><b>Developers</b></font></a> </td>
- <td width="100" align="center">
- <a href="http://www.pmc-ciphers.com/company/index.php">
- <font face="Arial" size="2"><b>Contact us</b></font></a> </td>
- <td width="80" align="center">
- <a href="http://www.pmc-ciphers.com/sitemap.php">
- <font face="Arial" size="2"><b>Sitemap</b></font></a> </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td width="164" bgcolor="#D0D0E0" valign="top">
- <table bgcolor="#D0D0E0" border="0" cellpadding="0" cellspacing="0" align="left" style="border-collapse: collapse" bordercolor="#111111" height="387">
- <tr>
- <td align="center" valign="top" width="150" height="33"><b>
- <font color="#666666" face="Arial" size="2">BPP Disk Encryption Help</font></b>
- <hr color="#9999CC" size="1"></td>
- <td bgcolor="#D0D0E0" width="10" height="33"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <a href="bpp_disk_installation_en.html">Installation and deinstallation</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <a href="bpp_disk_main_en.html">BPP Disk Encryption Manual</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <a href="bpp_disk_shell_extension_en.html">BPP Shell Extension Manual</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><a href="full_versions_en.html">
- <font face="Arial" size="2"><b>Full versions</b></font></a></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><hr></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td align="center" valign="top" width="150" height="33"><b>
- <font color="#666666" face="Arial" size="2">White Papers about BPP Disk
- Encryption</font></b><hr color="#9999CC" size="1"></td>
- <td bgcolor="#D0D0E0" width="10" height="33"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <img border="0" src="img/pdf_small.gif" width="24" height="24"><a href="bpp_disk_mode_of_operation_en.pdf">BPP
- Disk: Mode of operation (Abobe PDF document)</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <img border="0" src="img/pdf_small.gif" width="24" height="24"><a href="bpp_disk_white_paper_en.pdf">BPP
- Disk: White Paper (Abobe PDF document)</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><hr></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td align="center" valign="top" width="150" height="33"><b>
- <font color="#666666" face="Arial" size="2">Polymorphic Cipher: Theory
- and test results</font></b> <hr color="#9999CC" size="1"></td>
- <td bgcolor="#D0D0E0" width="10" height="33"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <a href="polymorphic_cipher.html">The Polymorphic Cipher</a><br>
- <img border="0" src="img/pdf_small.gif" width="24" height="24"><a href="description_polymorphic_cryptography.pdf">Abobe
- PDF version</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <img border="0" src="img/pdf_small.gif" width="24" height="24"><a href="pmc_fact_sheet.pdf">Polymorphic
- Cipher Fact Sheet (Abobe PDF document)</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <img border="0" src="img/pdf_small.gif" width="24" height="24"><a href="roellgen02generalizedPMCmodel.pdf">Polymorphic
- Cipher theory (Abobe PDF document)</a></b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2"><b>
- <img border="0" src="img/pdf_small.gif" width="24" height="24"><a href="512bit_block_pmc_disk_encryption_diehard_test_en.pdf">512
- bit Block PMC Diehard Test Results (Abobe PDF document)</a><br>
- </b></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><br>
- <i><font face="Arial" size="2"><b>
- <a href="http://www.adobe.com/products/acrobat/readstep2.html">Download
- Adobe PDF Reader from www.adobe.com</a></b></font></i></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><hr></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td align="center" valign="top" width="150" height="33"><b>
- <font color="#666666" face="Arial" size="2">BPP Disk webpages</font></b><hr color="#9999CC" size="1">
- </td>
- <td bgcolor="#D0D0E0" width="10" height="33"> </td>
- </tr>
- <tr>
- <td height="48" width="150"><font face="Arial" size="2"><b>
- <a href="http://www.pmc-ciphers.com/technology/index.php">All about
- Polymorphic Encryption at www.pmc-ciphers.com</a></b></font><br>
- </td>
- <td bgcolor="#D0D0E0" width="10" height="48"> </td>
- </tr>
- <tr>
- <td height="40" width="150"><font face="Arial" size="2">
- <a href="http://www.pmc-ciphers.com/products/bpp_disk.php"><b>BPP Disk
- at www.pmc-ciphers.com</b></a></font></td>
- <td bgcolor="#D0D0E0" width="10" height="40"> </td>
- </tr>
- <tr>
- <td width="150" valign="bottom" height="66"><font face="Arial" size="1">
- (c) 1999-2003<br>
- PMC Ciphers, Inc.</font></td>
- <td bgcolor="#D0D0E0" width="10" height="66"> </td>
- </tr>
- </table>
- </td>
- <td width="860" bgcolor="#FFFFFF" valign="top">
- <table border="0" cellspacing="0" width="866" id="AutoNumber2" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0">
- <tr>
- <td bgcolor="#efefef" class="size8" valign="bottom"><b>
- <font face="Arial"> The Polymorphic Cipher</font></b></td>
- </tr>
- <tr>
- <td class="size8"><br>
- <b><font color="#000080" face="Arial" size="3">Author: C. B. Roellgen,
- initial release date: 1999</font></b></td>
- </tr>
- <tr>
- <td align="left" valign="top">
- <img border="0" src="img/enigma.jpg" align="right" hspace="10" width="300" height="455"><p align="justify">
- <b><font face="Arial" size="2">The history of cryptography has shown
- that unbreakable ciphers had in many cases been cracked shortly after
- their widespread use had begun. One famous example is the "Enigma"
- encryption machine used by the Nazis in world war two: British
- specialists at Bletchley Park had been able to crack the clever
- permutation code. This resulted in detailed knowledge about most German
- military operations and in the total loss of the German submarines.<br>
- </font></b></p>
- <p> </p>
- <p> </p>
- <p><font face="Arial">T<font size="2">he 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 256 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. </font></font></p>
- <p><font face="Arial" size="2">Today a code length of 128 bit is
- regarded as safe by experts (1000 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"!!!).</font></p>
- <p align="justify"><font face="Arial" size="2">It is indeed true that a
- key size of 256 bit are absolutely secure. There exists (even
- theoretically) no machine which can break such a code within an
- acceptable period of time.<br>
- But one can never be sure that there exists absolutely no shortcut.
- </font></td>
- </tr>
- <tr>
- <td align="left" valign="top">
- <p align="justify"><font face="Arial" size="2">Technology advances
- quickly. Day by day it becomes more likely that somebody is able to
- decrypt files containing confidential data. Why not simply oversize the
- encryption algorithm to solve this nasty but inevitable security
- problem? <br>
- The main reason is speed! It is usually claimed that long keys slow down
- the algorithm too much. That's true because execution time increases at
- least by the key size at the power of two. </font></p>
- <p align="justify"><font face="Arial" size="2">A new approach implying
- self-compiling machine code solves that problem. Execution time
- increases only linearly with key size. The idea behind it is to
- randomize the algorithm itself. ThatÆs why I have named it ä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. <br>
- 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. </font></p>
- <p><b><span lang="EN-GB" style="font-family: Arial">Basic principle of
- the Polymorphic Method</span></b></p>
- <p align="justify"><font face="Arial">
- <img border="0" src="img/pmm_e.jpg" align="left" width="400" height="400"><font size="2">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.
- </font></font></p>
- <p align="justify"><font face="Arial" size="2">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. <br>
- <br>
- It is even more confusing to sometimes recompile the instruction
- sequence. This makes the method dynamically polymorphic. </font></p>
- <p align="justify"><font face="Arial" size="2">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 key
- data array and performs permutations, modulo-divisions, shifts and other
- nonlinear operations. </font></p>
- <p align="justify"><font face="Arial" size="2">An implementation of a
- Polymorphic Method is publically available as a Windows program called
- äBest Possible Privacyô. ItÆs crypto engine uses the CPU register ebx as
- input and output register, eax as general purpose buffer and ebp as base
- pointer to the key data array. The key data array that ebp points at is
- 256 bytes long. </font></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-size:12.0pt;font-family:Arial">Example of
- a simple building block</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">The xor
- operation alters ebx and four bytes of the key data array:</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- push ebp; // save the
- start address of the key data array for later<br>
- mov eax,123;
- // load offset: constant data which was calculated by the compiler<br>
- add ebp,eax;<br>
- </span>
- <span style="font-size:8.0pt;font-family:"Courier New""> </span><span lang="EN-GB" style="font-size: 8.0pt; font-family: Courier New">
- mov eax,[ebp+0]; // load key[ebp+0] in AL and key[ebp+1] in the
- next upper byte of eax and<br>
- </span>
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- // so on up to key[ebp+3]<br>
- xor ebx,eax;
- // this instruction can be replaced by another or a set of instructions<br>
- xor [ebp+x],ebx; // change the key data array frequently; x is
- defined by the compiler and<br>
-
- </span>
- <span lang="EN-GB" style="font-size: 8.0pt; font-family: Courier New">//
- chooses one element of the key<br>
- </span>
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- pop ebp; //
- restore start address of the key data array</span></p>
- <p class="MsoNormal" style="text-align:justify">
- <font size="2" face="Arial">Instead of xor it is of course possible to
- calculate sums, to perform shifts, multiplications and modulo divisions,
- as well as to calculate pseudorandom numbers with more complex
- instruction combinations. A good implementation of the presented method
- should rely on a set of building blocks which change a lot of key bytes
- and not just 32 bit. Simple xor instructions, as well as addition and
- subtraction are cryptographically weak, but the general code assembly
- method can be demonstrated best with these. <br>
- <br>
- Instructions should alter the key quite frequently for not to offer the
- possibility to cryptoanalyze it by using a ciphertext codebook. When the
- method is used as pseudo random number generator, the result in ebx can
- be further processed. The internal state represented by the key data
- array is big enough for not to be directly or indirectly exposed. </font>
- </p>
- <p align="justify"><font size="2" face="Arial">An example for a much
- more cryptographically safe building block is a CRC32 implementation:
- </font></p>
- <p align="justify"><font size="2" face="Arial">The function calculates a
- 32 bit CRC according to IEEE 802. The polynomial is: x32 + x26 + x23 +
- x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 +x + 1. X32 does of
- course not exist and the 1 only inverts the input data. Thus, the
- polynomial can be written as: $04C11DB7 </font></p>
- <p class="MsoNormal">
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- push ebp; // ebp MUST
- never be really destroyed<br>
- and eax,127; // perform an operation with
- four key bytes at a time using eax from the<br>
-
- previous instruction block<br>
- add ebp,eax;<br>
- mov eax,[ebp+0]; // load key[ebp+0] in AL and key[ebp+1] in the
- next upper byte of eax<br>
- </span>
- <span style="font-size:8.0pt;font-family:"Courier New"">
- </span>
- <span lang="EN-GB" style="font-size: 8.0pt; font-family: Courier New">
- and so on up to key[ebp+3]<br>
- </span>
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- mov esi,ebp; // save ebp for later to
- alter the key<br>
- pop ebp; // get
- original base of the key data array<br>
- push ebp; // restore
- stack frame<br>
- push ebx; // save ebx for
- later<br>
- mov ecx,32; // counter for the loop<br>
- </span>
- <span style="font-size:8.0pt;font-family:"Courier New""> </span><span lang="EN-GB" style="font-size: 8.0pt; font-family: Courier New">
- xor edx,edx; // edx is used to clear the
- zero flag before the loop @rep1 command below<br>
- </span>
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- @rep1:rcl ebx,1; // shift data in from ebx<br>
- </span>
- <span style="font-size:8.0pt;font-family:"Courier New""> </span><span lang="EN-GB" style="font-size: 8.0pt; font-family: Courier New">
- rcl eax,1; // use eax as CRC
- buffer<br>
- </span>
- <span lang="EN-GB" style="font-size:8.0pt;font-family:"Courier New"">
- jnc @cnt1; // CRC decision<br>
- xor eax,$04C11DB7; // xor with IEEE
- 802 generator polynomial<br>
- @cnt1:add dl,1; // clear Zero-Flag (will be
- rarely necessary)<br>
- loop @rep1;<br>
- pop ebx; // restore
- old ebx value. ebx keeps a running 32 bit result<br>
- mov ebp,esi; // get the address of the
- previously selected key data bytes<br>
- mov [ebp+0],eax; // alter the key<br>
- xor ebx,eax; // alter ebx<br>
- // here is the end of the CRC routine<br>
- pop ebp; //
- exit the routine by restoring the original ebp<br>
- <br>
- </span><font face="Arial" size="2">The presented building block only
- affects four key data bytes. Depending on the size of the key data array
- it should affect much more key bits for good attack security. It is very
- simple to extend the routine for satisfying this demand. </font></p>
- <p align="justify"><font face="Arial" size="2">It is possible to add
- loops over one or more instruction blocks. This is usually performed by
- adding the 80386 loopne-command. The method spends more time on
- crunching instructions and that simply slows it down in order to make
- cryptoanalysis a time-consuming job. By altering ebp with every loop
- cycle, the key can influence the algorithm more often. </font></p>
- <p align="justify"><font face="Arial" size="2">8192 bit keys are
- definitely too long. The increase in security with so many key bits is
- negligible compared to 256 bit. Uncrackable is simply uncrackable. In
- spite of this, the implementation of PMC in ciphers.deÆs BPP file
- encryption tool comes with this key size. Why not? </font></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-size:12.0pt;font-family:Arial">Attack
- security</span></b><span lang="EN-GB" style="font-family:Arial"> </span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Each
- instruction affects at least 32 bits of data and sometimes it alters the
- key.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">If there are
- only 4 cryptographic instruction blocks and 16 of these blocks can be
- assembled chaotically one after the other, there exist 4<sup>16</sup> =
- 4294967296 different possibilities for the actual encryption algorithm!
- If 128 instruction blocks were to be assembled, a choice of 4<sup>128</sup>
- = 1,158*10<sup>77</sup> combinations would result (standard 128 bit
- encryption yields a total of 3,403*10<sup>38</sup>).</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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 2<sup>128</sup> = 3,403*10<sup>38</sup> combinations for the
- key stored in the key data array. The two keyspaces multiplied yield
- 1,158*10<sup>77</sup> * 3,403*10<sup>38</sup> = 3,913*10<sup>115</sup>
- possible key combinations for the Polymorphic Method.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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 <u>data</u> key, this comparison is legal. Thus, the
- polymorphic method beats any conventional method by a factor of 3,913*10<sup>115</sup>
- / 3,403*10<sup>38</sup> = 1,150*10<sup>77 </sup> (!). This is more than
- the number of atoms on our planet!</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">The actual
- implementation in the cryptographic program äBest Possible Privacyô uses
- 32 instructions and three bit of constant data per instruction. Thus,
- there are 32 ways to affect the algorithm multiplied by 8 possibilities
- for constant data => 256 = 2<sup>8</sup> variations</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">If the
- algorithm is limited to 1024 instruction blocks, there are 2<sup>(1024 *
- 8)</sup> = 2<sup>8192</sup> different code combinations possible and
- equally probable! The 256 byte keyspace further enhances attack security
- to yield 2<sup>8192</sup> * 2<sup>2048 </sup>= 2<sup>10240</sup>. Note
- that nearly 100% of the security comes from the compiler. The new method
- uses commonly known techniques but enhances them significantly.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-size:12.0pt;font-family:Arial">Attacks
- and their likelyhood of success on the Polymorphic Method</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Attacks are
- not algorithms, but instead just general approaches which must be
- reinvented for every new type of </font></span><font size="2">
- <span style="font-family:Arial">c</span><span lang="EN-GB" style="font-family: Arial">ipher.</span><span style="font-family:Arial"><br>
- I</span></font><span lang="EN-GB" style="font-family:Arial"><font size="2">t
- 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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Exhaustive Search (Brute
- Force on the keys)</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Try each
- possible key until the message deciphers properly. Try most-likely keys
- first.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Chosen Key</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Try various
- keys on known plaintext and compare the resulting ciphertext to the
- actual ciphertext, to try and build the correct key value.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Ciphertext-Only Codebook</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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.<br>
- 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.<br>
- 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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Known Plaintext</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Somehow
- "obtain" both the plaintext and the corresponding ciphertext for some
- large number of encipherings under one key.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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!</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Known-Plaintext Codebook</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Collect as
- many ciphertexts and associated plaintext blocks as possible; then, when
- a ciphertext occurs, look it up.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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.<br>
- As the key is more or less the algorithm itself, the idea to create a
- table ends in logging noise.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Chosen Plaintext</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Chosen-Plaintext Codebook</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Create as
- many ciphertexts and associated plaintext blocks as possible; then, when
- a ciphertext occurs, look it up.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Meet-in-the-Middle</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Key Bit Bias</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Differential Cryptanalysis</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Exploit
- known properties of particular known substitution tables to effectively
- reduce the number of "rounds" in an iterated block cipher.</font></span></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">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.<br>
- 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.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-family:Arial">Summary</span></b></p>
- <p class="MsoNormal" style="text-align:justify">
- <span lang="EN-GB" style="font-family:Arial"><font size="2">Except for
- the possibility to gain knowledge of the final state of the key data
- array in the basic configuration, there is nothing else to find out.
- There is no possibility to identify a key other than by searching
- exhaustively. The available keyspace is much greater than for any other
- cryptographic method. In order to compare the presented method with
- conventional methods, a conventional method has some data keyspace and
- only one possibility for the algorithm. The presented Polymorphic Method
- has the same data keyspace and an additional algorithm keyspace. All in
- all, the new method features a dramatic increase in security compared to
- common approaches.<br>
- It is worth imagining that cryptographically strong ciphers like DES,
- GOST, IDEA; Hashes, etc. are the building blocks of the Polymorphic
- Method. The weaknesses of each specific building block would vanish. The
- result would probably be a perfect cipher.</font></span></p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span style="font-size:12.0pt;
- font-family:Arial">Speed</span></b></p>
- <p align="justify">
- <img border="0" src="img/pmc_speed.gif" width="800" height="600"></p>
- <p align="justify"><font size="2" face="Arial">The original
- implementation of PMC in the BPP file encryption tool is by far too slow
- when compared with the latest developments. The latest variant with 512
- bit key length is implemented in PMC Ciphers <i>BPP Disk Encryption</i>.
- This crypto engine comes with an encryption speed of 500Mbit/s, which is
- approximately 10 times the speed of AES (Rijndael algorithm) operating
- with 256 bit keys! <i>BPP Disk</i> is a hard disk encryption tool which
- adds encrypted file-hosted volumes and encrypts raw NTFS partitions. It
- is available for Windows 2000 ,Windows XP and ôWindows 2003 Serverö
- operating systems.</font></p>
- <p class="MsoNormal" style="text-align:justify"> </p>
- <p class="MsoNormal" style="text-align:justify"><b>
- <span lang="EN-GB" style="font-size:12.0pt;font-family:Arial">Conclusion</span></b></p>
- <p><font face="Arial" size="2">For PMC, which was secret of state in
- 1999 in Germany, there exists no attack other than exhaustive search.
- ThereÆs no theoretical or practical way to to reconstruct keys from
- plaintext.<br>
- The presented method comes with a comparable number of ädata keysô as
- conventional symmetric encryption methods. It adds a significant amount
- of possible and equally probable algorithmic keys, thus yielding
- substancially higher security and speed. </font></p>
- <p><font face="Arial" size="2">The 512 bit PMC crypto engine implemented
- in our product <i>BPP Disk Encryption </i>uses the most probably fastest
- encryption algorithm in the world! </font></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
- </body>
-
- </html>
-