home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2004 June
/
Chip_2004-06_cd1.bin
/
software
/
turbocrypt
/
Setup_BPP_Disk.msi
/
_4603A479407C4043518EF709F41A325D
/
_60EBFAA0F3BC4C6C919D352C3CD505A6
< prev
next >
Wrap
Text File
|
2003-11-15
|
47KB
|
728 lines
<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>