Как вы представляете x-битный ключ в коде? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть фундаментальное неправильное понимание термина x-bit key. Я кодирую шифр (TEA, OFB Mode) х-битного ввода. Но как мне представить это в коде. Какую переменную я использую, чтобы содержать эти цифры.

Например, 4-битный ключ. Я понимаю, что это означает 16 различных возможностей и т. Д. Значит ли это, что я в буквальном смысле принимаю целое число из 4 с 1 и 0? Я также знаю о байтовых переменных. Но как это входит в игру. Может какая-то добрая душа, пожалуйста, пролить свет

1 Ответ

0 голосов
/ 04 мая 2019

Ключи, как правило, кратны 8, потому что компьютеры используют 8-битный байт или октет как наименьшее количество адресуемой информации. Таким образом, 128-битный ключ для современного симметричного шифра состоит из 128/8 = 16 байтов данных. Таким образом, ключи в программном обеспечении часто доставляются в виде байтового массива, где каждый байт может иметь каждое из 256 возможных значений.

На более низком уровне шифры обычно программируются с использованием 32- или 64-битных слов. Поэтому иногда ключ должен быть представлен в виде слов такого размера. Обычно используется интерфейс более высокого уровня, который преобразует байты во слова, используемые внутри, поэтому вы не увидите представление в слове ключа на внешней стороне интерфейса.

Объектно-ориентированные реализации часто требуют обертки объектов вокруг байтов. Точно так же вы можете иметь ключ и шифровать операции на аппаратном уровне. В этом случае может использоваться ключевая ссылка, часто представляемая объектом или структурой данных Си, содержащей ссылку. В этом случае оборудование работает с байтами и / или словами. Интерфейс Java SecretKey может представлять собой либо аппаратный ключ, либо программный ключ (который может быть создан с использованием SecretKeySpec, который принимает в качестве аргумента байтовый массив).

Четырехбитный ключ не представляет какой-либо жизнеспособный уровень безопасности. Вы можете представить это, используя любые 4 бита байта, обычно младшие 4 бита. Или вы можете использовать младшие 4 бита целого числа. Но, как указано, 4 бита не имеют никакого смысла, и большинство ключей кратны 8 или даже 32 битам, чтобы упростить задачу.


Асимметричные ключи - такие как RSA или ключ на основе эллиптической кривой - совершенно разные звери. Эти криптосистемы основаны на целочисленной арифметике вместо битовых операций. Размер ключа определяется одним из значений в криптосистеме. Например, для ключей RSA используется размер размера модуля. Поскольку эти ключи обычно состоят из нескольких значений, они должны быть закодированы в (предпочтительно стандартизированной) структуре данных. Эта структура данных, конечно, обычно больше размера ключа, так как значение, которое определяет ключ, часто является его частью.

...