Как плачут окна
возможные причины и способы решения проблемы
Такое неприятное явление, как конденсат на окнах, появляется в любое время года из-за воздействия различных факторов. Хоть металлопластиковые и деревянные изделия способны служить много лет, но все же люди часто сталкиваются с появлением капель на стеклах, а потом и на подоконнике. Важно понять причину этого явления и устранить это. Почему окна «плачут» - рассказано в статье.
Физические свойства конденсата
Лед благодаря нагреванию становится водой, а с понижением температуры происходит обратный процесс. Он имеет название конденсирования влаги. Воздух с высокой температурой включает жидкость в виде пара. С охлаждением ситуация изменяется. Воздух не может удерживать много жидкости, так как уменьшается по объемам, и влага остается на участках с меньшей температурой.
Стекло окна считается самым холодным местом дома, поскольку граничит с улицей, поэтому на нем появляется конденсат. При очень низких температурах на улице он становится наледью. На первый взгляд может показаться, что конденсат не опасный. Но при частом образовании жидкости намокают строительные изделия, после чего происходит ослабление жесткости конструкции и образование плесневого грибка. Поэтому важно знать, почему «плачут» окна в доме, а также как это устранить.
Причины
Одной из важных функций окон считается защита жилья от вымерзания. Но не все конструкции выполняют предназначение качественно, так как эксплуатируются не по правилам. Почему «плачут» окна? Существуют следующие причины данного явления:
- Большая разница температур внутри и на улице.
- Высокая влажность воздуха внутри.
- Широкий подоконник над батареей.
- Некачественная вентиляция.
- Несоблюдение режима работы окон.
- Редкое проветривание помещения.
- Неправильно выбрано окно.
- Присутствие на подоконниках растений.
Есть и другая причина, почему окна «плачут». Влага появляется на стеклах из-за ошибок во время производства изделий, а также неточности при установке стеклопакетов. Эти причины касаются и того, почему «плачут» деревянные окна.
Вентиляция
Даже после установки нового окна нередко появляются подтеки на стеклах и лужицы на подоконниках. Почему «плачут» пластиковые окна и что делать в этом случае? Главной задачей является нормализация микроклимата помещения. Необходимо уменьшить влажность и обеспечить нагрев внутреннего стекла (если пакет двухкамерный).
Сначала необходимо проверить, работает ли вентиляция. Система должна удалять влажный воздух. С засорением он скапливается внутри, а затем оседает на окнах. Вероятно, внутри системы кондиционирования присутствует пыль, грязь, из-за чего вся работа затруднена. Проверить уровень засорения несложно – нужно поднести зажженную спичку или зажигалку к выходному отверстию. Если огонь потухает или колеблется, то вентиляция работает, а иначе требуется ее чистка.
Подоконник
Широкий подоконник, находящийся над отопительной системой, мешает правильной циркуляции воздуха. Это может быть тоже одна из причин, почему «плачут» окна. Необходимое тепло не поступает к конструкции, и при охлаждении на ней появляется вода.
Устранить эту проблему можно с помощью уменьшения подоконника, чтобы теплый воздух от батареи направлялся к окну. Если есть возможность, следует выдвинуть радиатор отопления. А еще удобнее найти другой метод обогрева окна.
Растения
Почему пластиковые окна потеют и «плачут» из-за цветов? Присутствие на подоконнике растений нарушает нормальную циркуляцию воздуха. Зеленые организмы наполняют воздух влагой, из-за чего образуется запотевание стекол. Если убрать растения с окна, то получится избавиться от появления конденсата.
Режимы стеклопакетов
Почему «плачут» пластиковые окна, если нет вышеперечисленных факторов? Во всех стеклопакетах есть 2 режима работы – летний и зимний. Если своевременно не перейти с одного на другой, то появляется конденсат, так как внутренняя сторона сильно охлаждается.
Перед холодами (в октябре или ноябре) желательно выполнить перевод изделия на зимний режим. Часто конденсат появляется внутри помещений, где редко открываются форточки. В этом случае необходимо проветривание хотя бы 15-20 минут каждый день. Так обеспечивается не только хороший круговорот воздуха, который защищает от конденсата, но и поступает свежий воздух, положительно воздействующий на дыхание.
Можно утеплить пространство вокруг окна. Желательно выполнять работу с гипсокартоном. Этот материал имеет отличные теплоизоляционные свойства. Утеплить необходимо оконные откосы, участок под подоконником, наружную стену. Чем качественнее выполнена отделка гипсокартоном, тем меньше риск образования конденсата. Увеличение температуры в доме приводит к утеплению пространства возле окна. Данные действия легко выполняются самостоятельно.
Производство и установка стеклопакета
Хоть установщики пластиковых окон являются профессионалами, но даже у них появляются ошибки. Оплошности допускаются и жильцами помещения, где меняются конструкции. В этом случае тоже надо знать, что делать. Почему окна потеют и «плачут»? Это связано с несколькими причинами:
- Неточности во время проектирования или изготовлении окон.
- Приобретение неподходящего стеклопакета.
- Некачественная установка.
Некачественные конструкции нужно исправлять или утилизировать. Покупателям следует тщательно выбирать окна. Если изделие будет устанавливаться внутрь комнат или на лоджию, необходимо приобрести двухкамерную модель. Изделия с 1 камерой идеальны для комнаты, граничащей с застекленной лоджией (поскольку ей не нужно дополнительное утепление).
По причине экономии многие выбирают тонкие стекла, а ведь они не защитят в должной мере от холодов. К тому же на таких изделиях будет появиться конденсат. Когда происходит замена пластиковых изделий на деревянные, нужно подготовиться к изменению режима вентиляции. ПВХ является герметичным материалов, который повышает влажность внутри, а в дереве есть щели, через которые выполняется воздухообмен.
Если сравнить пластиковую и деревянную конструкцию, то можно обнаружить одну разницу – внутреннее стекло первого обладает меньшей температурой, поэтому оно быстрее конденсируется. Строительные ошибки бывают следующими:
- Неправильное запенивание щелей.
- Появление «мостика холода» - области примыкания пластика или дерева к стороне стены с отрицательной температурой.
- Продувание кладки – появляется с разрушением горизонтальных или вертикальных швов между кирпичами.
Если хочется приобрести долговечное изделие, важно контролировать все этапы установки окон. Также не стоит приобретать широкий подоконник. Это основные причины, почему потеют и «плачут» окна. Необходимо выявить причину данного явления и устранить ее.
Деревянные окна
Дерево лучше пропускает воздух, поэтому на таких конструкциях меньше появляется конденсат. Но если запотевания случаются, то для избавления от проблемы надо учитывать то, как они утеплялись. Чтобы нормализовать микроклимат в помещении со стеклопакетами из древесины, надо следовать несложным рекомендациям:
- Убрать с верхней части рамы уплотнитель и монтажную пену, посмотреть на состояние стекла. Если конденсат появляется, надо оставить оконную коробку без снятых деталей до того времени, пока она не просохнет вся. Ускорить процесс позволит обдув тепловой пушкой, вентилятором с теплым воздухом.
- Конденсат может появляться по причине неправильной установки радиаторов отопления или их низкого качества. Нередко окна потеют и плачут из-за того, что тепловая система находится далеко. Чтобы устранить конденсат, следует перенести ее к стеклопакетам.
- Дерево считается более чувствительным к воздушным потокам по сравнению с пластиком. Капли на стекле могут появляться из-за того, что дверь в комнату не закрыта или протекает кран. Следует не допускать такого проникновения влаги в воздух.
- Стиранная одежда, высыхающая на батареях, тоже отрицательно воздействует на окна.
- Плотные шторы, которые затемняют помещение, повышают вероятность конденсирования.
Следует учитывать, что деревянные оконные изделия лучше, чем ПВХ, поскольку образуют мало влаги на стекле. Структура их поверхности пропускает и равномерно распределяет тепло.
Обработка окон
Почему «плачут» окна и что делать в этом случае, интересует множество людей. Устранить этот недостаток можно регулярной обработкой изделий:
- При возможности можно приобретать специальные средства, предназначенные для устранения конденсата. При нанесении они образуют невидимую пленку, которая отталкивает воду. Приобрести их можно в магазинах бытовой химии. Перед применением надо изучить инструкцию.
- Эффективным методом считается обработка окон солевым раствором. Для этого потребуется соль (1 ст. л.) и вода (5 литров). Раствор надо профильтровать, устранив не растворившиеся кристаллы. Потом средством можно протереть окно. Если после обработке появляются разводы, белые пятна, в раствор добавляется немного воды, после чего можно снова протереть конструкции.
- Подойдет мыльный раствор. Потребуется немного воды и моющее средство. Салфетку из микрофибры надо смочить в готовом растворе, отжать и обработать окно. Потом надо помыть окно чистой водой и протереть сухой салфеткой.
- Раствор на основе воды и спирта. Такой метод следует использовать тогда, когда дома холодно. Спирта надо добавить немного. Средство легко наносится, создавая защиту от влаги.
Другие способы
А вот еще некоторые советы:
- Избавиться от конденсата можно декоративными свечами. Для этого нужно купить несколько декоративных свечей, лучше больших, зажечь их, установить на подоконнике. Было замечено, что так нормализуется циркуляция воздуха.
- Подходит средство «Секунда». Жидкость следует распылить на проблемную конструкцию, а потом газетами вытереть насухо.
- Вентиляторы позволяют нормализовать поток воздуха. Устройство необходимо направить на окно, и спустя 10-20 минут проблема исчезнет.
- Можно натереть окна смесью из глицерина и спирта. Соотношение веществ должно быть 1:10. Только сначала надо помыть окна теплой водой, протереть их. После этого можно наносить смесь и оставить ее без смывания.
Рекомендации по устранению конденсата
Важно контролировать состояние стеклопакетов, выполняя правила стабилизации микроклимата. Если же пренебрегать советами, то даже на двухкамерных и надежных конструкциях появляется конденсат зимой и в другое время года. Необходимо знать не только то, почему «плачут» пластиковые окна. Как бороться с этим – важный вопрос. Нужно следовать следующим рекомендациям:
- Регулярно проверять работу вентиляции.
- Каждый день по 10-15 минут проветривать жилье.
- Не выбирать для замены однокамерные комплекты.
- Контролировать тщательное запенивание стыка рамы и стены и остальные этапы установки.
- Не выбирать широкие подоконники, которые закрывают батарею.
- Если стеклопакет имеет несколько режимов, то менять их по времени года.
- Выполнять герметизацию откосов.
- Поддерживать влажность в норме – 45-60%.
Как видно, стекла могут потеть по разным причинам. Выполняя несложные правила, получится избавиться от конденсата. Тогда стекла всегда будут чистыми и красивыми.
функций криптографии - приложения Win32
- 41 минута на чтение
В этой статье
Функции криптографии подразделяются на следующие категории в зависимости от использования:
Функции CryptXML
Криптографические функции XML предоставляют API для создания и представления цифровых подписей с использованием данных в формате XML.Для получения информации о подписях в формате XML см. Спецификацию синтаксиса и обработки подписи XML по адресу https://go.microsoft.com/fwlink/p/?linkid=139649.
Функции подписывающей стороны
Предоставляет функции для подписи и отметки времени.
Функция | Описание |
---|---|
ПодписавшийFreeSignerContext | Освобождает структуру SIGNER_CONTEXT , выделенную предыдущим вызовом функции SignerSignEx . |
SignError | Вызывает функцию GetLastError и преобразует код возврата в HRESULT . |
Подпись | Подписывает указанный файл. |
SignerSignEx | Подписывает указанный файл и возвращает указатель на подписанные данные. |
SignerSignEx2 | Подписывает и отмечает время указанного файла, что позволяет использовать несколько вложенных подписей. |
SignerTimeStamp | Время для указанной темы. Эта функция поддерживает отметку времени Authenticode. Чтобы выполнить временную метку инфраструктуры открытого ключа X.509 (RFC 3161), используйте функцию SignerTimeStampEx2 . |
ПодписавшийTimeStampEx | Time отмечает указанный объект и, при необходимости, возвращает указатель на структуру SIGNER_CONTEXT , которая содержит указатель на BLOB .Эта функция поддерживает отметку времени Authenticode. Чтобы выполнить временную метку инфраструктуры открытого ключа X.509 (RFC 3161), используйте функцию SignerTimeStampEx2 . |
ПодписавшийTimeStampEx2 | Time отмечает указанный объект и, при необходимости, возвращает указатель на структуру SIGNER_CONTEXT , которая содержит указатель на BLOB . Эта функция может использоваться для выполнения временных меток в соответствии с требованиями стандарта X.509 Public Key Infrastructure, RFC 3161. |
ПодписавшийTimeStampEx3 | Отметка времени для указанной темы и поддержка установки отметок времени для нескольких подписей. |
Базовые функции криптографии
Базовые криптографические функции обеспечивают наиболее гибкие средства разработки криптографических приложений. Все коммуникации с поставщиком криптографических услуг (CSP) происходят через эти функции.
CSP - это независимый модуль, выполняющий все криптографические операции.По крайней мере, один CSP требуется для каждого приложения, использующего криптографические функции. Одно приложение может иногда использовать более одного CSP.
Если используется более одного CSP, в вызовах криптографических функций CryptoAPI можно указать тот, который будет использоваться. Один CSP, Microsoft Base Cryptographic Provider, связан с CryptoAPI . Этот CSP используется в качестве поставщика по умолчанию многими функциями CryptoAPI, если не указан другой CSP.
Каждый CSP предоставляет другую реализацию криптографической поддержки, предоставляемой CryptoAPI.Некоторые предоставляют более надежные криптографические алгоритмы; другие содержат компоненты оборудования, такие как смарт-карты . Кроме того, некоторые CSP могут иногда напрямую связываться с пользователями, например, когда цифровые подписи выполняются с использованием личного ключа подписи пользователя .
Базовые криптографические функции делятся на следующие большие группы:
- Функции поставщика услуг
- Функции генерации ключей и обмена
- Функции кодирования и декодирования объектов
- Функции шифрования и дешифрования данных
- Функции хеширования и цифровой подписи
Функции поставщика услуг
Приложения используют следующие сервисные функции для подключения и отключения поставщика криптографических услуг (CSP).
Функции генерации и обмена ключей
Функции генерации и обмена ключей обмениваются ключами с другими пользователями и создают, настраивают и уничтожают криптографические ключи .
Функции кодирования и декодирования объектов
Это обобщенные функции кодирования и декодирования. Они используются для кодирования и декодирования сертификатов , , списков отзыва сертификатов (CRL), запросов сертификатов, и расширений сертификатов.
Функции шифрования и дешифрования данных
Следующие функции поддерживают операции шифрования и дешифрования. CryptEncrypt и CryptDecrypt требуют перед вызовом криптографического ключа . Это делается с помощью функции CryptGenKey , CryptDeriveKey или CryptImportKey . Алгоритм шифрования указывается при создании ключа. CryptSetKeyParam может устанавливать дополнительные параметры шифрования.
Функции хеширования и цифровой подписи
Эти функции вычисляют хэшей данных, а также создают и проверяют цифровых подписей . Хэши также известны как дайджесты сообщений.
Сертификат и функции хранилища сертификатов
Сертификати функции хранилища сертификатов управляют использованием, хранением и извлечением сертификатов , , списков отзыва сертификатов , (CRL) и списков доверия сертификатов , (CTL).Эти функции разделены на следующие группы:
- Функции хранилища сертификатов
- Сертификаты и функции обслуживания хранилища сертификатов
- Функции сертификата
- Список отозванных сертификатов Функции
- Функции списка доверенных сертификатов
- Расширенные функции свойств
- Функции MakeCert
Функции хранилища сертификатов
Пользовательский сайт может со временем собрать множество сертификатов.Обычно у сайта есть сертификаты для пользователя сайта, а также другие сертификаты, которые описывают тех лиц и организаций, с которыми пользователь общается. Для каждого объекта может быть более одного сертификата. Для каждого отдельного сертификата должна быть цепочка проверочных сертификатов, которая обеспечивает обратный путь к доверенному корневому сертификату . Хранилища сертификатов и связанные с ними функции предоставляют функциональные возможности для хранения, извлечения, перечисления, проверки и использования информации, хранящейся в сертификатах.
Сертификаты и функции обслуживания хранилища сертификатов
CryptoAPI предоставляет набор общих функций обслуживания сертификатов и хранилищ сертификатов.
Функции сертификата
Большинство функций сертификата имеют связанные функции для работы с CRL и CTL . Дополнительные сведения о связанных функциях CRL и CTL см. В разделах «Функции списка отзыва сертификатов» и «Функции списка доверенных сертификатов».
Список отозванных сертификатов Функции
Эти функции управляют хранением и извлечением списков отзыва сертификатов (CRL).
Функции списка доверенных сертификатов
Эти функции управляют хранением и получением списков доверия сертификатов (CTL).
Расширенные функции свойств
Следующие функции работают с расширенными свойствами сертификатов, CRL и CTL.
Функции MakeCert
Следующие функции поддерживают инструмент MakeCert.
Функции проверки сертификатов
Сертификаты проверяются с помощью CTL или цепочек сертификатов. Функции предусмотрены для обоих:
- Функции проверки с использованием CTL
- Функции проверки цепочки сертификатов
Функции проверки с использованием CTL
Эти функции используют CTL в процессе проверки.Дополнительные функции для работы с CTL можно найти в разделах «Функции списка доверенных сертификатов» и «Функции расширенных свойств».
Следующие функции используют CTL напрямую для проверки.
Функции проверки цепочки сертификатов
Цепочки сертификатов созданы для предоставления доверенной информации об отдельных сертификатах.
Функции сообщений
Функции сообщений CryptoAPI состоят из двух групп функций: функции сообщений низкого уровня и функции упрощенных сообщений .
Функции низкоуровневых сообщений создают и работают непосредственно с сообщениями PKCS # 7. Эти функции кодируют данные PKCS # 7 для передачи и декодируют полученные данные PKCS # 7. Также они расшифровывают и проверяют подписи полученных сообщений. Для обзора стандартных и низкоуровневых сообщений PKCS # 7 см. Низкоуровневые сообщения.
Упрощенные функции сообщений находятся на более высоком уровне и объединяют несколько низкоуровневых функций сообщений и функций сертификатов в отдельные функции, которые выполняют определенную задачу определенным образом.Эти функции уменьшают количество вызовов функций, необходимых для выполнения задачи, тем самым упрощая использование CryptoAPI. Обзор упрощенных сообщений см. В разделе «Упрощенные сообщения».
- Функции сообщений низкого уровня
- Упрощенные функции сообщений
Функции сообщений низкого уровня
Функции низкоуровневых сообщений обеспечивают функциональные возможности, необходимые для кодирования данных для передачи и декодирования полученных сообщений PKCS # 7. Также предоставляется возможность дешифровать и проверять подписи полученных сообщений.Использование этих низкоуровневых функций сообщений в большинстве приложений не рекомендуется. Для большинства приложений предпочтительным является использование упрощенных функций сообщений, которые объединяют несколько низкоуровневых функций сообщений в один вызов функции.
Упрощенные функции сообщений
упрощенные функции сообщений объединяют низкоуровневые функции сообщений в единую функцию для выполнения определенной задачи.
Вспомогательные функции
Вспомогательные функции сгруппированы следующим образом:
- Функции управления данными
- Функции преобразования данных
- Расширенные функции использования ключей
- Функции идентификатора ключа
- Функции поддержки OID
- Функции получения удаленных объектов
- Функции PFX
Функции управления данными
Следующие функции CryptoAPI управляют данными и сертификатами.
Функция | Описание |
---|---|
CertCompareCertificate | Сравнивает два сертификата, чтобы определить, идентичны ли они. |
CertCompareCertificateName | Сравнивает имена двух сертификатов, чтобы определить, идентичны ли они. |
CertCompareIntegerBlob | Сравнивает два целых BLOB . |
CertComparePublicKeyInfo | Сравнивает два открытых ключа , чтобы определить, идентичны ли они. |
CertFindAttribute | Находит первый атрибут, идентифицированный его идентификатором объекта (OID). |
CertFindExtension | Находит первое расширение, идентифицированное его OID. |
CertFindRDNAttr | Находит первый атрибут RDN , идентифицируемый его OID, в списке имен Relative Distinguished Names . |
CertGetIntendedKeyUsage | Получает предполагаемые байты использования ключа из сертификата. |
CertGetPublicKeyLength | Получает длину открытого / закрытого ключа в битах из BLOB-объекта открытого ключа . |
CertIsRDNAttrsInCertificateName | Сравнивает атрибуты в сертификате с именем с указанным CERT_RDN , чтобы определить, все ли атрибуты включены в него. |
CertIsStrongHashToSign | Определяет, можно ли использовать указанный алгоритм хеширования и открытый ключ в сертификате подписи для выполнения строгой подписи. |
CertVerifyCRLRevocation | Проверяет, что сертификат субъекта отсутствует в списке отзыва сертификатов (CRL). |
CertVerifyCRLTimeValidity | Проверяет срок действия CRL. |
CertVerifyRevocation | Проверяет, что сертификат субъекта отсутствует в CRL. |
CertVerifyTimeValidity | Проверяет срок действия сертификата. |
CertVerifyValidityNesting | Проверяет, что срок действия субъекта находится в пределах срока действия эмитента. |
КриптЭкспортPKCS8 | Эта функция заменяется функцией CryptExportPKCS8Ex . |
КриптЭкспортPKCS8Ex | Экспортирует закрытый ключ в формате PKCS # 8. |
CryptExportPublicKeyInfo | Экспортирует информацию об открытом ключе, связанную с соответствующим закрытым ключом поставщика. |
CryptExportPublicKeyInfoEx | Экспортирует информацию об открытом ключе, связанную с соответствующим закрытым ключом поставщика. Эта функция отличается от CryptExportPublicKeyInfo тем, что пользователь может указать алгоритм открытого ключа, тем самым отменяя значение по умолчанию, предоставленное CSP. |
CryptExportPublicKeyInfoFromBCryptKeyHandle | Экспортирует информацию об открытом ключе, связанную с соответствующим закрытым ключом поставщика. |
CryptFindCertificateKeyProvInfo | Перечисляет поставщиков криптографических услуг и их контейнеры ключей , чтобы найти закрытый ключ, соответствующий открытому ключу сертификата. |
CryptFindLocalizedName | Находит локализованное имя для указанного имени, например, находит локализованное имя для имени хранилища корневой системы. |
CryptHashCertificate | [! Важно] Хеширует закодированное содержимое. |
CryptHashCertificate2 | Хеширует блок данных с помощью поставщика хеширования Cryptography API: Next Generation (CNG). |
CryptHashPublicKeyInfo | [! Важно] Вычисляет хеш-код закодированной информации открытого ключа. |
CryptHashToBeSigned | [! Важно] Вычисляет хэш «подлежащей подписи» информации в закодированном подписанном содержимом ( CERT_SIGNED_CONTENT_INFO ). |
CryptImportPKCS8 | [! Важно] Импортирует закрытый ключ в формате PKCS # 8 поставщику криптографических услуг (CSP). |
CryptImportPublicKeyInfo | [! Важно] Преобразует и импортирует информацию открытого ключа в поставщик и возвращает дескриптор открытого ключа. |
CryptImportPublicKeyInfoEx | [! Важно] Преобразует и импортирует информацию об открытом ключе в поставщик и возвращает дескриптор открытого ключа. Дополнительные параметры (помимо параметров, указанных в CryptImportPublicKeyInfo ), которые можно использовать для переопределения значений по умолчанию, предоставляются для дополнения CERT_PUBLIC_KEY_INFO . |
CryptImportPublicKeyInfoEx2 | Импортирует открытый ключ в асимметричный поставщик CNG. |
CryptMemAlloc | Выделяет память для буфера.Эта память используется всеми функциями Crypt32.lib, которые возвращают выделенные буферы. |
CryptMemFree | Освобождает память, выделенную CryptMemAlloc или CryptMemRealloc . |
CryptMemRealloc | Освобождает память, выделенную в данный момент для буфера, и выделяет память для нового буфера. |
CryptQueryObject | [! Важно] Извлекает информацию о содержимом большого двоичного объекта или файла. |
CryptSignAndEncodeCertificate | Кодирует «подлежащую подписи» информацию, подписывает эту закодированную информацию и кодирует полученную подписанную закодированную информацию. |
CryptSignCertificate | Подписывает "подлежащую подписанию" информацию в закодированном, подписанном содержимом. |
CryptSIPAddProvider | Добавляет пакет интерфейса субъекта (SIP). |
CryptSIPCreateIndirectData | Возвращает структуру SIP_INDIRECT_DATA , которая содержит хэш предоставленной структуры SIP_SUBJECTINFO , алгоритм дайджеста и атрибут кодирования. Хеш можно использовать как косвенную ссылку на данные. |
CryptSIPGetCaps | Извлекает возможности SIP. |
CryptSIPGetSignedDataMsg | Получает подпись Authenticode из файла. |
CryptSIPLoad | Загружает библиотеку динамической компоновки, которая реализует пакет предметного интерфейса, и назначает соответствующие функции экспорта библиотеки структуре SIP_DISPATCH_INFO . |
CryptSIPPutSignedDataMsg | Сохраняет подпись Authenticode в целевом файле. |
CryptSIPRemoveProvider | Удаляет SIP, добавленный предыдущим вызовом функции CryptSIPAddProvider . |
CryptSIPRemoveSignedDataMsg | Удаляет указанную подпись Authenticode. |
CryptSIPRetrieveSubjectGuid | Извлекает GUID на основе информации заголовка в указанном файле. |
CryptSIPRetrieveSubjectGuidForCatalogFile | Извлекает GUID субъекта, связанный с указанным файлом. |
CryptSIPVerifyIndirectData | Проверяет косвенное хеширование данных относительно предоставленной темы. |
CryptUpdateProtectedState | Переносит главные ключи текущего пользователя после изменения идентификатора безопасности (SID) пользователя. |
CryptVerifyCertificateSignature | Проверяет подпись сертификата субъекта или CRL , используя информацию об открытом ключе. |
CryptVerifyCertificateSignatureEx | Расширенная версия CryptVerifyCertificateSignature . |
GetEncSChannel | Сохраняет в памяти зашифрованное содержимое библиотеки DLL Schannel. |
pCryptSIPGetCaps | Реализуется SIP для сообщения о возможностях. |
Функции преобразования данных
Следующие функции CryptoAPI преобразуют элементы структуры сертификата в различные формы.
Расширенные функции использования клавиш
Следующие функции относятся к расширению расширенного использования ключа (EKU) и расширенному свойству сертификатов EKU. Расширение EKU и расширенное свойство определяют и ограничивают допустимое использование сертификата. Расширения являются частью самого сертификата. Они устанавливаются издателем сертификата и доступны только для чтения. Расширенные свойства сертификата - это значения, связанные с сертификатом, который можно установить в приложении.
Функции идентификатора ключа
Функции идентификатора ключа позволяют пользователю создавать, устанавливать, извлекать или находить идентификатор ключа или его свойства.
Идентификатор ключа - это уникальный идентификатор пары открытого / закрытого ключей . Это может быть любой уникальный идентификатор, но обычно это 20-байтовый хэш SHA1 кодированной структуры CERT_PUBLIC_KEY_INFO . Идентификатор ключа можно получить через CERT_KEY_IDENTIFIER_PROP_ID сертификата. Идентификатор ключа позволяет использовать эту пару ключей для шифрования или дешифрования сообщений без использования сертификата.
Идентификаторы ключей не связаны с CRL или CTL .
Идентификатор ключа может иметь те же свойства, что и контекст сертификата. Для получения дополнительной информации см. CertCreateContext .
Функции поддержки OID
Эти функции обеспечивают поддержку идентификатора объекта (OID). Эти функции устанавливают, регистрируют и отправляют в OID и функции, зависящие от типа кодирования.
Следующие функции CryptoAPI используют эти функции поддержки OID:
Для обзора этого процесса см. Расширение функциональности CryptoAPI.
Следующие функции работают с OID.
Функция | Описание |
---|---|
Функция CryptEnumOID | Перечисляет зарегистрированные функции OID, идентифицированные по их типу кодирования, имени функции и OID. |
CryptEnumOIDInfo | Перечисляет зарегистрированную информацию OID, идентифицированную их группой, и вызывает pfnEnumOIDInfo для поиска совпадений. |
CryptFindOIDInfo | Использует указанный ключ и группу для поиска информации OID. |
CryptFreeOIDFunctionAddress | Освобождает счетчик дескрипторов, который был увеличен и возвращен CryptGetOIDFunctionAddress или CryptGetDefaultOIDFunctionAddress . |
CryptGetDefaultOIDDllList | Получает список зарегистрированных записей DLL по умолчанию для указанного набора функций и типа кодировки. |
CryptGetDefaultOIDFunctionAddress | Либо получает первую или следующую установленную функцию по умолчанию, либо загружает DLL, которая содержит функцию по умолчанию. |
CryptGetOIDFunctionAddress | Ищет в списке установленных функций тип кодировки и соответствие OID. Если совпадение там не найдено, выполняется поиск совпадения в реестре. |
CryptGetOIDFunctionValue | Получает значение для указанного типа кодировки, имени функции, OID и имени значения. |
CryptInitOIDFunctionSet | Инициализирует и возвращает дескриптор набора функций OID, идентифицированного предоставленным именем функции. |
CryptInstallOIDFunctionAddress | Устанавливает набор адресов вызываемых функций OID. |
CryptRegisterDefaultOIDFunction | Регистрирует DLL, содержащую функцию по умолчанию, которая должна быть вызвана для указанного типа кодировки и имени функции. |
Функция CryptRegisterOID | Регистрирует DLL, которая содержит функцию, которая должна быть вызвана для указанного типа кодировки, имени функции и OID. |
CryptRegisterOIDInfo | Регистрирует информацию OID, указанную в структуре CRYPT_OID_INFO , сохраняя ее в реестре. |
CryptSetOIDFunctionValue | Устанавливает значение для указанного типа кодировки, имени функции, OID и имени значения. |
CryptUnregisterDefaultOIDFunction | Удаляет регистрацию библиотеки DLL, которая содержит функцию по умолчанию, вызываемую для указанного типа кодировки и имени функции. |
Функция CryptUnregisterOID | Удаляет регистрацию библиотеки DLL, содержащей вызываемую функцию для указанного типа кодировки, имени функции и OID. |
CryptUnregisterOIDInfo | Удаляет регистрацию указанной информации OID. |
Функции получения удаленных объектов
Следующие функции позволяют пользователю получить объект инфраструктуры открытого ключа (PKI), получить URL-адрес сертификата, CTL или CRL или извлечь URL-адрес из объекта.
Функции PFX
Следующие функции поддерживают формат обмена личной информацией (PFX) BLOB .
Функция | Описание |
---|---|
PFXExportCertStore | Экспортирует из указанного хранилища сертификатов сертификаты и, если они доступны, связанные с ними закрытые ключи . |
PFXExportCertStoreEx | Экспорт из указанного сертификата хранит сертификаты и, если они доступны, связанные с ними закрытые ключи. |
PFXImportCertStore | Импортирует большой двоичный объект PFX и возвращает дескриптор хранилища, содержащего сертификаты и все связанные с ними закрытые ключи. |
PFXIsPFXBlob | Пытается декодировать внешний уровень BLOB как пакет PFX. |
PFXVerifyPassword | Пытается декодировать внешний уровень большого двоичного объекта как пакет PFX и расшифровать его с помощью заданного пароля. |
Функции резервного копирования и восстановления служб сертификации
Certificate Services включает функции для резервного копирования и восстановления базы данных Certificate Services. Эти функции резервного копирования и восстановления служб сертификации содержатся в Certadm.dll. В отличие от других элементов API, связанных со службами сертификации, эти функции не инкапсулируются в объект, который можно использовать для вызова методов класса.Вместо этого API резервного копирования и восстановления вызываются, сначала загружая библиотеку Certadm.dll в память, вызывая LoadLibrary , а затем определяя адрес функций, вызывая GetProcAddress . После завершения вызова функций резервного копирования и восстановления служб сертификации вызовите FreeLibrary , чтобы освободить ресурсы Certadm.dll из памяти.
[! Примечание] Функции резервного копирования и восстановления, предоставляемые Certadm.dll, не выполняют резервное копирование и восстановление закрытых ключей службы сертификатов .Для получения информации о резервном копировании закрытых ключей служб сертификации см. Резервное копирование и восстановление закрытого ключа служб сертификации.
Для вызова функций резервного копирования и восстановления у вас должны быть права на резервное копирование и восстановление . Для получения дополнительной информации см. Настройка прав резервного копирования и восстановления.
Примечание
Если CoInitializeEx ранее вызывался в том же потоке, который использовался для вызова API резервного копирования и восстановления служб сертификации, флаг COINIT_APARTMENTTHREADED должен быть передан в CoInitializeEx .То есть при использовании одного и того же потока нельзя вызвать API резервного копирования и восстановления служб сертификации, если поток ранее передал флаг COINIT_MULTITHREADED при вызове CoInitializeEx .
API резервного копирования служб сертификации определены в Certbcli.h. Однако при создании программы используйте Certsrv.h в качестве включаемого файла.
Certadm.dll экспортирует следующие API.
Функции обратного вызова
Функции обратного вызова в этом разделе используются для регистрации или установки определяемых приложением поставщиков хранилища сертификатов и для обеспечения соответствующих функций с помощью функций обратного вызова.Функции обратного вызова реализуются приложением и вызываются функциями CryptoAPI . Функции обратного вызова позволяют приложению частично контролировать способ манипулирования данными функциями CryptoAPI.
Функция обратного вызова | Использовать |
---|---|
CertChainFindByIssuerCallback | Определяемая приложением функция обратного вызова, которая позволяет приложению фильтровать сертификаты, которые могут быть добавлены в цепочку сертификатов. |
CertDllOpenStoreProv | Определяет функцию открытия поставщика магазина. |
CertEnumPhysicalStoreCallback | Функция обратного вызова, используемая функцией CertEnumPhysicalStore для форматирования и представления информации о каждом найденном физическом хранилище. |
CertEnumSystemStoreCallback | Функция обратного вызова, используемая функцией CertEnumSystemStore для форматирования и представления информации о каждом найденном физическом хранилище. |
CertEnumSystemStoreLocationCallback | Функция обратного вызова, используемая функцией CertEnumSystemStoreLocation для форматирования и представления информации о каждом найденном физическом хранилище. |
CertStoreProvCloseCallback | Определяет, что происходит, когда счетчик ссылок открытого магазина становится нулевым. |
CertStoreProvControl | Позволяет приложению получать уведомления, когда есть разница между содержимым кэшированного хранилища, которое используется, и содержимым этого хранилища, которое сохраняется в хранилище. |
CertStoreProvDeleteCertCallback | Определяет действия, которые необходимо предпринять перед удалением сертификата из хранилища сертификатов. |
CertStoreProvDeleteCRLCallback | Определяет действия, которые необходимо предпринять перед тем, как список отзыва сертификатов (CRL) будет удален из хранилища сертификатов. |
CertStoreProvDeleteCTL | Определяет, можно ли удалить CTL. |
CertStoreProvFindCert | Находит в магазине первый или следующий сертификат, соответствующий заданным критериям. |
CertStoreProvFindCRL | Находит первый или следующий список отзыва сертификатов в магазине, который соответствует указанным критериям. |
CertStoreProvFindCTL | Находит первый или следующий CTL в магазине, который соответствует заданным критериям. |
CertStoreProvFreeFindCert | Освобождает ранее найденный контекст сертификата. |
CertStoreProvFreeFindCRL | Освобождает ранее найденный контекст CRL. |
CertStoreProvFreeFindCTL | Освобождает ранее найденный контекст CTL. |
CertStoreProvGetCertProperty | Извлекает указанное свойство сертификата. |
CertStoreProvGetCRLProperty | Извлекает указанное свойство CRL. |
CertStoreProvGetCTLProperty | Извлекает указанное свойство CTL. |
CertStoreProvReadCertCallback | В настоящее время не используется, но может быть экспортирован в будущие CSP. |
CertStoreProvReadCRLCallback | В настоящее время не используется, но может быть экспортирован в будущие CSP. |
CertStoreProvReadCTL | Прочтите копию контекста CTL провайдера и, если она существует, создайте новый контекст CTL. |
CertStoreProvSetCertPropertyCallback | Определяет действия, которые необходимо предпринять перед вызовом CertSetCertificateContextProperty или CertGetCertificateContextProperty . |
CertStoreProvSetCRLPropertyCallback | Определяет действия, которые необходимо предпринять перед вызовом CertSetCRLContextProperty или CertGetCRLContextProperty . |
CertStoreProvSetCTLProperty | Определяет, можно ли установить свойство в CTL. |
CertStoreProvWriteCertCallback | Определяет действия, которые необходимо выполнить перед добавлением сертификата в хранилище. |
CertStoreProvWriteCRLCallback | Определяет действия, которые необходимо предпринять перед добавлением CRL в хранилище. |
CertStoreProvWriteCTL | Определяет, можно ли добавить CTL в магазин. |
CRYPT_ENUM_KEYID_PROP | Функция обратного вызова, используемая функцией CryptEnumKeyIdentifierProperties . |
CRYPT_ENUM_OID_FUNCTION | Функция обратного вызова, используемая функцией CryptEnumOIDFunction . |
CRYPT_ENUM_OID_INFO | Функция обратного вызова, используемая функцией CryptEnumOIDInfo . |
CryptGetSignerCertificateCallback | Функция обратного вызова, используемая со структурой CRYPT_VERIFY_MESSAGE_PARA для получения и проверки сертификата лица, подписывающего сообщение. |
PCRYPT_DECRYPT_PRIVATE_KEY_FUNC | Функция обратного вызова, используемая функцией CryptImportPKCS8 . |
PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC | Функция обратного вызова, используемая при создании структуры CRYPT_ENCRYPTED_PRIVATE_KEY_INFO . |
PCRYPT_RESOLVE_HCRYPTPROV_FUNC | Функция обратного вызова, используемая функцией CryptImportPKCS8 . |
PFN_CDF_PARSE_ERROR_CALLBACK | Определяемая пользователем функция, вызывающая ошибки функции определения каталога при анализе файла определения каталога (CDF). |
PFN_CERT_CREATE_CONTEXT_SORT_FUNC | Вызывается для каждой отсортированной записи контекста при создании контекста. |
PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY | Устанавливаемая функция идентификатора объекта (OID) CNG для импорта уже расшифрованного ключа шифрования содержимого (CEK). |
PFN_CMSG_CNG_IMPORT_KEY_AGREE | Импортирует ключ шифрования содержимого для ключевого транспортного получателя сообщения в конверте. |
PFN_CMSG_CNG_IMPORT_KEY_TRANS | Устанавливаемая функция CNG OID для импорта и расшифровки ключа-транспортного получателя, зашифрованного, содержимого encryption key (CEK). |
PFN_CMSG_EXPORT_KEY_AGREE | Шифрует и экспортирует ключ шифрования содержимого для получателя соглашения о ключах конвертированного сообщения. |
PFN_CMSG_EXPORT_KEY_TRANS | Шифрует и экспортирует ключ шифрования содержимого для ключевого транспортного получателя обернутого сообщения. |
PFN_CMSG_EXPORT_MAIL_LIST | Шифрует и экспортирует ключ шифрования содержимого для списка рассылки получателя сообщения в конверте. |
PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY | Создает симметричный ключ , используемый для шифрования содержимого сообщения в конверте. |
PFN_CMSG_IMPORT_KEY_AGREE | Импортирует ключ шифрования содержимого для ключевого транспортного получателя сообщения в конверте. |
PFN_CMSG_IMPORT_KEY_TRANS | Импортирует ключ шифрования содержимого для ключевого транспортного получателя сообщения в конверте. |
PFN_CMSG_IMPORT_MAIL_LIST | Импортирует ключ шифрования содержимого для ключевого транспортного получателя сообщения в конверте. |
PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC | Вызывается CryptExportPublicKeyInfoEx для экспорта большого двоичного объекта открытого ключа и его кодирования. |
PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC | Вызывается для декодирования и возврата идентификатора алгоритма хеширования и, при необходимости, параметров подписи. |
PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC | Вызывается для подписи и кодирования вычисленного хэша. |
Использование криптографии - приложения Win32
- 2 минуты на чтение
В этой статье
В следующих разделах представлена информация об использовании криптографии. Эти процедуры и примеры демонстрируют задачи CryptoAPI, CAPICOM и Certificate Services.В примерах используются вызовы криптографических функций, интерфейсы и объекты, описанные в Справочнике по криптографии.
.
Криптографические услуги | Документы Microsoft
- 16 минут на чтение
В этой статье
Публичные сети, такие как Интернет, не предоставляют средств безопасной связи между объектами. Связь по таким сетям может быть прочитана или даже изменена неавторизованными третьими сторонами.Криптография помогает защитить данные от просмотра, предоставляет способы определить, были ли данные изменены, и помогает обеспечить безопасные средства связи по другим небезопасным каналам. Например, данные могут быть зашифрованы с помощью криптографического алгоритма, переданы в зашифрованном состоянии и позже расшифрованы предполагаемой стороной. Если третье лицо перехватит зашифрованные данные, их будет сложно расшифровать.
В .NET классы в пространстве имен System.Security.Cryptography управляют за вас многими деталями криптографии.Некоторые из них представляют собой оболочки для реализаций операционной системы, а другие - чисто управляемые реализации. Вам не нужно быть экспертом в криптографии, чтобы использовать эти классы. Когда вы создаете новый экземпляр одного из классов алгоритмов шифрования, ключи автоматически генерируются для простоты использования, а свойства по умолчанию максимально безопасны и надежны.
В этом обзоре представлен синопсис методов и практик шифрования, поддерживаемых .NET, включая манифесты ClickOnce.
Криптографические примитивы
В типичной ситуации, когда используется криптография, две стороны (Алиса и Боб) общаются по незащищенному каналу.Алиса и Боб хотят, чтобы их общение оставалось непонятным для всех, кто может их слушать. Более того, поскольку Алиса и Боб находятся в удаленных местах, Алиса должна убедиться, что информация, которую она получает от Боба, никем не была изменена во время передачи. Кроме того, она должна убедиться, что информация действительно исходит от Боба, а не от кого-то, выдающего себя за Боба.
Криптография используется для достижения следующих целей:
-
Конфиденциальность: помогает защитить личность или данные пользователя от чтения.
-
Целостность данных: помогает защитить данные от изменений.
-
Аутентификация: чтобы гарантировать, что данные исходят от определенной стороны.
-
Фиксация авторства: чтобы определенная сторона не отрицала отправку сообщения.
Для достижения этих целей вы можете использовать комбинацию алгоритмов и методов, известных как криптографические примитивы, для создания криптографической схемы. В следующей таблице перечислены криптографические примитивы и их использование.
Криптографический примитив | Использовать |
---|---|
Шифрование с секретным ключом (симметричная криптография) | Выполняет преобразование данных, чтобы предотвратить их чтение третьими лицами. Этот тип шифрования использует один общий секретный ключ для шифрования и дешифрования данных. |
Шифрование с открытым ключом (асимметричная криптография) | Выполняет преобразование данных, чтобы предотвратить их чтение третьими лицами.Этот тип шифрования использует пару открытого / закрытого ключей для шифрования и дешифрования данных. |
Криптографическая подпись | Помогает проверить, что данные исходят от определенной стороны, путем создания цифровой подписи, уникальной для этой стороны. Этот процесс также использует хеш-функции. |
Криптографические хэши | Отображает данные любой длины в последовательность байтов фиксированной длины. Хэши статистически уникальны; другая двухбайтовая последовательность не будет хешировать до того же значения. |
Шифрование секретным ключом
Алгоритмы шифрования с секретным ключом используют один секретный ключ для шифрования и дешифрования данных. Вы должны защитить ключ от доступа неавторизованных агентов, потому что любая сторона, у которой есть ключ, может использовать его для дешифрования ваших данных или зашифровать свои собственные данные, утверждая, что они исходят от вас.
Шифрование с секретным ключом также называется симметричным шифрованием, потому что для шифрования и дешифрования используется один и тот же ключ. Алгоритмы шифрования с секретным ключом очень быстрые (по сравнению с алгоритмами с открытым ключом) и хорошо подходят для выполнения криптографических преобразований больших потоков данных.Алгоритмы асимметричного шифрования, такие как RSA, математически ограничены в том, сколько данных они могут зашифровать. Алгоритмы симметричного шифрования обычно не имеют этих проблем.
Тип алгоритма секретного ключа, называемый блочным шифром, используется для шифрования одного блока данных за раз. Блочные шифры, такие как Data Encryption Standard (DES), TripleDES и Advanced Encryption Standard (AES), криптографически преобразуют входной блок размером n байтов в выходной блок зашифрованных байтов.Если вы хотите зашифровать или расшифровать последовательность байтов, вы должны делать это блок за блоком. Поскольку n является небольшим (8 байтов для DES и TripleDES; 16 байтов [по умолчанию], 24 байта или 32 байта для AES), значения данных, превышающие n , должны быть зашифрованы по одному блоку за раз. Значения данных меньше n должны быть расширены до n для обработки.
Одна простая форма блочного шифра называется режимом электронной кодовой книги (ECB).Режим ECB не считается безопасным, поскольку он не использует вектор инициализации для инициализации первого блока открытого текста. Для данного секретного ключа k простой блочный шифр, который не использует вектор инициализации, зашифрует один и тот же входной блок открытого текста в тот же выходной блок зашифрованного текста. Следовательно, если у вас есть повторяющиеся блоки во входном потоке открытого текста, у вас будут повторяющиеся блоки в выходном потоке зашифрованного текста. Эти повторяющиеся выходные блоки предупреждают неавторизованных пользователей о слабом шифровании, используемом алгоритмах, которые могли быть использованы, и возможных режимах атаки.Таким образом, режим шифрования ECB весьма уязвим для анализа и, в конечном итоге, обнаружения ключей.
Классы блочного шифра, которые предоставляются в библиотеке базовых классов, используют режим цепочки по умолчанию, называемый цепочкой блоков шифров (CBC), хотя вы можете изменить это значение по умолчанию, если хотите.
Шифры CBC преодолевают проблемы, связанные с шифрами ECB, за счет использования вектора инициализации (IV) для шифрования первого блока открытого текста. Каждый последующий блок открытого текста подвергается побитовой операции исключающего ИЛИ ( XOR
) с предыдущим блоком зашифрованного текста перед его шифрованием.Таким образом, каждый блок зашифрованного текста зависит от всех предыдущих блоков. Когда используется эта система, общие заголовки сообщений, которые могут быть известны неавторизованному пользователю, не могут использоваться для обратного проектирования ключа.
Один из способов скомпрометировать данные, зашифрованные с помощью шифра CBC, - выполнить исчерпывающий поиск всех возможных ключей. В зависимости от размера ключа, который используется для шифрования, этот вид поиска занимает очень много времени даже на самых быстрых компьютерах и поэтому невозможен.Большие размеры ключа труднее расшифровать. Хотя шифрование не делает теоретически невозможным для злоумышленника извлечение зашифрованных данных, оно повышает стоимость этого. Если на выполнение исчерпывающего поиска для получения данных, имеющих значение только в течение нескольких дней, уходит три месяца, метод исчерпывающего поиска нецелесообразен.
Недостатком шифрования с секретным ключом является то, что оно предполагает, что две стороны согласовали ключ и IV и передали свои значения.IV не считается секретом и может передаваться вместе с сообщением открытым текстом. Однако ключ должен храниться в секрете от неавторизованных пользователей. Из-за этих проблем шифрование с секретным ключом часто используется вместе с шифрованием с открытым ключом для конфиденциальной передачи значений ключа и IV.
Предполагая, что Алиса и Боб - две стороны, которые хотят общаться по незащищенному каналу, они могут использовать шифрование с секретным ключом следующим образом: Алиса и Боб соглашаются использовать один конкретный алгоритм (например, AES) с определенным ключом и IV.Алиса составляет сообщение и создает сетевой поток (возможно, именованный канал или сетевое электронное письмо), по которому отправляется сообщение. Затем она шифрует текст, используя ключ и IV, и отправляет зашифрованное сообщение и IV Бобу по внутренней сети. Боб получает зашифрованный текст и расшифровывает его, используя IV и заранее согласованный ключ. Если передача перехвачена, перехватчик не может восстановить исходное сообщение, потому что он не знает ключа. В этом случае секретным должен оставаться только ключ.В реальном сценарии Алиса или Боб генерируют секретный ключ и используют шифрование с открытым ключом (асимметричное) для передачи секретного (симметричного) ключа другой стороне. Дополнительные сведения о шифровании с открытым ключом см. В следующем разделе.
.NET предоставляет следующие классы, реализующие алгоритмы шифрования с секретным ключом:
-
AES
-
HMACSHA256, HMACSHA384 и HMACSHA512. (Это технически алгоритмы с секретным ключом, потому что они представляют коды аутентификации сообщений, которые вычисляются с использованием криптографической хеш-функции в сочетании с секретным ключом.См. Значения хэша далее в этой статье.)
Шифрование с открытым ключом
Шифрование с открытым ключом использует закрытый ключ, который должен храниться в секрете от неавторизованных пользователей, и открытый ключ, который может быть открыт для всех. Открытый ключ и закрытый ключ математически связаны; данные, зашифрованные с помощью открытого ключа, можно расшифровать только с помощью закрытого ключа, а данные, подписанные с помощью закрытого ключа, можно проверить только с помощью открытого ключа. Открытый ключ может быть доступен любому; он используется для шифрования данных, отправляемых хранителю секретного ключа.Криптографические алгоритмы с открытым ключом также известны как асимметричные алгоритмы, потому что один ключ требуется для шифрования данных, а другой ключ требуется для дешифрования данных. Базовое криптографическое правило запрещает повторное использование ключа, и оба ключа должны быть уникальными для каждого сеанса связи. Однако на практике асимметричные ключи обычно долговечны.
Две стороны (Алиса и Боб) могут использовать шифрование с открытым ключом следующим образом: сначала Алиса генерирует пару открытого / закрытого ключей. Если Боб хочет отправить Алисе зашифрованное сообщение, он запрашивает у нее ее открытый ключ.Алиса отправляет Бобу свой открытый ключ по незащищенной сети, и Боб использует этот ключ для шифрования сообщения. Боб отправляет зашифрованное сообщение Алисе, и она расшифровывает его, используя свой закрытый ключ. Если Боб получил ключ Алисы по незащищенному каналу, например общедоступной сети, Боб открыт для атаки типа «злоумышленник в середине». Следовательно, Боб должен проверить с Алисой, что у него есть правильная копия ее открытого ключа.
Во время передачи открытого ключа Алисы неавторизованный агент может перехватить ключ.Более того, тот же агент может перехватить зашифрованное сообщение от Боба. Однако агент не может расшифровать сообщение с помощью открытого ключа. Сообщение можно расшифровать только с помощью закрытого ключа Алисы, который не был передан. Алиса не использует свой закрытый ключ для шифрования ответного сообщения Бобу, потому что любой, у кого есть открытый ключ, может расшифровать сообщение. Если Алиса хочет отправить сообщение обратно Бобу, она запрашивает у Боба его открытый ключ и шифрует свое сообщение, используя этот открытый ключ. Затем Боб расшифровывает сообщение, используя связанный с ним закрытый ключ.
В этом сценарии Алиса и Боб используют шифрование с открытым ключом (асимметричное) для передачи секретного (симметричного) ключа и используют шифрование с секретным ключом для оставшейся части своего сеанса.
Следующий список предлагает сравнение криптографических алгоритмов с открытым и секретным ключом:
-
Криптографические алгоритмы с открытым ключом используют фиксированный размер буфера, тогда как криптографические алгоритмы с секретным ключом используют буфер переменной длины.
-
Алгоритмы с открытым ключом не могут использоваться для объединения данных в потоки, как это могут делать алгоритмы с секретным ключом, поскольку могут быть зашифрованы только небольшие объемы данных.Следовательно, асимметричные операции не используют ту же модель потоковой передачи, что и симметричные операции.
-
Шифрование с открытым ключом имеет гораздо большее пространство ключей (диапазон возможных значений ключа), чем шифрование с секретным ключом. Следовательно, шифрование с открытым ключом менее подвержено исчерпывающим атакам, пытающимся перебирать все возможные ключи.
-
Открытые ключи легко распространять, потому что их не нужно защищать, при условии, что существует какой-либо способ проверки личности отправителя.
-
Некоторые алгоритмы с открытым ключом (такие как RSA и DSA, но не алгоритмы Диффи-Хеллмана) могут использоваться для создания цифровых подписей для проверки личности отправителя данных.
-
Алгоритмы с открытым ключом очень медленны по сравнению с алгоритмами с секретным ключом и не предназначены для шифрования больших объемов данных. Алгоритмы с открытым ключом полезны только для передачи очень небольших объемов данных. Обычно шифрование с открытым ключом используется для шифрования ключа и IV, которые будут использоваться алгоритмом секретного ключа.После передачи ключа и IV шифрование с секретным ключом используется до конца сеанса.
.NET предоставляет следующие классы, реализующие алгоритмы с открытым ключом:
RSA допускает как шифрование, так и подпись, но DSA можно использовать только для подписи. DSA не так безопасен, как RSA, и мы рекомендуем RSA. Диффи-Хеллмана можно использовать только для генерации ключей. В общем, алгоритмы с открытым ключом более ограничены в использовании, чем алгоритмы с закрытым ключом.
Цифровые подписи
Алгоритмы открытого ключа также могут использоваться для формирования цифровых подписей.Цифровые подписи удостоверяют личность отправителя (если вы доверяете открытому ключу отправителя) и помогают защитить целостность данных. Используя открытый ключ, сгенерированный Алисой, получатель данных Алисы может проверить, что Алиса отправила их, сравнив цифровую подпись с данными Алисы и открытым ключом Алисы.
Чтобы использовать криптографию с открытым ключом для цифровой подписи сообщения, Алиса сначала применяет хеш-алгоритм к сообщению, чтобы создать дайджест сообщения. Дайджест сообщения - это компактное и уникальное представление данных.Затем Алиса шифрует дайджест сообщения своим закрытым ключом, чтобы создать свою личную подпись. После получения сообщения и подписи Боб расшифровывает подпись, используя открытый ключ Алисы, чтобы восстановить дайджест сообщения, и хэширует сообщение, используя тот же алгоритм хеширования, который использовала Алиса. Если дайджест сообщения, который вычисляет Боб, в точности совпадает с дайджестом сообщения, полученным от Алисы, Боб уверен, что сообщение пришло от владельца закрытого ключа и что данные не были изменены. Если Боб верит, что Алиса является владельцем закрытого ключа, он знает, что сообщение пришло от Алисы.
Примечание
Подпись может быть проверена кем угодно, потому что открытый ключ отправителя общеизвестен и обычно включается в формат цифровой подписи. Этот метод не сохраняет секретность сообщения; чтобы сообщение было секретным, оно также должно быть зашифровано.
.NET предоставляет следующие классы, реализующие алгоритмы цифровой подписи:
Значения хэша
Хеш-алгоритмы преобразуют двоичные значения произвольной длины в меньшие двоичные значения фиксированной длины, известные как хеш-значения.Хеш-значение - это числовое представление части данных. Если вы хешируете абзац открытого текста и изменяете хотя бы одну букву абзаца, последующий хеш даст другое значение. Если хеш криптографически стойкий, его значение значительно изменится. Например, если изменить один бит сообщения, сильная хеш-функция может выдать результат, который отличается на 50 процентов. Многие входные значения могут иметь одно и то же выходное значение. Однако с вычислительной точки зрения невозможно найти два разных входа, которые имеют одно и то же значение.
Две стороны (Алиса и Боб) могут использовать хеш-функцию для обеспечения целостности сообщения. Они выбирают алгоритм хеширования для подписи своих сообщений. Алиса напишет сообщение, а затем создаст хэш этого сообщения, используя выбранный алгоритм. Затем они следовали одному из следующих методов:
-
Алиса отправляет Бобу текстовое сообщение и хешированное сообщение (цифровую подпись). Боб получает и хеширует сообщение и сравнивает свое хеш-значение с хеш-значением, полученным от Алисы.Если значения хеш-функции идентичны, сообщение не было изменено. Если значения не идентичны, сообщение было изменено после того, как Алиса написала его.
К сожалению, этот метод не позволяет установить подлинность отправителя. Кто угодно может выдать себя за Алису и отправить сообщение Бобу. Они могут использовать один и тот же алгоритм хеширования для подписи своего сообщения, и все, что Боб может определить, - это то, что сообщение соответствует его подписи. Это одна из форм атаки «человек посередине». Для получения дополнительной информации см. Пример безопасной связи криптографии следующего поколения (CNG).
-
Алиса отправляет сообщение открытого текста Бобу по незащищенному общедоступному каналу. Она отправляет хешированное сообщение Бобу по защищенному частному каналу. Боб получает сообщение в виде открытого текста, хеширует его и сравнивает хеш с хешем, которым обмениваются в частном порядке. Если хеши совпадают, Боб знает две вещи:
Чтобы эта система работала, Алиса должна скрыть свое исходное значение хеш-функции от всех сторон, кроме Боба.
-
Алиса отправляет Бобу сообщение в виде открытого текста по незащищенному общедоступному каналу и помещает хешированное сообщение на свой общедоступный веб-сайт.
Этот метод предотвращает фальсификацию сообщений, не позволяя никому изменять хеш-значение. Хотя сообщение и его хэш могут быть прочитаны кем угодно, значение хеш-функции может быть изменено только Алисой. Злоумышленнику, который хочет выдать себя за Алису, потребуется доступ к веб-сайту Алисы.
Ни один из предыдущих методов не помешает кому-либо прочитать сообщения Алисы, потому что они передаются в виде открытого текста. Полная безопасность обычно требует цифровых подписей (подписи сообщений) и шифрования.
.NET предоставляет следующие классы, реализующие алгоритмы хеширования:
.NET также предоставляет MD5 и SHA1. Но алгоритмы MD5 и SHA-1 оказались небезопасными, и теперь вместо них рекомендуется SHA-2. SHA-2 включает SHA256, SHA384 и SHA512.
Генерация случайных чисел
Генерация случайных чисел является неотъемлемой частью многих криптографических операций. Например, криптографические ключи должны быть как можно более случайными, чтобы их было невозможно воспроизвести.Генераторы криптографических случайных чисел должны генерировать выходные данные, которые невозможно предсказать с вычислительной точки зрения с вероятностью лучше половины. Следовательно, любой метод прогнозирования следующего выходного бита не должен работать лучше, чем случайное предположение. Классы в .NET Framework используют генераторы случайных чисел для генерации криптографических ключей.
Класс RandomNumberGenerator - это реализация алгоритма генератора случайных чисел.
Манифесты ClickOnce
В формате.NET Framework 3.5 следующие классы криптографии позволяют получать и проверять информацию о подписях манифеста для приложений, развернутых с использованием технологии ClickOnce:
Кроме того, следующие классы предоставляют конкретную информацию о подписи:
Классы криптографии следующего поколения (CNG)
В .NET Framework 3.5 и более поздних версиях классы криптографии следующего поколения (CNG) предоставляют управляемую оболочку для собственных функций CNG. (CNG - это замена CryptoAPI.) В именах этих классов есть "Cng". Центральным элементом классов оболочки CNG является класс контейнера ключей CngKey, который абстрагирует хранение и использование ключей CNG. Этот класс позволяет вам безопасно хранить пару ключей или открытый ключ и обращаться к нему, используя простое строковое имя. Класс подписи ECDsaCng на основе эллиптических кривых и класс шифрования ECDiffieHellmanCng могут использовать объекты CngKey.
Класс CngKey используется для множества дополнительных операций, включая открытие, создание, удаление и экспорт ключей.Он также обеспечивает доступ к базовому дескриптору ключа для использования при прямом вызове собственных функций.
.NET Framework 3.5 также включает множество поддерживающих классов CNG, например следующие:
См. Также
.Исправить ошибки поставщика службы криптографии в Windows 10
Иногда, когда мы пытаемся разместить цифровую подпись в файле PDF с помощью программного обеспечения, разработанного специально для этой цели, появляется сообщение об ошибке с любым из следующих описаний:
Поставщик службы криптографии Windows сообщил об ошибке. Указан неверный тип провайдера, недействительная подпись, нарушена безопасность, код 2148073504 или набор ключей не существует
Проблема, в большинстве случаев, возникает из-за устаревших сертификатов или поврежденных настроек в реестре.Итак, первое, что вы можете сделать, это сбросить или воссоздать профиль пользователя в домене, чтобы проверить результат.
Поставщик криптографических услуг сообщил об ошибке

