Triple des

Алгоритм[править | править код]

Схема алгоритма 3DES имеет такой вид, как на рисунке. Простой вариант 3DES можно представить так:

DES(k3;DES(k2;DES(k1;M))){\displaystyle DES(k_{3};DES(k_{2};DES(k_{1};M)))}

где k1{\displaystyle k_{1}}, k2{\displaystyle k_{2}}, k3{\displaystyle k_{3}} — ключи для каждого DES-шага, M{\displaystyle M} — входные данные, которые нужно шифровать. Существует 3 типа алгоритма 3DES:

DES-EEE3: Шифруется три раза с тремя разными ключами (операции шифрование-шифрование-шифрование).

Шифрование: C=Ek3(Ek2(Ek1(P))){\displaystyle C=E_{k_{3}}(E_{k_{2}}(E_{k_{1}}(P)))}
Расшифрование: P=Ek1−1(Ek2−1(Ek3−1(C))){\displaystyle P=E_{k_{1}}^{-1}(E_{k_{2}}^{-1}(E_{k_{3}}^{-1}(C)))}

DES-EDE3: 3DES операции шифровка-расшифровка-шифровка с тремя разными ключами.

Шифрование: C=Ek3(Ek2−1(Ek1(P))){\displaystyle C=E_{k_{3}}(E_{k_{2}}^{-1}(E_{k_{1}}(P)))}
Расшифрование: P=Ek1−1(Ek2(Ek3−1(C))){\displaystyle P=E_{k_{1}}^{-1}(E_{k_{2}}(E_{k_{3}}^{-1}(C)))}

DES-EEE2 и DES-EDE2: Как и предыдущие, за исключением того, что на первом и третьем шаге используется одинаковый ключ.

Шифрование: C=Ek1(Ek2−1(Ek1(P))){\displaystyle C=E_{k_{1}}(E_{k_{2}}^{-1}(E_{k_{1}}(P)))}
Расшифрование: P=Ek1−1(Ek2(Ek1−1(C))){\displaystyle P=E_{k_{1}}^{-1}(E_{k_{2}}(E_{k_{1}}^{-1}(C)))}

Самая популярная разновидность 3DES — это DES-EDE3.

The DES S-Boxes (in round function)

For the S-Box stage of encryption, the input (output of exclusive-or) is broken into eight six-bit blocks (the rows in the Table in the previous section). Each of these blocks passes through a different Substitution Box or S-Box. An example of the first S-Box is shown in the table below.

To use the S-Box, the row and column are selected using the outer two and inner four bits of the binary representation of the input using the format shown in the Table. For example, an input of 101100 would use the third row (the outer two bits of 10110 are 10, which is 2 and we start counting at zero) and the seventh column (the inner four bits of 101100 are 0110, which is 6 and we start counting at zero). Therefore, the output of the first S-Box for an input of 101100 is 2. Since the S-Box downsizes the input from 6-bits to 4-bits (half-block inputs to rounds are thirty-two bits and we have eight S-Boxes), this is represented as 0010.

As an example, let’s use the output of the previous expansion example: 111010 101000 000000 001001 011010 101001 011110 100111. For this example, we’ll use the same S-Box for all of the input values but in actuality, each value would pass through a different S-Box. In the example, S(A,B) refers to the cell at the intersection of row A and column B in the S-Box Table.

In: 111010 101000 000000 001001 011010 101001 011110 100111
111010: S(10,1101)= 10= 1010
101000: S(10,0100)= 13= 1101
000000: S(00,0000)= 14= 1110
001001: S(01,0100)= 14= 1110
011010: S(00,1101)=  9= 1001
101001: S(11,0100)=  4= 0100
011110: S(00,1111)=  7= 0111
100111: S(11,0011)=  2= 0010
Out: 10101101 11101110 10010100 01110010

Permuted Choice 2

After the shift occurs, the round key is generated using the Permuted Choice 2 (PC-2) algorithm. This algorithm is shown in the Table below.

