Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Электронные ключи работают с аппаратными алгоритмами по следующей общей схеме: от защищенного приложения к ключу поступает блок данных (вопрос к ключу), и он при помощи симметричного аппаратного алгоритма преобразует (кодирует или декодирует) эту последовательность. Таким образом, получается ответ ключа, посылаемый защищенной программе.
Чаще всего разработчик системы защиты для какого-либо приложения ограничивается весьма небольшим количеством возможных вопросов-ответов, которые используются на протяжении недолгого периода времени. Это сильно облегчает задачу построения табличных эмуляторов, поскольку для отслеживания всех запросов и ответов требуется то самое недолгое время. Это одна из самых распространенных ошибок при разработке систем защиты.
Для эффективной борьбы с созданием табличных эмуляторов число различных запросов и ответов должно быть как можно большим, а время, за которое они будут все использованы, должно измеряться месяцами.
Алгоритмы типа GSII64, с длиной ключа 128 или 256 бит, а также AES, с длиной ключа 128 бит, реализованные в ключах Guardant, симметрично кодируют и декодируют информацию в самом электронном ключе. Это позволяет значительно расширить возможности электронных ключей Guardant и повысить защищенность программного обеспечения за счет того, что данные для кодирования могут динамически изменяться.

Anchor
_Toc101585056
_Toc101585056
Anchor
_Toc132528891
_Toc132528891
Anchor
_Toc137467910
_Toc137467910
Anchor
OLE_LINK1
OLE_LINK1
Anchor
OLE_LINK2
OLE_LINK2
Anchor
_Toc326167559
_Toc326167559
Симметричные алгоритмы семейства GSII64

Важная информация
Аппаратный алгоритм GSII64 есть только в ключах Guardant Sign/Time и их разновидностях. Он не реализован в ключах с загружаемым кодом (Guardant Code и его модификации).
GSII64 – блочный симметричный алгоритм, устойчивый к криптоанализу. Длина секретного ключа GSII64 может составлять 16 или 32 байта (128 или 256 бит). Алгоритм может преобразовать за один цикл блок данных длиной 8 байт, имеет возможность преобразования блоков данных длиной, кратной 8 байтам, а также имеет режимы для преобразования блоков данных произвольной длины.
Алгоритм является симметричным, его можно использовать как для кодирования данных, так и для декодирования.
К семейству GSII64 относятся еще два алгоритма: GSII64_ ENCRYPT, GSII64_DECRYPT. Эти алгоритмы по своим свойствам идентичны GSII64, за исключением того, что первый может выполнять только прямое преобразование (зашифрование), а второй – обратное (расшифрование).

Anchor
_Toc326167560
_Toc326167560
Симметричные алгоритмы семейства AES

Алгоритм AES (Advanced Encryption Standard) – это блочный симметричный алгоритм шифрования, принятый в качестве стандарта шифрования США. Длина секретного ключа AES составляет 16 байт (128 бит). Минимальная длина блока данных, преобразуемых алгоритмом за один цикл, – 16 байт. У алгоритма имеются режимы, позволяющие шифровать блоки данных, кратные по длине 16 байтам, и блоки произвольной длины. Симметричность алгоритма означает использование одного и того же секретного ключа шифрования, как для прямого преобразования, так и для обратного.
Подробное описание алгоритма AES можно найти на сайте NIST: http:/

Anchor
_Hlt272495738
_Hlt272495738
Anchor
_Hlt272495739
_Hlt272495739
/csrc.nist.gov/archive/aes/index.html
К разновидностям AES, реализованным в ключах Guardant, относятся еще два алгоритма: AES128_ENCRYPT, AES128_DECRYPT. Эти алгоритмы по своим свойствам идентичны AES128, за исключением того, что первый может выполнять только прямое преобразование (зашифрование), а второй – обратное (расшифрование).
Кроме того, в Guardant API реализован также алгоритм AES с длиной ключа 256 бит. В отличие от аппаратного AES128, он реализован программно, то есть выполняется в оперативной памяти и на процессоре компьютера, а не электронного ключа.

