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

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

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

Режимы работы

Режим ECB

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

Режим CBC

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

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

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

  • Вектор инициализации IV должен иметь одинаковые значения перед началом зашифрования и перед началом расшифрования
  • Необходимо сохранять значение вектора инициализации IV между обращениями к GrdFeatureEncrypt/GrdFeatureDecrypt при продолжении зашифрования/расшифрования больших блоков (больше 248 байт)
  • При шифровании данных типа разных записей БД или секторов диска, инициализировать IV этим номером записи/ сектора для того, чтобы каждая из них кодировалась всегда одинаково, а разные записи с одинаковыми значениями кодировались по-разному.
  • No labels