The PC-2 algorithm takes a 56-bit subkey as input and produces a 48-bit round key. Each bit of the initial 56-bit key is used in an average of 14 of 16 round keys.

As an example, we’ll use the output of the PC-1 algorithm as input: 1111110 0100001 1010011 0011001 0110111 1011111 0101100 0001001.

In: 1111110 0100001 1010011 0011001 0110111 1011111 0101100 0001001
K=1, K=1, K=0, K=1, K=1, K=1
K=1, K=1, K=1, K=1, K=1, K=0
K=0, K=0, K=0, K=1, K=0, K=0
K=0, K=0, K=0, K=1, K=0, K=1
K=1, K=0, K=1, K=0, K=1, K=0
K=1, K=1, K=0, K=0, K=1, K=0
K=1, K=0, K=1, K=1, K=1, K=1
K=1, K=1, K=0, K=1, K=0, K=0
Out: 110111 111110 000100 000101 101010 110010 101111 110100

Decryption with DES

Like all other Feistel ciphers, the process for decryption in DES follows the exact same steps as encryption, apart from the fact that the round keys need to be used in reverse order.

3DES: Triple DES

The DES algorithm is not currently in use in its original form due to the small size of its secret key. In 1999, it was demonstrated that DES could be broken using a brute force search of all possible keys in less than a day. A variant of DES called 3DES (pronounced «Triple DEZ») is still in use where a DES is run three times in sequence using distinct keys (which triples the size of the secret key to be shared).

Advantages

DES is broken; however, 3DES is currently considered a secure cipher. DES does have the desirable properties of confusion and diffusion: each bit of ciphertext is based upon multiple bits of the key and changing a single bit of plaintext changes, on average, half of the bits of ciphertext.

Due to its Feistel structure and uncomplicated logic, DES is relatively easy to implement. However, it uses eight distinct S-Boxes, which increases its footprint (AES uses a single S-Box).

Disadvantages

The main disadvantage to DES is that it is broken using brute-force search. However, using 3DES mitigates this issue at the cost of increasing execution time.

DES is also vulnerable to attacks using linear cryptanalysis. However, it takes 247 known plaintexts to break DES in this manner.

Пример код для 3DES на C# Править

Шифрование выполняется следующим кодом

private Symmetricalgorithm alg;
alg=(Symmetricalgorithm) Rijndaelmanaged.Create(); //приклад работа класса Rijndaelmanaged
Passwordderivebytes pdb=new Passwordderivebytes(Password.Text,null); //клас что позволяет генерировать   ключи для базе паролей
pdb.HashName="SHA512"; //будемо потреблять Sha512
int keylen=(int) Keysize.SelectedItem; //одержуемо величина ключа из Combobox’а
alg.KeySize=keylen; //установлюемо величина ключа
alg.Key=pdb.GetBytes(keylen>>3); //одержуемо источник из пароля
alg.Mode=CipherMode.CBC; //використаемо склад CBC
alg.IV=new Byte; //и вздорный инициализацийний вектор
Icryptotransform tr=alg.CreateEncryptor(); //створюемо encryptor
Filestream instream=new FileStream(inFile.Text,FileMode.Open,FileAccess.Read,FileShare.Read);
FileStream outstream=new
FileStream(outFile.Text,FileMode.Create,FileAccess.Write,FileShare.None);
int buflen=((2<<16)/alg.BlockSize) *alg.BlockSize;
байт []inbuf=new байт;
байт []outbuf=new байт;
int len;
while((len=instream.Read(inbuf,0,buflen))==buflen)
int enclen=tr.TransformBlock(inbuf,0,buflen,outbuf,0); //властиво шифруем
outstream.Write(outbuf,0,enclen);
instream.Close();
outbuf=tr.TransformFinalBlock(inbuf,0,len);//шифруемо финальный блок
outstream.Write(outbuf,0,outbuf.Length);
outstream.Close();
alg.Clear(); //здийснюемо зачищает

