Вопрос по DES

Общие вопросы по защите программного обеспечения

Вопрос по DES

Сообщение Max Rusov » Пн, 04 фев 2008 17:12

Не могли бы Вы для чайника в криптографии привести пример реализации TDES CBC алгоритма на основе ECB имеющегося в SES?
Max Rusov
 
Сообщения: 27
Зарегистрирован: Чт, 10 янв 2008 16:25

Сообщение hijaq » Пн, 04 фев 2008 18:57

Да, конечно. Возможны две реализации - полностью через ключ или частично. Обе реализации будут безопасны, просто всё зависит от потребностей и объёма шифруемых данных. Вот пример использования внутри ключа:

Код: Выделить всё
// Вектор инициализации для CBC 3DES
unsigned char TdesIv[8] = { 0x81,0x54,0xB0,0x43,0x91,0x45,0x1F,0x91 };

// Ключ шифрования 3DES
unsigned char TdesKey[16] = { 0xC0,0xDE,0xF3,0x03,0x92,0x78,0x44,0xFE,0x4D,0x00,0x99,0x08,0x00,0x02,0xB9,0x41 };

/****************************************************************************
   tdes_dec_cbc()
****************************************************************************/
u8_t tdes_dec_cbc(u8_t *buff, u16_t size)
{
// ---------------------
   u8_t   error = 0;
   u16_t   i;
   u8_t   *cur_ptr = (u8_t*)buff;
   u16_t   cur_size = size;
   u8_t   org_iv[8];
// ---------------------

   _mem_copy(org_iv, TdesIv, 8);
   while (1)
   {
      if (cur_size <= 8)
      {
         for (i=0; i<cur_size; i++)
            cur_ptr[i] ^= org_iv[i];
         break;
      }
      for (i=0; i < 8; i++)
         cur_ptr[i] ^= org_iv[i];
      _mem_copy(org_iv, cur_ptr, 8);
      error = _tdes_enc(TdesKey, 8, org_iv);
      if (error != SES_SUCCESS)
         break;
      cur_size -= 8;
      cur_ptr += 8;
   }
   return error;
}

/****************************************************************************
   tdes_enc_cbc()
****************************************************************************/
u8_t tdes_enc_cbc(u8_t *buff, u16_t size)
{
// ---------------------
   u8_t   error = 0;
   u16_t   i;
   u8_t   *cur_ptr = (u8_t*)buff;
   u16_t   cur_size = size;
   u8_t   tmp_iv[8];
   u8_t   org_iv[8];
// ---------------------
   
   _mem_copy(org_iv, TdesIv, 8);
   while (1)
   {
      if (cur_size <= 8)
      {
         for (i=0; i<cur_size; i++)
            cur_ptr[i] ^= org_iv[i];
         break;
      }
      _mem_copy(tmp_iv, cur_ptr, 8);
      for (i=0; i<8; i++)
         cur_ptr[i] ^= org_iv[i];
      _mem_copy(org_iv, tmp_iv, 8);
      error = _tdes_enc(TdesKey, 8, org_iv);
      if (error != SES_SUCCESS)
         break;
      cur_size -= 8;
      cur_ptr += 8;
   }
   return error;
}
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

Сообщение Max Rusov » Вт, 05 фев 2008 12:47

Большое спасибо. Попробую.
Max Rusov
 
Сообщения: 27
Зарегистрирован: Чт, 10 янв 2008 16:25

Сообщение Max Rusov » Вт, 05 фев 2008 12:54

Смущает, что в обоих функциях используется _tdes_enc. Вы уверены что пример рабочий?
Max Rusov
 
Сообщения: 27
Зарегистрирован: Чт, 10 янв 2008 16:25

Сообщение hijaq » Вт, 05 фев 2008 13:09

Пример рабочий. Если в кратце, то в данном случае tdes_enc() используется для создания изменяющегося для каждого 8-байтного блока нового ключа шифрования, зависящего от предыдущих данных и от вектора инициализации. И для того, чтобы данные могли быть как зашифрованы, так и расшифрованы, требуется создание одинаковых ключей в обоих случаях, поэтому и используется только tdes_enc().
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50

Сообщение Max Rusov » Вт, 05 фев 2008 13:41

Т.е. это пример не CBC алгоритма, а CFB (или OFB), я правильно понимаю?

Умные слова вычитал здесь:
http://en.wikipedia.org/wiki/Block_ciph ... _operation

:D
Max Rusov
 
Сообщения: 27
Зарегистрирован: Чт, 10 янв 2008 16:25

Сообщение hijaq » Вт, 05 фев 2008 14:05

Ну да, точно, CFB (не стали менять названия функций), но это практически одно и то же :wink:
Его совсем несложно переделать в CBC, если в этом есть необходимость. Хотя, я думаю, главное что не ECB :D
hijaq
Site Admin
 
Сообщения: 213
Зарегистрирован: Пт, 06 апр 2007 14:50


Вернуться в Защита программного обеспечения

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron