Введение
Основной криптографический алгоритм, используемый для создания криптографических протоколов. Криптографические примитивы - это хорошо известные криптографические алгоритмы низкого уровня, которые часто используются для создания криптографических протоколов для систем компьютерной безопасности. Эти процедуры включают, но не ограничиваются ими, односторонние хеш-функции и функции шифрования.
Cryptographic primitives are well established, low level cryptographic algorithms that are frequently used to build cryptographic protocols for computer security systems. These routines include, but are not limited to, one way hash functions and encryption functions.
Обоснование
При создании криптографических систем дизайнеры используют криптографические примитивы в качестве основных строительных блоков. Из-за этого криптографические примитивы предназначены для выполнения одной очень специфической задачи в точно определенной и высоко надежной манере. Поскольку криптографические примитивы используются в качестве строительных блоков, они должны быть очень надежными, т.е. выполнять в соответствии со своей спецификацией. Например, если система шифрования утверждает, что она может быть взломана только с помощью ряда операций, и она взломана значительно меньше, чем операций, то эта криптографическая примитивная система потерпела неудачу. Если криптографический примитив оказывается неисправным, почти каждый протокол, который его использует, становится уязвимым. Поскольку создание криптографических процедур очень сложно, а проверка их надежности занимает много времени, по сути, никогда не бывает разумным (ни безопасным) проектировать новый криптографический примитив, чтобы удовлетворить потребности новой криптографической системы. Причины включают в себя: дизайнер может не быть компетентен в математических и практических соображениях, связанных с криптографическими примитивами. Разработка нового криптографического примитива очень трудоемкая и очень склонна к ошибкам, даже для экспертов в этой области. Поскольку алгоритмы в этой области не только должны быть хорошо разработаны, но и должны быть хорошо протестированы криптологическим сообществом, даже если криптографическая рутина выглядит хорошо с точки зрения дизайна, она все равно может содержать ошибки. Успешное противостояние такому контролю дает некоторую уверенность (на самом деле, пока единственную уверенность), что алгоритм действительно достаточно безопасен для использования; доказательства безопасности для криптографических примитивов обычно недоступны. Криптографические примитивы являются одним из строительных блоков каждой криптосистемы, например, TLS, SSL, SSH и т. Д. Разработчики криптосистем, не имея возможности окончательно доказать свою безопасность, должны считать используемые ими примитивы безопасными. Выбор наилучшего примитива, доступного для использования в протоколе, обычно обеспечивает наилучшую доступную безопасность. Однако в любой криптосистеме возможны слабые места в составе, и ответственность за их предотвращение лежит на разработчике.
The designer might not be competent in the mathematical and practical considerations involved in cryptographic primitives. Designing a new cryptographic primitive is very time consuming and very error prone, even for experts in the field. Since algorithms in this field are not only required to be designed well but also need to be tested well by the cryptologist community, even if a cryptographic routine looks good from a design point of view it might still contain errors. Successfully withstanding such scrutiny gives some confidence (in fact, so far, the only confidence) that the algorithm is indeed secure enough to use; security proofs for cryptographic primitives are generally not available. Cryptographic primitives are one of the building blocks of every cryptosystem, e. g., TLS, SSL, SSH, etc. Cryptosystem designers, not being in a position to definitively prove their security, must take the primitives they use as secure. Choosing the best primitive available for use in a protocol usually provides the best available security. However, compositional weaknesses are possible in any cryptosystem and it is the responsibility of the designer(s) to avoid them.
Комбинирование криптографических примитивов
Криптографические примитивы не являются криптографическими системами, поскольку они довольно ограничены сами по себе. Например, алгоритм простого шифрования не будет обеспечивать механизм аутентификации, а также не будет проверять целостность сообщения. Только в сочетании в протоколах безопасности можно удовлетворить более чем одному требованию безопасности. Например, для передачи сообщения, которое не только кодируется, но и защищено от манипуляций (т.е. является конфиденциальным и защищенным от коррекции), может использоваться в комбинации кодирующая процедура, такая как DES, и хеш-процедура, такая как SHA 1. Если злоумышленник не знает ключ шифрования, он не может изменить сообщение таким образом, чтобы значение сжатия сообщения (s) было действительным. Сочетание криптографических примитивов для создания протокола безопасности само по себе является целой специализацией. Большинство ошибок, которые могут быть использованы (т.е. отсутствие безопасности в криптосистемах), связаны не с ошибками в проектировании примитивных систем (при условии, что они были выбраны с осторожностью), а с тем, как они используются, то есть с плохим дизайном протокола и ошибками или недостаточной осторожностью в реализации. Математический анализ протоколов, на момент написания этого текста, не созрел. Существуют некоторые основные свойства, которые могут быть проверены автоматизированными методами, такими как логика BAN. Существуют даже методы полной проверки (например, расчет SPI), но они чрезвычайно громоздки и не могут быть автоматизированы. Проектирование протоколов - это искусство, требующее глубоких знаний и много практики; даже тогда ошибки являются обычным явлением. Иллюстративный пример, для реальной системы, можно увидеть на странице новостей об уязвимости OpenSSL здесь.