Anchor
_Toc485195583
_Toc485195583
Anchor
_Toc493314239
_Toc493314239
Anchor
_Toc493322577
_Toc493322577
Anchor
_Toc493322713
_Toc493322713
Anchor
_Toc495289459
_Toc495289459
Anchor
_Toc20393127
_Toc20393127
Anchor
_Стандартные_типы_аппаратных
_Стандартные_типы_аппаратных
Anchor
_Toc485195563
_Toc485195563
Anchor
_Toc493314211
_Toc493314211
Anchor
_Toc493322559
_Toc493322559
Anchor
_Toc493322695
_Toc493322695
Anchor
_Toc495289431
_Toc495289431
Anchor
_Toc20393098
_Toc20393098
Anchor
_Toc101585026
_Toc101585026
Anchor
_Toc131258098
_Toc131258098
Anchor
_Toc132528861
_Toc132528861
Anchor
_Toc137467888
_Toc137467888
Anchor
_Toc326167561
_Toc326167561
Программный алгоритм AES256

Для аппаратных алгоритмов существуют и ограничения, связанные с тем, что скорость аппаратных преобразований, выполняемых электронным ключом, сравнительно невысока. Преобразование больших объемов данных – от десятков килобайт до сотен мегабайт (разного рода базы данных, текстовые и графические файлы и т. п.), повлечет очень существенные задержки в работе защищенного приложения: все же мощность процессоров современных компьютеров во много раз выше, чем процессора электронного ключа.
Это ограничение отчасти можно преодолеть, используя программно реализованные алгоритмы шифрования. Такие алгоритмы используют всю вычислительную мощность компьютера, а потому работают на порядки быстрее, чем алгоритмы электронного ключа. В настоящее время можно легко найти достаточно большое количество реализаций различных алгоритмов. В состав Guardant API включена реализация симметричного алгоритма AES с длиной ключа 256 бит. Этот стойкий алгоритм с успехом можно использовать для надежного кодирования больших объемов данных.
Аппаратное преобразование в этом случае можно эффективно применять для кодирования или генерации ключей шифрования, используемых программно реализованными алгоритмами.

Anchor
_Toc82844074
_Toc82844074
Anchor
_Toc101585057
_Toc101585057
Anchor
_Toc132528892
_Toc132528892
Anchor
_Toc137467911
_Toc137467911
Anchor
_Toc326167562
_Toc326167562
Режимы работы алгоритмов AES и GSII64

Anchor
_Toc101585058
_Toc101585058
Anchor
_Toc132528893
_Toc132528893
Режим ECB

Режим «электронной кодовой книги». Это простейший режим работы блочного симметричного алгоритма. В режиме ECB каждый блок открытого текста, подаваемый на вход алгоритма, преобразуется с одним и тем же определителем в блок шифртекста. Поэтому преобразование 2-х одинаковых блоков даст идентичный результат.
Если длина блока данных превышает минимальную длину блока (16 байт для AES и 8 байт для GSII64), он должен быть разбит на блоки, равные минимальной длине блока. При необходимости, к последнему блоку нужно добавить недостающие байты. Сильно желательно, чтобы байты-заполнители не были постоянными. В качестве байтов-заполнителей можно использовать случайные числа. В этом случае последний закодированный блок требуется хранить полностью, вместе с зашифрованными байтами-заполнителями (а не отбрасывать эти байты). Иначе полезные байты данных из этого блока невозможно будет расшифровать.
Режим ECB подходит для шифрования небольших объемов данных, например, векторов инициализации, используемых в других режимах алгоритма или ключей шифрования других алгоритмов.

Anchor
_Toc101585059
_Toc101585059
Anchor
_Toc132528894
_Toc132528894
Режим CBC