Шифрование и дешифрование выполняются с помощью функций:
BOOL WINAPI Cryptencrypt(HCRYPTKEY hkey,hcrypthash hhash,bool Final,dword
dwflags,byte* pbdata,dword* pdwdatalen,dword dwbuflen);
BOOL WINAPI Cryptdecrypt(HCRYPTKEY hkey,hcrypthash hhash,bool Final,dword
dwflags,byte* pbdata,dword* pdwdatalen).
Параметр hhash позволяет параллельно с шифровкой/дешифрацией проводить хеширування данных для следующей электронной подписи или ее проверки. Флаг Final определяет, является ли шифрованный блок данных последним. Он необходим, поскольку данные дозволено шифровать применительно частям, все для последнего блока ввек выполняется определенная деинициализация алгоритму (освобождаются внутренние структуры), и много алгоритмов делают добавление (и проверку корректности около дешифрации) заполнителя (padding) затем основных данных. Параметры pbdata и pdwdatalen задают адрес буфера и величина шифрованных данных. Для блока данных (Final=false) величина данных должен быть ввек кратный размеру шифрованного алгоритмом блока (для 3des и DES сей величина равняется 64 битам). Для последнего блока допускается нарушение этого условия.
Заметим, который зашифрованы основание содержатся в доля же буфере этаж выходных. Последний параметр функции Cryptencrypt — dwbuflen может заболевать странным. Зачем нам величина буфера, или мы и беспричинно знаем величина входных данных? Однако в действительности он необходим. Много алгоритмов добавляют заполнитель в новый блок затем основных данных. В этом случае величина зашифрованных данных может бть больше, чем размер выходных данных. И произведение может невзыскательный не вместиться в буфер! Поэтому стоит предварительно указать величина буфера, какой превышает максимальный величина открытых данных, который помещают в его. Для DES и 3des максимально возможен довисок составляет 64 бита, то есть 8 байт.

Режимы работы блочного шифра

Основная статья: Режим шифрования

Сам по себе блочный шифр позволяет шифровать только одиночные блоки данных предопределенной длины. Если длина сообщения меньше длины блока (англ. blocklength), то оно дополняется до нужной длины. Однако, если длина сообщения больше, возникает необходимость его разделения на блоки. При этом существуют несколько способов шифрования таких сообщений, называемые режимами работы блочного шифра.

Шифрование независимыми блоками

оригинальное изображение

криптограмма в режиме ECB

псевдослучайная последовательность

Простейшим режимом работы блочного шифра является или режим простой замены (англ. Electronic CodeBook, ECB), где все блоки открытого текста зашифровываются независимо друг от друга. Однако, при использовании этого режима статистические свойства открытых данных частично сохраняются, так как каждому одинаковому блоку данных однозначно соответствует зашифрованный блок данных. При большом количестве данных (например, видео или звук) это может привести к утечке информации о их содержании и дать больший простор для криптоанализа.

Удаление статистических зависимостей в открытом тексте возможно с помощью предварительного архивирования, но оно не решает задачу полностью, так как в файле остается служебная информация архиватора, что не всегда допустимо.

Шифрование, зависящее от предыдущих блоков

Шифрование в режиме сцепления блоков шифротекста

Чтобы преодолеть эти проблемы, были разработаны иные режимы работы, установленные международным стандартом ISO/IEC 10116 и определеные национальными рекомендациями, такие, как NIST 800-38A и BSI TR-02102

