Криптографические примитивы


Криптографические примитивы — низкоуровневые криптографические алгоритмы, которые часто используются для построения криптографических протоколов. В узком смысле это операции и процедуры, определяющие требуемые свойства криптосистемы[1].

Криптографические примитивы используются как основные строительные блоки при создании криптосистемы, то есть они предназначены для узкого класса задач с высокой степенью надёжности. В качестве примера можно рассмотреть такую ситуацию: пусть для некоторой подпрограммы шифрования указано, что она может быть взломана только с числом операций X на компьютере, тогда если она может быть взломана с помощью значительно меньшего количества операций, чем X, этот криптографический примитив считается ненадёжным.

При проектировании протоколов и криптосистем разработчик несёт ответственность за устранение композиционных недостатков. Не имея возможности доказать их безопасность, разработчик должен считать надёжными примитивы, которые они используют. Выбор лучшего примитива, доступного для использования в протоколе, обычно обеспечивает наилучшую доступную безопасность из возможных. Если обнаружен сбой криптографического примитива, почти каждый протокол, который его использует, становится уязвимым[2].

Относительная важность различных критериев в значительной степени зависит от применения и имеющихся ресурсов. Например, в среде, где вычислительная мощность ограничена, возможно, придётся отказаться от очень высокого уровня безопасности для повышения производительности системы в целом.

Криптографические примитивы сами по себе довольно ограничены. Они не могут рассматриваться как криптографическая система. Например, простой алгоритм шифрования не обеспечит ни механизма аутентификации, ни какой-либо явной проверки целостности сообщения. Если мы используем комбинацию подпрограмм кодирования (например DES) и хеширования (например SHA-1), то получим систему для передачи сообщения, которое не только закодировано, но и защищено от подделки. И если злоумышленник не знает ключа шифрования, он не может вмешаться в передачу сообщения.

Большинство проблем криптографических систем (то есть ненадёжности в системах) связано, как правило, с неправильным использованием примитивов, то есть ошибками при построении архитектуры криптографического протокола, неправильным использованием и комбинированием примитивов, а не с ошибками внутри самих примитивов. Существуют методы для полного анализа криптографических протоколов, но они очень сложны. Однако некоторые основные свойства могут быть проверены с помощью автоматических методов, например, с помощью логики Бэрроуза — Абади — Нидхэма[2].