Согласно Microsoft, поставщик криптографических услуг (CSP) содержит реализации криптографических стандартов и алгоритмов. Как минимум, CSP состоит из библиотеки динамической компоновки (DLL), которая реализует функции CryptoSPI (интерфейс системной программы). Провайдеры реализуют криптографические алгоритмы, генерируют ключи, обеспечивают хранение ключей и аутентифицируют пользователей.
Если вы столкнулись с ошибками поставщика криптографических услуг, вы можете попробовать следующее:
- Перезапустить службу шифрования
- Проверить сертификат
- Переустановите сертификат
- Клиентский инструмент аутентификации SafeNet
- Восстановить папку локального хранилища Microsoft Cryptography
- Удалите ePass2003.
1] Перезапустить криптографическую службу
Запустите файл services.msc и перезапустите службу криптографии Windows.
2] Проверить сертификат
Откройте Internet Explorer> Сервис> Свойства обозревателя. Выберите вкладку «Содержимое» и нажмите «Сертификаты». Проверьте, есть ли сертификат на программу или провайдер, выдающий ошибки. Если он отсутствует, вам придется создать новый. Если срок его действия истек, удалите его и создайте новый. Если конкретный сертификат не работает, выберите другой сертификат и удалите старые сертификаты.
3] Повторно установить сертификат
Переустановите все хранилище сертификатов и сертификаты пользователя.
4] Проверьте клиентский инструмент аутентификации SafeNet
Если в вашей системе установлено приложение SafeNet Authentication Client Tool , откройте приложение, перейдя в каталог установки или щелкнув правой кнопкой мыши значок SafeNet на панели задач и выбрав «Инструменты» в меню.
Щелкните значок в виде шестеренки, чтобы перейти в раздел расширенного просмотра. В разделе Advanced View разверните Tokens и перейдите к сертификату, который вы хотите использовать для подписи.Вы можете найти их в группе Сертификаты пользователей.
Затем щелкните свой сертификат правой кнопкой мыши и выберите в раскрывающемся меню «Установить как CSP». Повторите тот же шаг для всех сертификатов, которые вы используете.
Закройте средства клиента аутентификации SafeNet и попробуйте снова подписать документы.
5] Восстановить папку локального хранилища Microsoft Cryptography
Перейдите в папку C: \ ProgramData \ Microsoft \ Crypto \ RSA . Переименуйте папку, обозначенную S-1-5-18.Перезагрузите систему и посмотрите, поможет ли это.
6] Удалить ePass2003
Если у вас установлено программное обеспечение ePass2003 , причиной проблемы может быть электронный токен ePass2003. Желательно сначала удалить его и переустановить. Для этого перейдите в раздел «Настройки» инструмента, перейдите в раздел «Приложения и функции» и удалите его, как любое другое приложение.
Перезагрузите компьютер и снова установите ePass2003 .Во время переустановки убедитесь, что вы выбрали Microsoft CSP при выборе опции CSP. Все должно вернуться к нормальному состоянию, и ошибка поставщика службы криптографии Windows больше не должна появляться.
Всего наилучшего!
Связанное чтение : Службы Windows не запускаются.

- Теги: Услуги, Устранение неполадок