Общая идея заключается в использовании случайного числа, часто называемого (IV). В популярном (англ. Cipher Block Chaining, CBC) для безопасности IV должен быть случайным или псевдослучайным. После его определения, он складывается при помощи операции исключающее ИЛИ с первым блоком открытого текста. Следующим шагом шифруется результат и получается первый шифроблок, который используем как IV для второго блока и так далее. В (англ. Cipher Feedback, CFB) непосредственному шифрованию подвергается IV, после чего складывается по модулю два (XOR, исключающее ИЛИ) с первым блоком. Полученный шифроблок используется как IV для дальнейшего шифрования. У режима нет особых преимуществ по сравнению с остальными. В отличие от предыдущих режимов, (англ. Output Feedback, OFB) циклически шифрует IV, формируя поток ключей, складывающихся с блоками сообщения. Преимуществом режима является полное совпадение операций шифрования и расшифрования. (англ. Counter, CTR) похож на OFB, но позволяет вести параллельное вычисление шифра: IV объединяется с номером блока без единицы и результат шифруется. Полученный блок складывается с соответствующим блоком сообщения.

Следует помнить, что вектор инициализации должен быть разным в разных сеансах. В противном случае приходим к проблеме режима ECB. Можно использовать случайное число, но для этого требуется достаточно хороший генератор случайных чисел. Поэтому обычно задают некоторое число — метку, известную обеим сторонам (например, номер сеанса) и называемое nonce (англ. Number Used Once — однократно используемое число). Секретность этого числа обычно не требуется. Далее IV — результат шифрования nonce. В случае режима счетчика, nonce используется для формирования раундового ключа Ki:

Ki=EK(nonce||i−1),i=1,..,n,{\displaystyle K_{i}=E_{K}(nonce||i-1),i=1,..,n,} где i — номер раунда.

Дополнение до целого блока

Как уже упоминалось выше, в случае, если длина самого сообщения, либо последнего блока, меньше длины блока, то он нуждается в дополнении. Простое дополнение нулевыми битами не решает проблемы, так как получатель не сможет найти конец полезных данных. К тому же, такой вариант приводит к .

Поэтому на практике применимо решение, стандартизованное как «Метод дополнения 2» () в ISO/IEC 9797-1, добавляющее единичный бит в конец сообщения и заполняющее оставшееся место нулями. В этом случае была доказана стойкость к подобным атакам.

Причины появления

Прародитель шифра 3DES — DES — был создан в далеком 1975 году. Однако, вместе с развитием технологий защиты информации, развивались и технологии взлома. Именно скорость в подборе ключей, зашифрованных с помощью DES стала основной проблемой этого метода шифрования. Но изобретение нового алгоритма шифрования потребовало бы много денег и времени не только на саму разработку, но и на то, чтобы изменить существую структуру безопасности многих мировых компаний, которые уже использовали DES. Вскоре, прагматичное решение было найдено. Предлагалось изменить не сам шифр, а способ его применения. Именно тогда появился 3DES.

Synopsis

#include <openssl/des.h>

void DES_random_key(DES_cblock *ret);

int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule);
int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule);
int DES_set_key_checked(const_DES_cblock *key,
       DES_key_schedule *schedule);
void DES_set_key_unchecked(const_DES_cblock *key,
       DES_key_schedule *schedule);

void DES_set_odd_parity(DES_cblock *key);
int DES_is_weak_key(const_DES_cblock *key);

void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
       DES_key_schedule *ks, int enc);
void DES_ecb2_encrypt(const_DES_cblock *input, DES_cblock *output,
       DES_key_schedule *ks1, DES_key_schedule *ks2, int enc);
void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
       DES_key_schedule *ks1, DES_key_schedule *ks2,
       DES_key_schedule *ks3, int enc);

void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output,
       long length, DES_key_schedule *schedule, DES_cblock *ivec,
       int enc);
void DES_cfb_encrypt(const unsigned char *in, unsigned char *out,
       int numbits, long length, DES_key_schedule *schedule,
       DES_cblock *ivec, int enc);
void DES_ofb_encrypt(const unsigned char *in, unsigned char *out,
       int numbits, long length, DES_key_schedule *schedule,
       DES_cblock *ivec);
void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,
       long length, DES_key_schedule *schedule, DES_cblock *ivec,
       int enc);
void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,
       long length, DES_key_schedule *schedule, DES_cblock *ivec,
       int *num, int enc);