Режим сцепления блоков по шифртексту. В режиме CBC, как и в ECB, каждый блок открытого текста преобразуется в блок шифртекста той же длины. Преобразование в режиме CBC для всех блоков осуществляется с одним и тем же ключом. Режим CBC чаще используется и лучше подходит для преобразования блоков данных, превышающих по длине минимальную длину блока.
Однако в отличие от ECB, преобразование двух одинаковых блоков открытого текста, находящихся в разных позициях исходного блока данных, не даст идентичного результата. Это осуществляется благодаря тому, что на каждом следующем шаге шифруется не сам блок, а его сумма по модулю 2 с предыдущим блоком шифртекста. Для получения первого зашифрованного блока используется сумма по модулю 2 первого зашифрованного блока и некоторого вектора инициализации IV. Значение IV должно быть сохранено для корректного обратного преобразования, но желательно, если оно будет защищено (например, зашифровано в режиме ECB).
Преобразование получается позиционно-зависимым, поскольку результат шифрования зависит не только от самого блока открытого текста, но и от предшествующего ему.
Обратное преобразование также производится поблочно.
Суммарная длина исходного набора данных должна быть кратна минимальной длине блока. В противном случае, к последнему блоку нужно добавить байты-заполнители, так же, как и в режиме ECB.
Режим CBC можно использовать для вычисления надежных контрольных сумм, аутентификации и проверки подлинности данных. В качестве такой контрольной суммы используется последний блок шифротекста. Этот блок зависит от всех предыдущих блоков, а также от вектора инициализации, и вычисляется на основе секретного ключа алгоритма. Он не дает информации об исходных данных, но идентифицирует их практически однозначно. Подделать этот блок так же трудно, как подобрать ключ алгоритма.

Anchor
_Toc101585060
_Toc101585060
Anchor
_Toc132528895
_Toc132528895
Режим CFB

Режим с кодированной обратной связью. Режим CFB позволяет преобразовывать блоки данных произвольного размера, не обязательно кратного минимальной длине блока. Это избавляет от необходимости дополнять исходные данные до целого количества 8 блоков. В этом режиме длина зашифрованной последовательности будет равна длине исходной.
В режиме CFB, подобно режиму CBC, происходит сцепление блоков исходных данных, поэтому каждый закодированный блок будет зависеть от всех предыдущих блоков исходных данных, поскольку для зашифрования каждого следующего блока исходных данных используется предыдущий блок шифртекста.
В этом режиме для преобразования используется вектор инициализации IV (см. режим CBC).
Для однонаправленных алгоритмов, выполняющих только зашифрование или только расшифрование этот режим недоступен, поскольку математически прямое и обратное преобразования в этом режиме эквивалентны.
Важная информация
Если при декодировании указан неверный вектор инициализации, все данные, кроме первого блока, все равно расшифруются правильно. Если это критично для приложения, предпочтительно использовать режим OFB.

Anchor
_Toc101585061
_Toc101585061
Anchor
_Toc132528896
_Toc132528896
Режим OFB

Режим с обратной связью по выходу. Этот режим имеет много общего с режимом CFB.
Главное отличие состоит в том, что для зашифрования следующего блока используется не предыдущий блок шифртекста, а результат преобразования вектора инициализации.
Преимущество данного режима заключается в том, что при передаче зашифрованных данных снижается зависимость от искажений предыдущих блоков. То есть при повреждении одного блока, остальные блоки при расшифровании не пострадают.
У этого преимущества есть и обратная сторона – режим OFB обеспечивает меньшую защиту от искажения данных, поскольку при изменении одного бита шифртекста в расшифрованных данных будет изменен тот же бит. Для проверки подлинности данных в таком случае нужно пользоваться надежной контрольной суммой.
В этом режиме, так же как и в 2-х предыдущих, для преобразования используется вектор инициализации IV (см. режимы CBC и CFB).
Для однонаправленных алгоритмов, выполняющих только зашифрование или только расшифрование этот режим недоступен, поскольку математически прямое и обратное преобразования в этом режиме эквивалентны.

Anchor
_Toc101585062
_Toc101585062
Anchor
_Toc132528897
_Toc132528897
Рекомендации по работе с вектором инициализации IV

Для корректного преобразования данных симметричными алгоритмами GSII64 и AES необходимо принимать во внимание что:

...