Информация об изменениях

Сообщение Re[6]: Подружить ChaCha20 с ключами разной длины от 15.01.2024 6:14

Изменено 15.01.2024 6:16 TheBeginner

Re[6]: Подружить ChaCha20 с ключами разной длины
Здравствуйте, CreatorCray, Вы писали:

TB>>Возможно это и так. Интересно что будет если "добрать" до 256 открытыми байтами.

CC>Мда. С таким уровнем теоретической подготовки лучше не трогать криптографию — сделаешь только хуже

Да вопрос то теоретический больше. Конечно, если есть ограничение по длине ключа скажем 56 бит то лучше просто взять DES (В Америке как и в России как понимаю такие же правила к экспортному контролю, даже для бесплатной фривары https://www.bis.doc.gov/index.php/policy-guidance/encryption?)

В этой реализации при kbits == 128 ключ копируется при инициализации input. Какие еще варианты могут быть чтобы сказать, что ключ формально отвечает заданной разрядности. Подмешивать известные байты в input, что то еще. Повторяю — вопрос теоретический.
И если вы знаете алгоритм шифрования эквивалентный стойкости с AES при одинаковой длине ключа, но позволяющий задавать ключи произвольной длины — напишите.
Я профессионально криптографией не занимаюсь, мне просто интересно

void ECRYPT_keysetup(ECRYPT_ctx *x,const u8 *k,u32 kbits,u32 ivbits)
{
  const char *constants;

  x->input[4] = U8TO32_LITTLE(k + 0);
  x->input[5] = U8TO32_LITTLE(k + 4);
  x->input[6] = U8TO32_LITTLE(k + 8);
  x->input[7] = U8TO32_LITTLE(k + 12);
  if (kbits == 256) { /* recommended */
    k += 16;
    constants = sigma;
  } else { /* kbits == 128 */
    constants = tau;
  }
  x->input[8] = U8TO32_LITTLE(k + 0);
  x->input[9] = U8TO32_LITTLE(k + 4);
  x->input[10] = U8TO32_LITTLE(k + 8);
  x->input[11] = U8TO32_LITTLE(k + 12);
  x->input[0] = U8TO32_LITTLE(constants + 0);
  x->input[1] = U8TO32_LITTLE(constants + 4);
  x->input[2] = U8TO32_LITTLE(constants + 8);
  x->input[3] = U8TO32_LITTLE(constants + 12);
}
Re[6]: Подружить ChaCha20 с ключами разной длины
Здравствуйте, CreatorCray, Вы писали:

TB>>Возможно это и так. Интересно что будет если "добрать" до 256 открытыми байтами.

CC>Мда. С таким уровнем теоретической подготовки лучше не трогать криптографию — сделаешь только хуже

Да вопрос то теоретический больше. Конечно, если есть ограничение по длине ключа скажем 56 бит то лучше просто взять DES (В Америке как и в России как понимаю такие же правила к экспортному контролю, даже для бесплатной фривары https://www.bis.doc.gov/index.php/policy-guidance/encryption?)

В этой реализации при kbits == 128 ключ копируется при инициализации input. Какие еще варианты могут быть чтобы сказать, что ключ формально отвечает заданной разрядности. Подмешивать известные байты в input, что то еще. Повторяю — вопрос теоретический.
И если вы знаете алгоритм шифрования эквивалентный стойкости с AES и желательно выше по скорости при софтверной реализации при одинаковой длине ключа, но позволяющий задавать ключи произвольной длины — напишите.
Я профессионально криптографией не занимаюсь, мне просто интересно

void ECRYPT_keysetup(ECRYPT_ctx *x,const u8 *k,u32 kbits,u32 ivbits)
{
  const char *constants;

  x->input[4] = U8TO32_LITTLE(k + 0);
  x->input[5] = U8TO32_LITTLE(k + 4);
  x->input[6] = U8TO32_LITTLE(k + 8);
  x->input[7] = U8TO32_LITTLE(k + 12);
  if (kbits == 256) { /* recommended */
    k += 16;
    constants = sigma;
  } else { /* kbits == 128 */
    constants = tau;
  }
  x->input[8] = U8TO32_LITTLE(k + 0);
  x->input[9] = U8TO32_LITTLE(k + 4);
  x->input[10] = U8TO32_LITTLE(k + 8);
  x->input[11] = U8TO32_LITTLE(k + 12);
  x->input[0] = U8TO32_LITTLE(constants + 0);
  x->input[1] = U8TO32_LITTLE(constants + 4);
  x->input[2] = U8TO32_LITTLE(constants + 8);
  x->input[3] = U8TO32_LITTLE(constants + 12);
}