void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out,
       long length, DES_key_schedule *schedule, DES_cblock *ivec,
       int *num);

void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output,
       long length, DES_key_schedule *schedule, DES_cblock *ivec,
       const_DES_cblock *inw, const_DES_cblock *outw, int enc);

void DES_ede2_cbc_encrypt(const unsigned char *input,
       unsigned char *output, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int enc);
void DES_ede2_cfb64_encrypt(const unsigned char *in,
       unsigned char *out, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int *num, int enc);
void DES_ede2_ofb64_encrypt(const unsigned char *in,
       unsigned char *out, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int *num);

void DES_ede3_cbc_encrypt(const unsigned char *input,
       unsigned char *output, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec,
       int enc);
void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
       long length, DES_key_schedule *ks1, DES_key_schedule *ks2,
       DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2,
       int enc);
void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
       long length, DES_key_schedule *ks1, DES_key_schedule *ks2,
       DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc);
void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out,
       long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_key_schedule *ks3,
       DES_cblock *ivec, int *num);

DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output,
       long length, DES_key_schedule *schedule,
       const_DES_cblock *ivec);
DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[],
       long length, int out_count, DES_cblock *seed);
void DES_string_to_key(const char *str, DES_cblock *key);
void DES_string_to_2keys(const char *str, DES_cblock *key1,
       DES_cblock *key2);

char *DES_fcrypt(const char *buf, const char *salt, char *ret);
char *DES_crypt(const char *buf, const char *salt);

int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched,
       DES_cblock *iv);
int DES_enc_write(int fd, const void *buf, int len,
       DES_key_schedule *sched, DES_cblock *iv);

Проблема ключа шифрования

Является основополагающей для DES и считается главной причиной, почему стоит отказаться от этого алгоритма. Так как размер ключа в DES составляет 56 бит, то для перебора всех ключей понадобится просмотреть 256 вариантов. Так ли это много?

Если осуществлять по 10 миллионов проверок ключей в секунду, то на проверку уйдет порядка 2000 лет. Кажется, что алгоритм весьма устойчив. Он был таковым в прошлом веке, когда создание компьютера подобной мощности было почти невозможной задачей как с технической, так и с финансовой точки зрения.

Если создать компьютер с миллионом чипов, то перебор всего множества ключей DES займет 20 часов. Первый подобный компьютер для расшифровки по алгоритму DES появился еще в 1998 году, который справился с поставленной задачей за 56 часов. Современные технологии сетей и параллельных процессов позволяют сократить это время еще больше.

Применение

DES был национальным стандартом США в — гг., но в настоящее время DES используется (с ключом длины 56 бит) только для устаревших систем, чаще всего используют его более криптоустойчивый вид (3DES, DESX). 3DES является простой эффективной заменой DES, и сейчас он рассмотрен как стандарт. В ближайшее время DES и Triple DES будут заменены алгоритмом AES (Advanced Encryption Standard — Расширенный Стандарт Шифрования).
Алгоритм DES широко применяется для защиты финансовой информации: так, модуль THALES (Racal) HSM RG7000 полностью поддерживает операции TripleDES для эмиссии и обработки кредитных карт VISA, EuroPay и проч. Канальные шифраторы THALES (Racal) DataDryptor используют TripleDES для прозрачного шифрования потоков информации. Также алгоритм DES используется во многих других устройствах и решениях THALES-eSECURITY.

How long is a triple DES key: 192 or 168 bits?

As mentioned above, a triple DES key is a bundle of three DES keys.
A DES key is 64 bits long, but only 56 bits of these are used in the encryption process.

A triple DES key is therefore 3 x 64 = 192 bits long, but the keyspace is only 3 x 56 = 168 bits.

Note that if your «triple DES» key is not exactly 192-bits long — i.e. exactly 24 bytes long, or 48 hexadecimal digits —
then you do not have a valid triple DES key.

