Подпись и шифрование сообщений

февраля 17 2010 by admin in Безопасность

Пройдя аутентификацию, клиент и сервер могут систематизированно обмениваться сообщениями. Полная эффективность такого взаимодействия будет достигнута, если сообщения, которыми они обмениваются, подписаны и зашифрованы. При этом следует придерживаться таких правил:
1. подписывайте сообщения, когда конфиденциальность не требуется, но нужна уверенность в целостности сообщений (т. е. практически всегда);
2. шифруйте сообщения, когда нужно обеспечить конфиденциальность (подписывать сообщения при шифровании не обязательно).
Для подписи и шифрования применяются «параллельные» функции так же, как и при аутентификации, но механизм идентичен и на клиенте, и на сервере.
Вы передаете MakeStgnature буфер данных и полный контекст, а она возвращает вам подпись, которую вы вместе с буфером данных передаете по сети. Принимающая сторона берет эту информацию и проверяет буфер данных, используя подпись. Подчеркиваю: вы должны рассматривать данные, полученные от MakeSignature, как «черный ящик», нужный только при обмене информацией.
Параметр IQOP связан с протоколом безопасности и позволяет вам указать подробности используемого для подписи алгоритма. Обычно этот параметр устанавливается в 0. Если вам нужно отслеживать последовательность номеров сообщений, вы должны указывать номер сообщения в параметре Message-SeqNo. Если последовательность вас не интересует, укажите 0.
Как и в других функциях SSPI, с которыми мы имели дело, данные из функции MakeSignature передаются через буферы. В случае MakeSignature передаются два буфера с одним дескриптором, так что вам нужно создать массив из двух переменных SecBuffer. Тип буфера, в который вы будете получать подпись сообщения, должен быть SECBUFFERTOKEN. Второй буфер должен иметь тип SECBUFFER_DATA — это указывает на то, что он содержит собственно данные. Ниже приведена функция, которая подписывает буфер данных и посылает его с помощью псевдокоммуникационной функции SendData.