Ключи, как правило, кратны 8, потому что компьютеры используют 8-битный байт или октет как наименьшее количество адресуемой информации. Таким образом, 128-битный ключ для современного симметричного шифра состоит из 128/8 = 16 байтов данных. Таким образом, ключи в программном обеспечении часто доставляются в виде байтового массива, где каждый байт может иметь каждое из 256 возможных значений.
На более низком уровне шифры обычно программируются с использованием 32- или 64-битных слов. Поэтому иногда ключ должен быть представлен в виде слов такого размера. Обычно используется интерфейс более высокого уровня, который преобразует байты во слова, используемые внутри, поэтому вы не увидите представление в слове ключа на внешней стороне интерфейса.
Объектно-ориентированные реализации часто требуют обертки объектов вокруг байтов. Точно так же вы можете иметь ключ и шифровать операции на аппаратном уровне. В этом случае может использоваться ключевая ссылка, часто представляемая объектом или структурой данных Си, содержащей ссылку. В этом случае оборудование работает с байтами и / или словами. Интерфейс Java SecretKey
может представлять собой либо аппаратный ключ, либо программный ключ (который может быть создан с использованием SecretKeySpec
, который принимает в качестве аргумента байтовый массив).
Четырехбитный ключ не представляет какой-либо жизнеспособный уровень безопасности. Вы можете представить это, используя любые 4 бита байта, обычно младшие 4 бита. Или вы можете использовать младшие 4 бита целого числа. Но, как указано, 4 бита не имеют никакого смысла, и большинство ключей кратны 8 или даже 32 битам, чтобы упростить задачу.
Асимметричные ключи - такие как RSA или ключ на основе эллиптической кривой - совершенно разные звери. Эти криптосистемы основаны на целочисленной арифметике вместо битовых операций. Размер ключа определяется одним из значений в криптосистеме. Например, для ключей RSA используется размер размера модуля. Поскольку эти ключи обычно состоят из нескольких значений, они должны быть закодированы в (предпочтительно стандартизированной) структуре данных. Эта структура данных, конечно, обычно больше размера ключа, так как значение, которое определяет ключ, часто является его частью.