The other 8 bits are meant to be used as error detecting or «parity» bits so, in principle,
the validity of the key bit string can be checked (every byte should be of odd parity), but this is hardly ever done.
Most people and most software packages, including CryptoSys API and CryptoSys PKI,
do not bother to check the parity of the key and just ignore the state of the parity bits.
Be careful, though, because this means that the keys represented, for example, by the following bit strings are treated as being equal,
and will produce identical ciphertext output for the same plaintext input:

0123456789ABCDEF FEDCBA9876543210 89ABCDEF01234567
0022446688AACCEE FFDDBB9977553311 88AACCEE00224466

The P Function (in round function)

The P function in DES is another permutation function. It takes a thrity-two bit block as input and outputs a thirty-two bit block. The permutation is shown in the Table below.

As shown, the permutation for the P function is not as structured as other permutation functions in DES. However, the permutation is not random and is the same for all rounds of DES.

As an example, we’ll use the S-Box output from our example in the previous section: 10101101 11101110 10010100 01110010.

In: 10101101 11101110 10010100 01110010
P=0, P=0, P=1, P=0, P=0, P=0, P=1, P=1
P=1, P=1, P=0, P=1, P=1, P=0, P=1, P=1
P=0, P=1, P=0, P=1, P=0, P=1, P=1, P=1
P=0, P=1, P=0, P=1, P=1, P=1, P=0, P=0
Out: 00100011 11011011 01010111 01011100

The P function is the last step of the round function.

The Initial Permutation

The initial permutation of the DES algorithm changes the order of the plaintext prior to the first round of encryption. The structure of the initial permutation is shown in the Table below.

As shown in the table, the initial permutation makes no attempt to randomize the data. The bits at odd positions in the plaintext fill out the last four output blocks (rows in the table) by filling the last bit of all in order, followed by the second-to-last bit and so on. The first four blocks are filled out using an identical scheme with the bits in the even positions within the plaintext.

As an example, let’s apply the initial permutation to the following plaintext: 00010000 10110111 01100111 11000011 10010101 10111000 01000100 00001011. The initial permutation goes as follows.

In: 00010000 10110111 01100111 11000011 10010101 10111000 01000100 00001011
P=0, P=1, P=0, P=0, P=1, P=1, P=0, P=0
P=0, P=0, P=1, P=1, P=0, P=0, P=1, P=1
P=0, P=1, P=0, P=1, P=0, P=1, P=1, P=0
P=1, P=0, P=0, P=1, P=1, P=1, P=1, P=0
P=0, P=0, P=1, P=1, P=1, P=0, P=1, P=0
P=0, P=0, P=1, P=0, P=0, P=1, P=1, P=0
P=1, P=0, P=1, P=0, P=0, P=0, P=0, P=0
P=1, P=0, P=0, P=0, P=1, P=1, P=1, P=0
Out: 01001100 00110011 01010110 10011110 00111010 00100110 10100000 10001110

After the initial permutation, we the round functions begin, consisting of E function, exclusive-or, S-boxes and P function.

Ключи шифрования

Для шифрования данных в DES используется шестнадцать 48-битовых ключей. По одному ключу на раунд. Каждый ключ создается выборкой 48 бит из 56-битового основного ключа. Создание ключей для того или иного раунда определяется механизмом, подробно описанным в документации DES.

Вкратце алгоритм выборки i ключа выглядит следующим образом. В основной ключ на позиции 8, 16, 24, 32, 40, 48, 56, 64 добавляются биты. Делается это таким образом, чтобы каждый байт содержал нечетное количество единиц. Соблюдение правила помогает обнаруживать ошибки при обмене ключей. После этого, используя специальные таблицы, дополненный ключ подвергается перестановке и сдвигам, за исключением битов, которые были добавлены. Таким образом получается требуемый ключ.

История

В 1972 году было проведено исследование потребности правительства США в компьютерной безопасности. Американское «национальное бюро стандартов» (НБС) (ныне известное, как NIST — «национальный институт стандартов и технологий») определило необходимость в общеправительственном стандарте шифрования некритичной информации.

НБС проконсультировалось с АНБ (агентством национальной безопасности США) и 15 мая 1973 года объявило первый конкурс на создание шифра. Были сформулированы строгие требования к новому шифру. Фирма IBM представила на конкурсе разработанный ею шифр, называемый «Люцифер» (Lucifer). Шифры ни одного из конкурсантов (включая «Люцифер») не обеспечивали выполнение всех требований. В течение 1973—1974 годов IBM доработала свой «Люцифер»: использовала в его основе алгоритм Хорста Фейстеля, созданный ранее. 27 августа года начался второй конкурс. На сей раз шифр «Люцифер» сочли приемлемым.

17 марта 1975 года предложенный алгоритм DES был издан в «Федеральном реестре». В 1976 году для обсуждения DES было проведено два открытых симпозиума. На симпозиумах жёсткой критике подверглись изменения, внесённые в алгоритм организацией АНБ. АНБ уменьшило первоначальную длину ключа и S-блоки (блоки подстановки), критерии проектирования которых не раскрывались. АНБ подозревалось в сознательном ослаблении алгоритма с той целью, чтобы АНБ могло легко просматривать зашифрованные сообщения. Сенат США проверил действия АНБ и в 1978 году опубликовал заявление, в котором сообщалось следующее:

  • в процессе разработки алгоритма представители АНБ убедили создателей DES в том, что уменьшенной длины ключа более чем достаточно для всех коммерческих приложений;
  • представители АНБ косвенно помогали в разработке S-перестановок;
  • окончательная версия алгоритма была, по мнению проверяющих, лучшим алгоритмом шифрования, к тому же лишённым статистической или математической слабости;
  • представители АНБ никогда не вмешивались в разработку алгоритма DES.

В 1990 году Эли Бихам (Eli Biham) и Ади Шамир (Adi Shamir) провели независимые исследования по дифференциальному криптоанализу — основному методу взлома блочных алгоритмов симметричного шифрования. Эти исследования сняли часть подозрений в скрытой слабости S-перестановок. S-блоки алгоритма DES оказались намного более устойчивыми к атакам, чем если бы их выбрали случайно. Это означает, что такая техника анализа была известна АНБ ещё в 1970-х годах.

Алгоритм DES удалось «взломать» за 39 дней с помощью огромной сети, состоящей из десятков тысяч компьютеров.

Общественная организация «EFF», занимающаяся проблемами информационной безопасности и личной тайны в сети Internet, инициировала исследование «DES Challenge II» с целью выявления проблем DES. В рамках исследования сотрудники фирмы «RSA Laboratory» построили суперкомпьютер стоимостью 250 тыс. долл. В 1998 году суперкомпьютер выполнил расшифровку данных, закодированных методом DES с использованием 56-битного ключа, менее чем за три дня. Суперкомпьютер получил название «EFF DES Cracker». Специально по этому случаю учёные организовали пресс-конференцию и с беспокойством говорили о том, что злоумышленники вряд ли упустят случай воспользоваться подобной уязвимостью.

Некоторые правительственные чиновники и специалисты утверждали, что для взлома кода DES требуется суперкомпьютер стоимостью в несколько миллионов долларов. «Правительству пора признать ненадёжность DES и поддержать создание более мощного стандарта шифрования», — сказал президент EFF Барри Штайнхардт. Экспортные ограничения, накладываемые правительством США, касаются технологий шифрования по ключам длиной более 40 бит. Однако, как показали результаты эксперимента RSA Laboratory, существует возможность взлома и более мощного кода. Проблема усугублялась тем, что стоимость постройки подобного суперкомпьютера неуклонно снижалась. «Через четыре-пять лет такие компьютеры будут стоять в любой школе», — заявил Джон Гилмор, руководитель проекта «DES Challenge» и один из основателей EFF.

DES является блочным шифром. Чтобы понять, как работает DES, необходимо рассмотреть принцип работы блочного шифра, сеть Фейстеля.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *