Введение в разработку безопасных приложений для WindowsIntro to secure Windows app development

Эта вводная статья помогает архитекторам и разработчикам приложений лучше понять различные возможности платформы Windows 10, которые ускоряют создание безопасных приложений универсальной платформы Windows (UWP).This introductory article helps app architects and developers better understand the various Windows 10 platform capabilities that accelerate creating secure Universal Windows Platform (UWP) apps. В ней подробно описано, как использовать функции безопасности Windows, доступные на каждом из этих этапов: проверка подлинности, передача данных и данные в состоянии покоя.It details how to use the Windows security features available at each of the following stages: authentication, data-in-flight, and data-at-rest. Более подробные сведения по каждой теме можно получить в дополнительных ресурсах к каждой главе.You can find more in-depth information on each topic by reviewing the additional resources included in each chapter.

1. Введение1 Introduction

Разработка безопасного приложения может оказаться непростой задачей.Developing a secure app can be a challenge. Сегодня в динамичном мире мобильных, социальных, облачных и комплексных корпоративных приложений клиенты ожидают, что приложения станут доступными и будут обновляться быстрее, чем когда-либо раньше.In today’s fast-paced world of mobile, social, cloud, and complex enterprise apps, customers expect apps to become available and updated faster than ever. Они также используют многие типы устройств, повышая сложность создания интерфейсов приложений.They also use many types of devices, further adding to the complexity of creating app experiences. При создании приложений для универсальной платформы Windows (UWP) ОС Windows 10 устройствами могут быть традиционные настольные компьютеры, ноутбуки, планшеты и мобильные устройства. Кроме того, список устройств можно расширить за счет новых устройств "Интернет вещей" (IoT), Xbox One, Microsoft Surface Hub и HoloLens.If you build for the Windows 10 Universal Windows Platform (UWP), that could include the traditional list of desktops, laptops, tablets, and mobile devices; in addition to a growing list of new devices spanning the Internet of Things, Xbox One, Microsoft Surface Hub, and HoloLens. Как разработчик, вы должны убедиться, что ваши приложения обеспечивают безопасный обмен данными и их сохранение на всех платформах или устройствах.As the developer, you must ensure your apps communicate and store data securely, across all the platforms or devices involved.

Вот некоторые из преимуществ использования функций безопасности Windows 10.Here are some of the benefits of utilizing Windows 10 security features.

  • Вы стандартизируете функции безопасности на всех устройствах, поддерживающих Windows 10, с помощью согласованных API для компонентов и технологий безопасности.You will have standardized security across all devices that support Windows 10, by using consistent APIs for security components and technologies.
  • Вы пишете, тестируете и обслуживаете меньший объем кода, чем в случае реализации специального кода для охвата этих сценариев безопасности.You write, test, and maintain less code than you would if you implemented custom code to cover these security scenarios.
  • Ваши приложения становятся более стабильными и безопасными, так как вы используете операционную систему для управления доступом приложений к своим ресурсам и локальным или удаленным ресурсам системы.Your apps become more stable and secure because you use the operating system to control how the app accesses its resources and local or remote system resources.

Во время проверки подлинности проверяется личность пользователя, запрашивающего доступ к определенной службе.During authentication, the identity of a user requesting access to a particular service is validated. Windows Hello — это компонент Windows 10, помогающий создать более безопасный механизм проверки подлинности в приложениях для Windows.Windows Hello is the component in Windows 10 that helps create a more secure authentication mechanism in Windows apps. Для реализации многофакторной проверки подлинности для ваших приложений с его помощью можно использовать персональный идентификационный номер (PIN-код) или биометрические данные, например, отпечатки пальцев пользователей, распознавание лица или радужной оболочки глаз.With it, you can use a Personal Identification Number (PIN) or biometrics such as the user’s fingerprints, face, or iris to implement multi-factor authentication for your apps.

Данные в процессе передачи — это подключение и сообщения, которые передаются через него.Data-in-flight refers to the connection and the messages transferred across it. Примером является получение данных от удаленного сервера с помощью веб-служб.An example of this is retrieving data from a remote server using web services. Использование протоколов SSL и HTTPS гарантирует безопасность подключения.The use of Secure Sockets Layer (SSL) and Secure Hypertext Transfer Protocol (HTTPS) ensures the security of the connection. Блокировка доступа к этим сообщениям для промежуточных сторон или возможности связи неавторизованных приложений с веб-службами является ключом к обеспечению безопасности данных в процессе передачи.Preventing intermediary parties from accessing these messages, or unauthorized apps from communicating with the web services, is key to securing data in flight.

И наконец, данные в состоянии покоя — это данные, хранящиеся в памяти или на носителях данных.Lastly, data-at-rest relates to data residing in memory or on storage media. В Windows 10 есть модель приложения, которая блокирует несанкционированный доступ к данным между приложениями и обеспечивает шифрование API для повышения безопасности данных на устройстве.Windows 10 has an app model that prevents unauthorized data access between apps, and offers encryption APIs to further secure data on the device. Функцию под названием "Хранилище учетных данных" можно использовать для безопасного хранения учетных данных пользователя на устройстве. При этом операционная система не допускает доступ других приложений к этим данным.A feature called Credential Locker can be used to securely store user credentials on the device, with the operating system preventing other apps from accessing them.

2. Факторы проверки подлинности2 Authentication Factors

Для защиты данных пользователь, запрашивающий доступ к ним, должен пройти идентификацию и авторизацию, чтобы получить доступ к запрашиваемым ресурсам данных.To protect data, the person requesting access to it must be identified and authorized to access the data resources they request. Процесс определения личности пользователя называется проверкой подлинности, а определение прав доступа к ресурсу называется авторизацией.The process of identifying a user is called authentication, and determining access privileges to a resource is called authorization. Это тесно связанные между собой операции, хотя пользователю они могут показаться одинаковыми.These are closely related operations, and to the user they might be indistinguishable. В зависимости от многих факторов (например, хранятся ли данные на одном сервере или размещены в нескольких системах), это могут быть относительно простые или сложные операции.They can be relatively simple or complex operations, depending on many factors: for example, whether the data resides on one server or is distributed across many systems. Сервер, предоставляющий службы проверки подлинности и авторизации, называется поставщиком удостоверений.The server providing the authentication and authorization services is referred to as the identity provider.

Для проверки подлинности в конкретной службе или приложении пользователь использует учетные данные, которые он знает, вещь, которой он владеет, или что-то, чем он является.To authenticate themselves with a particular service and/or app, the user employs credentials made up of something they know, something they have, and/or something they are. Все перечисленные ниже параметры называются факторами проверки подлинности.Each of these are called authentication factors.

  • Данными, которые знает пользователь, обычно является пароль, но это также может быть PIN-код или сочетание секретного вопроса и ответа на него.Something the user knows is usually a password, but it can also be a personal identification number (PIN) or a “secret” question-and-answer pair.
  • Вещью, которой владеет пользователь, чаще всего является аппаратное запоминающее устройство (например, USB-накопитель, содержащий уникальные для пользователя данные проверки подлинности).Something the user has is most often a hardware memory device such as a USB stick containing the authentication data unique to the user.
  • То, чем является пользователь, часто охватывает отпечатки пальцев, но существуют набирающие популярность факторы, например, распознавание речи, лица, глаз пользователя или образцов его поведения.Something the user is often encompasses their fingerprints, but there are increasingly popular factors like the user’s speech, facial, ocular (eye) characteristics, or patterns of behavior. Когда эти показатели сохраняются в форме данных, они называются биометрическими характеристиками.When stored as data, these measurements are called biometrics.

Пароль, созданный пользователем, по сути является фактором проверки подлинности, но часто его недостаточно. Любой, кто знает пароль, может выполнить вход от имени пользователя, владеющего им.A password created by the user is an authentication factor in itself, but it often isn’t sufficient; anyone who knows the password can impersonate the user who owns it. Смарт-карта может обеспечить более высокий уровень безопасности, но она может быть потеряна, украдена или оставлена не на месте.A smart card can provide a higher level of security, but it might be stolen, lost, or misplaced. Система, которая может проверить подлинность пользователя по отпечатку пальца или сканированию глаза может обеспечить самый высокий и удобный уровень безопасности, но требует ресурсоемкого и специализированного оборудования (например, камеру Intel RealSense для распознавания лица), которое может не быть доступным для всех пользователей.A system that can authenticate a user by their fingerprint or by an ocular scan might provide the highest and most convenient level of security, but it requires expensive and specialized hardware (for example, an Intel RealSense camera for facial recognition) that might not be available to all users.

Метод проверки подлинности, используемый системой, является сложным и важным аспектом безопасности данных.Designing the method of authentication used by a system is a complex and important aspect of data security. В целом, чем большее число факторов вы используете в проверке подлинности, тем более безопасной будет система.In general, the greater number of factors you use in authentication, the more secure the system is. В то же время, проверка подлинности должна быть пригодной для использования.At the same time, authentication must be usable. Пользователь обычно входит много раз в день, поэтому процесс должен быть быстрым.A user will usually log in many times a day, so the process must be fast. Выбор типа проверки подлинности — это компромисс между безопасностью и удобством использования. Однофакторная проверка подлинности является наименее безопасной и самой простой в использовании, и многофакторная проверка подлинности становится все более безопасной, но и более сложной, так как в нее добавляется все больше дополнительных факторов.Your choice of authentication type is a trade-off between security and ease of use; single-factor authentication is the least secure and easiest to use, and multi-factor authentication becomes more secure, but more complex as more factors are added.

2.1 Однофакторная проверка подлинности2.1 Single-factor authentication

Эта форма проверки подлинности основывается на одних учетных данных пользователя.This form of authentication is based on a single user credential. Обычно это пароль, но это также может быть PIN-код.This is usually a password, but it could also be a personal identification number (PIN).

Ниже показан процесс однофакторной проверки подлинности.Here’s the process of single-factor authentication.

  • Пользователь предоставляет имя пользователя и пароль поставщику удостоверений.The user provides their username and password to the identity provider. Поставщиком удостоверений называется серверный процесс, который проверяет личность пользователя.The identity provider is the server process that verifies the identity of the user.
  • Поставщик удостоверений проверяет, совпадает ли имя пользователя и пароль с хранящимися в системе данными.The identity provider checks whether the username and password are the same as those stored in the system. В большинстве случаев пароль будет зашифрован для дополнительной безопасности, чтобы другие пользователи не могли его прочитать.In most cases, the password will be encrypted, providing additional security so that others cannot read it.
  • Поставщик удостоверений возвращает состояние проверки подлинности, указывающее, была ли проверка подлинности успешной.The identity provider returns an authentication status that indicates whether the authentication was successful.
  • Если она успешна, начнется обмен данными.If successful, data exchange begins. Если проверка неудачна, пользователю придется повторно пройти проверку подлинности.If unsuccessful, the user must be re-authenticated.

Однофакторная проверка подлинности

Данный метод проверки подлинности в настоящее время используется службами наиболее часто.Today, this method of authentication is the most commonly used one across services. Он также является наименее безопасной формой проверки подлинности при использовании в качестве единственного средства проверки подлинности.It is also the least secure form of authentication when used as the only means of authentication. Требования к сложности пароля, "секретные вопросы" и регулярная смена пароля могут сделать использование паролей более безопасным, но они требуют больших усилий от пользователя и не являются эффективным препятствием для злоумышленников.Password complexity requirements, "secret questions," and regular password changes can make using passwords more secure, but they put more burden on users and they’re not an effective deterrent against hackers.

Сложностью при использовании паролей является то, что их легче успешно угадать, чем в системах с несколькими факторами.The challenge with passwords is that it is easier to guess them successfully than systems that have more than one factor. В случае кражи базы данных с учетными записями пользователей и хэшированным паролем из небольшого интернет-магазина, злоумышленники могут использовать пароли, используемые на других веб-сайтах.If they steal a database with user accounts and hashed password from a little web shop, they can use the passwords used on other web sites. Пользователи постоянно повторно используют учетные записи, поскольку сложные пароли тяжело запомнить.Users tend to reuse accounts all the time, because complex passwords are hard to remember. ИТ-отделу, который управляет паролями, также сложно предлагать механизмы их сброса, требующие частых обновлений паролей и их безопасного хранения.For an IT department, managing passwords also brings with it the complexity of having to offer reset mechanisms, requiring frequent updates to passwords, and storing them in a safe manner.

Несмотря на все недостатки однофакторная проверка подлинности предоставляет пользователям контроль над учетными данными.For all of its disadvantages, single-factor authentication gives the user control of the credential. Они могут создавать и изменять их, а для процесса проверки подлинности требуется только клавиатура.They create it and modify it, and only a keyboard is needed for the authentication process. Это основной аспект, отличающий однофакторную проверку подлинности от многофакторной.This is the main aspect that distinguishes single-factor from multi-factor authentication.

2.1.1. Брокер веб-проверки подлинности2.1.1 Web authentication broker

Как обсуждалось ранее, одной из сложностей проверки подлинности пароля для ИТ-отдела является дополнительная нагрузка, связанная с управлением базой имен пользователей и паролей, механизмами сброса и пр. Все популярным вариантом становится привлечение сторонних поставщиков удостоверений, которые предлагают проверку подлинности с помощью OAuth — открытого стандарта для проверки подлинности.As previously discussed, one of the challenges with password authentication for an IT department is the added overhead of managing the base of usernames/passwords, reset mechanisms, etc. An increasingly popular option is to rely on third-party identity providers that offer authentication through OAuth, an open standard for authentication.

С помощью OAuth ИТ-отделы могут эффективно привлекать ресурсы сторонних поставщиков удостоверений, в частности, Facebook, Twitter или Microsoft, для решения проблемы со сложностью управления базой данных имен пользователей и паролей, функцией сброса пароля и пр.Using OAuth, IT departments can effectively "outsource" the complexity of maintaining a database with usernames and passwords, reset password functionality, etc. to a third party identity provider like Facebook, Twitter or Microsoft.

Пользователи получают полный контроль над своим удостоверением на этих платформах, но приложения с согласия пользователя могут запрашивать маркер у поставщика после того, как пользователь прошел проверку подлинности. Данный механизм может использоваться для авторизации пользователей, прошедших проверку подлинности.Users have complete control over their identity on these platforms, but apps can request a token from the provider, after the user is authenticated and with their consent, which can be used to authorize authenticated users.

Брокер веб-проверки подлинности в Windows 10 предоставляет набор API и инфраструктуру, с помощью которых приложения могут использовать такие виды протоколов проверки подлинности и авторизации, как OAuth и OpenID.The web authentication broker in Windows 10 provides a set of APIs and infrastructure for apps to use authentication and authorization protocols like OAuth and OpenID. Приложения могут запускать операции проверки подлинности с помощью API WebAuthenticationBroker, получая в результате возврат WebAuthenticationResult.Apps can initiate authentication operations through the WebAuthenticationBroker API, resulting in the return of a WebAuthenticationResult. Обзор коммуникационного процесса представлен на следующем рисунке.An overview of the communication flow is illustrated in the following figure.

Процесс WAB

Приложение действует как брокер, начиная проверку подлинности с помощью поставщика удостоверений через WebView в приложении.The app acts as the broker, initiating the authentication with the identity provider through a WebView in the app. После того как поставщик удостоверений провел проверку подлинности пользователя, он возвращает маркер в приложение, который можно использовать, чтобы запросить сведения о пользователе от поставщика удостоверений.When the identity provider has authenticated the user, it returns a token to the app that can be used to request information about the user from the identity provider. В целях безопасности, приложение должно быть зарегистрировано у поставщика удостоверений, прежде чем оно сможет выступать посредником в процедурах проверки подлинности для поставщика удостоверений.As a security measure, the app must be registered with the identity provider before it can broker the authentication processes with the identity provider. Эти этапы регистрации отличаются в зависимости от поставщика.This registration steps differ for each provider.

Вот общий процесс, используемый для вызова API WebAuthenticationBroker для связи с поставщиком.Here’s the general workflow for calling the WebAuthenticationBroker API to communicate with the provider.

  • Создайте строки запроса, которые будут отправляться поставщику удостоверений.Construct the request strings to be sent to the identity provider. Количество строк и данные в каждой строке отличаются для каждой веб-службы, но обычно включают в себя две строки URI, в каждой из которых содержится URL-адрес: один – для запроса проверки подлинности, который необходимо отправить, а другой – для перенаправления пользователя после выполнения авторизации.The number of strings, and the information in each string, is different for each web service but it usually includes two URI strings each containing a URL: one to which the authentication request is sent, and one to which the user is redirected after authorization is complete.
  • Передавая строки запроса, вызовите WebAuthenticationBroker.AuthenticateAsync и ожидайте ответа от поставщика удостоверений.Call WebAuthenticationBroker.AuthenticateAsync, passing in the request strings, and wait for the response from the identity provider.
  • После получения ответа вызовите WebAuthenticationResult.ResponseStatus, чтобы получить информацию о состоянии.Call WebAuthenticationResult.ResponseStatus to get the status when the response is received.
  • Если взаимодействие успешно, обработайте строку ответа, возвращенную поставщиком удостоверений.If the communication is successful, process the response string returned by the identity provider. Если взаимодействие неуспешно, обработайте ошибку.If unsuccessful, process the error.

Если взаимодействие успешно, обработайте строку ответа, возвращенную поставщиком удостоверений.If the communication is successful, process the response string returned by the identity provider. Если взаимодействие неуспешно, обработайте ошибку.If unsuccessful, process the error.

См. пример кода на языке C#, который предназначен для этого процесса, ниже.Sample C# code that for this process is below. Дополнительные сведения и пошаговое руководство см. в разделе WebAuthenticationBroker.For information and a detailed walkthrough, see WebAuthenticationBroker. Полный пример кода см. в образце WebAuthenticationBroker на GitHub.For a complete code sample, check out the WebAuthenticationBroker sample on GitHub.

string startURL = "https://<providerendpoint>?client_id=<clientid>";
string endURL = "http://<AppEndPoint>";

var startURI = new System.Uri(startURL);
var endURI = new System.Uri(endURL);

try
{
    WebAuthenticationResult webAuthenticationResult = 
        await WebAuthenticationBroker.AuthenticateAsync( 
            WebAuthenticationOptions.None, startURI, endURI);

    switch (webAuthenticationResult.ResponseStatus)
    {
        case WebAuthenticationStatus.Success:
            // Successful authentication. 
            break;
        case WebAuthenticationStatus.ErrorHttp:
            // HTTP error. 
            break;
        default:
            // Other error.
        break;
    }
}
catch (Exception ex)
{
    // Authentication failed. Handle parameter, SSL/TLS, and
    // Network Unavailable errors here. 
}

2.2 Многофакторная проверка подлинности2.2 Multi-factor authentication

Многофакторная проверка подлинности использует несколько факторов проверки подлинности.Multi-factor authentication makes use of more than one authentication factor. Обычно, элемент "что-то, что вы знаете", например, пароль, используется с элементом "что-то, что у вас есть", который может быть мобильным телефоном или смарт-картой.Usually, "something you know," such as a password, is combined with "something you have," which can be a mobile phone or a smart card. Даже если злоумышленник узнает пароль пользователя, он все равно не сможет получить доступ к учетной записи без устройства или карты.Even if an attacker discovers the user’s password, the account is still inaccessible without the device or card. А если только злоумышленник получает устройство или карту, они бесполезны для него без пароля.And if only the device or card is compromised, it is not useful to the attacker without the password. Поэтому многофакторная проверка подлинности является более безопасной, но и более сложной, чем однофакторная проверка подлинности.Multi-factor authentication is therefore more secure, but also more complex, than single-factor authentication.

Службы, использующие многофакторную проверку подлинности, часто дают пользователю выбор способа получения вторых учетных данных.Services that use multi-factor authentication will often give the user a choice in how they receive the second credential. Примером такого типа проверки подлинности является повсеместно используемый процесс, при котором код подтверждения отправляется на мобильный телефон пользователя с помощью SMS-сообщения.An example of this type of authentication is a commonly used process where a verification code is sent to the user’s mobile phone using SMS.

  • Пользователь предоставляет имя пользователя и пароль поставщику удостоверений.The user provides their username and password to the identity provider.
  • Поставщик удостоверений проверяет имя пользователя и пароль как в однофакторной авторизации, а затем находит номер мобильного телефона пользователя, который хранится в системе.The identity provider verifies the username and password as in single-factor authorization, and then looks up the user’s mobile phone number stored in the system.
  • Сервер отправляет SMS-сообщение, которое содержит созданный код подтверждения, на мобильный телефон пользователя.The server sends an SMS message containing a generated verification code to the user’s mobile phone.
  • Пользователь предоставляет код подтверждения поставщику удостоверений в форме, предоставляемой ему.The user provides the verification code to the identity provider; through a form presented to the user.
  • Поставщик удостоверений возвращает состояние проверки подлинности, указывающее была ли проверка подлинности обеих учетных данных завершена успешно.The identity provider returns an authentication status that indicates whether the authentication of both credentials were successful.
  • Если она успешна, начнется обмен данными.If successful, data exchange begins. В противном случае пользователь должен повторно пройти проверку подлинности.Otherwise, the user must be re-authenticated.

Двухфакторная проверка подлинности

Как видно, этот процесс также отличается от однофакторной проверки подлинности в том, что вторые учетные данные пользователя отправляются пользователю, а не сам пользователь создает или отправляет их.As you can see, this process also differs from single-factor authentication in that the second user credential is sent to the user instead of being created or provided by the user. Поэтому у пользователя нет полного контроля над требуемыми учетными данными.The user is therefore not in complete control of the necessary credentials. Это также относится к случаю, когда смарт-карта используется в качестве вторых учетных данных: за ее создание и предоставление пользователю несет ответственность организация.This also applies when a smart card is used as the second credential: the organization is in charge of creating and providing it to the user.

2.2.1 Azure Active Directory2.2.1 Azure Active Directory

Azure Active Directory (Azure AD) — это облачная служба управления удостоверениями и доступом, которая может служить поставщиком удостоверений в однофакторной или многофакторной проверке подлинности.Azure Active Directory (Azure AD) is a cloud-based identity and access management service that can serve as the identity provider in single-factor or multi-factor authentication. Проверку подлинности Azure AD можно использовать с кодом подтверждения или без него.Azure AD authentication can be used with or without a verification code.

Хотя в Azure AD может быть также реализована однофакторная проверка подлинности, предприятия обычно требуют более высокий уровень безопасности, который обеспечивает многофакторная проверка подлинности.While Azure AD can also implement single-factor authentication, enterprises usually require the higher security of multi-factor authentication. При многофакторной проверке подлинности пользователь, выполняющий проверку подлинности с помощью учетной записи Azure AD, имеет возможность отправки кода подтверждения в виде SMS-сообщения на мобильный телефон или в приложение проверки подлинности Azure на мобильном телефоне пользователя.In a multi-factor authentication configuration, a user authenticating with an Azure AD account has the option of having a verification code sent as an SMS message either to their mobile phone or the Azure Authenticator mobile app.

Кроме того, Azure AD можно использовать в качестве поставщика OAuth, предоставляющего стандартному пользователю механизм проверки подлинности и авторизации приложений в разных платформах.Additionally, Azure AD can be used as an OAuth provider, providing the standard user with an authentication and authorization mechanism to apps across various platforms. Для получения дополнительных сведений см. разделы Azure Active Directory и Многофакторная проверка подлинности в Azure.To learn more, see Azure Active Directory and Multi-Factor Authentication on Azure.

2.4 Windows Hello2.4 Windows Hello

В Windows 10 удобный механизм многофакторной проверки подлинности встроен в операционную систему.In Windows 10, a convenient multi-factor authentication mechanism is built into the operating system. Windows Hello — это новая система входа с помощью биометрических данных, встроенная в Windows 10.Windows Hello is the new biometric sign-in system built into Windows 10. Функция напрямую встроена в операционную систему, поэтому Windows Hello позволяет разблокировать пользовательские устройства с помощью идентификации лиц или отпечатков пальцев.Because it is built directly into the operating system, Windows Hello allows face or fingerprint identification to unlock users’ devices. Защищенное хранилище учетных данных Windows защищает биометрические данные на устройстве.The Windows secure credential store protects biometric data on the device.

В Windows Hello реализован надежный способ распознавания отдельного пользователя устройством. Так проходится первая половина пути между пользователем и запрошенной услугой или элементом данных.Windows Hello provides a robust way for a device to recognize an individual user, which addresses the first part of the path between a user and a requested service or data item. После того как пользователь распознан устройством, необходимо по-прежнему выполнить для него проверку подлинности, прежде чем предоставлять этому пользователю доступ к ресурсу.After the device has recognized the user, it still must authenticate the user before determining whether to grant access to a requested resource. Windows Hello также предоставляет надежную двухфакторную проверку подлинности (2FA), которая полностью интегрирована в Windows и заменяет повторно используемые пароли сочетанием конкретного устройства и биометрического жеста или PIN-кода.Windows Hello also provides strong two-factor authentication (2FA) that is fully integrated into Windows and replaces reusable passwords with the combination of a specific device, and a biometric gesture or PIN. PIN-код задается пользователем в рамках регистрации учетной записи Microsoft.The PIN is specified by the user as part of their Microsoft account enrollment.

Windows Hello — это не просто замена традиционных систем двухфакторной проверки подлинности.Windows Hello isn’t just a replacement for traditional 2FA systems, though. Эта система в принципе аналогична смарт-картам: проверка подлинности выполняется с использованием криптографических примитивов вместо сравнения строк, а материал ключа пользователя надежно хранится внутри устойчивого к взлому оборудования.It’s conceptually similar to smart cards: authentication is performed by using cryptographic primitives instead of string comparisons, and the user’s key material is secure inside tamper-resistant hardware. Microsoft Hello не требует и дополнительных компонентов инфраструктуры, как для использования смарт-карт.Microsoft Hello doesn't require the extra infrastructure components required for smart card deployment, either. В частности, вам не нужна инфраструктура открытых ключей (PKI) для управления сертификатами, если ее у вас нет.In particular, you don’t need a Public Key Infrastructure (PKI) to manage certificates, if you don’t currently have one. Windows Hello сочетает в себе основные достоинства технологии смарт-карт — гибкость в развертывании виртуальных смарт-карт и высокую безопасность физических, однако без присущих им недостатков.Windows Hello combines the major advantages of smart cards—deployment flexibility for virtual smart cards and robust security for physical smart cards—without any of their drawbacks.

Устройство должно быть зарегистрировано в службе Windows Hello, прежде чем пользователи смогут проходить проверку подлинности на нем.A device must be registered with Windows Hello before users can authenticate with it. Windows Hello использует ассиметричное (открытый и закрытый ключ) шифрование, при котором одна сторона использует открытый ключ для шифрования данных, которые другая сторона может расшифровать с помощью закрытого ключа.Windows Hello uses asymmetric (public/private key) encryption in which one party uses a public key to encrypt the data that the other party can decrypt using a private key. Windows Hello создает набор пар открытых и закрытых ключей и записывает закрытые ключи в микросхему доверенного платформенного модуля (TPM) устройства.In the case of Windows Hello, it creates a set of public/private key pairs and writes the private keys to the device’s Trusted Platform Module (TPM) chip. После регистрации устройства приложения UWP могут вызывать системные API для получения открытого ключа пользователя, который можно использовать для регистрации пользователя на сервере.After a device has been registered, UWP apps can call system APIs to retrieve the user’s public key, which can be used to register the user on the server.

Процесс регистрации приложения может выглядеть описанным ниже образом.The registration workflow of an app might look like the following:

регистрация windows hello

В собираемых вами сведениях о регистрации может содержаться значительно больше идентифицирующих данных, чем включено в этот простой сценарий.The registration information you collect may include a lot more identifying information than it does in this simple scenario. Например, если ваше приложение получает доступ к защищенной службе, в частности для банковских операций, вам необходимо будет запросить подтверждение личности и другие данные в контексте процесса регистрации.For example, if your app accesses a secured service such as one for banking, you’d need to request proof of identity and other things as part of the sign-up process. После выполнения всех условий, открытый ключ этого пользователя будет сохранен на внутреннем сервере и будет использоваться для проверки в следующий раз, когда пользователь будет использовать данную службу.Once all the conditions are met, the public key of this user will be stored in the back-end and used to validate the next time the user uses the service.

Дополнительные сведения о Windows Hello см. в разделе Руководство по Windows Hello и Руководство по Windows Hello для разработчиков.For more information on Windows Hello, see the Windows Hello guide and the Windows Hello developer guide.

3. Методы безопасности для данных в процессе передачи3 Data-in-flight security methods

Методы безопасности для данных в процессе передачи применяются к данным во время передачи между двумя устройствами, подключенными к сети.Data-in-flight security methods apply to data in transit between devices connected to a network. Данные могут передаваться между системами в среде с высоким уровнем безопасности закрытой корпоративной интрасети или между клиентом и веб-службой в небезопасной среде Интернета.The data may be transferred between systems on the high-security environment of a private corporate intranet, or between a client and web service in the non-secure environment of the web. Приложения для Windows 10 поддерживают такие стандарты, как протокол SSL с помощью своих сетевых API и работают с такими технологиями, как управление API службы Azure, с помощью которой разработчики могут обеспечить необходимый уровень безопасности для приложений.Windows 10 apps support standards such as SSL through their networking APIs, and work with technologies such as Azure API Management with which developers can ensure the appropriate level of security for their apps.

3.1 Проверка подлинности удаленной системой3.1 Remote system authentication

Существует два основных сценария, в которых происходит связь с удаленной компьютерной системой.There are two general scenarios where communication occurs with a remote computer system.

  • Локальный сервер выполняет проверку подлинности пользователя через прямое подключение.A local server authenticates a user over a direct connection. Например, если сервер и клиент находятся в одной корпоративной интрасети.For example, when the server and the client are on a corporate intranet.
  • Связь со службой происходит через Интернет.A web service is communicated with over the Internet.

Требования к безопасности для связи с веб-службой выше, чем требования для сценариев с прямой связью, так как данные больше не являются только частью безопасной сети, и вероятность перехвата данных злоумышленниками является более высокой.Security requirements for web service communication are higher than those in direct connection scenarios, as data is no longer only a part of a secure network and the likelihood of malicious attackers looking to intercept data is also higher. Поскольку доступ к службе будут получать разные типы устройств, они, скорее всего, будут созданы как службы RESTful, в противовес, например, WCF. Это означает, что проверка подлинности и авторизация службы также влечет за собой новые сложности.Because various types of devices will access the service, they will likely be built as RESTful services, as opposed to WCF, for instance, which means authentication and authorization to the service also introduces new challenges. Мы обсудим два требования для связи с защищенной удаленной службой.We’ll discuss two requirements for secure remote system communication.

Первым требованием является конфиденциальность сообщений: информация, передаваемая между клиентом и веб-службами (например, удостоверение пользователя и другие персональные данные) не должна быть доступна для чтения третьими лицами в процессе передачи.The first requirement is message confidentiality: The information passed between the client and the web services (for example, the identity of the user and other personal information) must not be readable by third parties while in transit. Обычно это делается путем шифрования подключения, через которое отправляются сообщения, и шифрованием самого сообщения.This is usually accomplished by encrypting the connection over which messages are sent and by encrypting the message itself. В шифровании с помощью пары из открытого и закрытого ключа открытый ключ доступен всем и используется для шифрования сообщений, которые должны быть отправлены определенному получателю.In private/public key encryption, the public key is available to anyone, and is used to encrypt messages to be sent to a specific receiver. Закрытый ключ содержится только у получателя и используется для расшифровки сообщения.The private key is only held by the receiver and is used to decrypt the message.

Вторым требованием является целостность сообщения: клиент и веб-служба должны иметь возможность убедиться в том, что сообщения, которые они получают, являются именно теми сообщениями, которые собиралась отправить другая сторона, и что данное сообщение не было изменено во время передачи.The second requirement is message integrity: The client and the web service must be able to verify that the messages they receive are the ones intended to be sent by the other party, and that the message has not been altered in transit. Это делается с помощью подписи сообщений цифровыми подписями и использования проверки подлинности сертификата.This is accomplished by signing messages with digital signatures and using certificate authentication.

3.2 Подключения SSL3.2 SSL connections

Для установки и поддержки безопасного подключения к клиентам веб-службы могут использовать протокол SSL, который поддерживается протоколом HTTPS.To establish and maintain secure connections to clients, web services can use Secure Sockets Layer (SSL), which is supported by the Secure Hypertext Transfer Protocol (HTTPS). Протокол SSL обеспечивает конфиденциальность и целостность сообщения с помощью поддержки шифрования открытого ключа, а также сертификатов сервера.SSL provides message confidentiality and integrity by supporting public key encryption as well as server certificates. SSL заменяется сертификатом TLS, но сертификат TLS часто случайно именуется сертификатом SSL.SSL is superseded by Transport Layer Security (TLS), but TLS is often casually referred to as SSL.

Когда клиент запрашивает доступ к ресурсу на сервере, протокол SSL запускает процесс согласования с сервером.When a client requests access to a resource on a server, SSL starts a negotiation process with the server. Это называется подтверждением сертификата SSL.This is called an SSL handshake. Уровень шифрования, набор из открытого и закрытого ключа и данные для проверки подлинности в сертификате сервера и сертификате клиента согласовываются в качестве основы всего взаимодействия на время SSL-подключения.An encryption level, a set of public and private encryption keys, and the identity information in the client and server certificates are agreed upon as the basis of all communication for the duration of the SSL connection. В это время сервер может также потребовать выполнить проверку подлинности клиента.The server may also require the client to be authenticated at this time. После установки подключения все сообщения шифруются с помощью согласованного открытого ключа до завершения подключения.Once the connection is established, all messages are encrypted with the negotiated public key until the connection closes.

3.2.1 Закрепление SSL3.2.1 SSL pinning

Несмотря на то, что протокол SSL может обеспечить конфиденциальность сообщений с помощью шифрования и сертификатов, он ничего не делает для того, чтобы убедиться в том, что сервер, с которым связывается клиент, является правильным сервером.While SSL can provide message confidentiality using encryption and certificates, it does nothing to verify that the server with which the client is communicating is the correct one. Поведение сервера может быть сымитировано несанкционированной третьей стороной, перехватывающей конфиденциальные данные, которые передает клиент.The server’s behavior can be mimicked by an unauthorized third-party, intercepting the sensitive data that the client transmits. Для предотвращения этого используется метод, называемый закрепление SSL,чтобы убедиться, что сертификат на сервере является сертификатом, который ожидает и которому доверяет клиент.To prevent this, a technique called SSL pinning is used to verify that the certificate on the server is the certificate that the client expects and trusts.

Существует несколько различных способов для реализации закрепления SSL в приложениях, каждый со своими достоинствами и недостатками.There are a few different ways to implement SSL pinning in apps, each with their own pros and cons. Самый простой подход — с помощью объявления сертификатов в манифесте пакета приложения.The easiest approach is via the Certificates declaration in the app’s package manifest. Данное объявление позволяет пакету приложения установить цифровые сертификаты и объявить эксклюзивные отношения доверия к ним.This declaration enables the app package to install digital certificates and specify exclusive trust in them. Это приводит к тому, что SSL-соединения разрешаются только между данным приложением и серверами, у которых есть соответствующие сертификаты в цепочке сертификатов.This results in SSL connections being allowed only between the app and servers that have the corresponding certificates in their certificate chain. Этот механизм также обеспечивает безопасное использование самозаверяющих сертификатов, так как для надежных открытых центров сертификации не требуется зависимость от третьего лица.This mechanism also enables the secure use of self-signed certificates, as no third party dependency is needed on trusted public certification authorities.

Манифест SSL

Чтобы лучше контролировать логику проверки, для проверки сертификатов, возвращенных сервером в ответ на запрос HTTPS, доступны API.For more control over the validation logic, APIs are available to validate the certificate(s) returned by the server in response to an HTTPS request. Учтите, что данный метод требует отправки и проверки ответа, поэтому убедитесь, что вы добавили это действие в качестве проверки до фактической отправки конфиденциальной информации в запросе.Note that this method requires sending a request and inspecting the response, so be sure to add this as a validation before actually sending sensitive information in a request.

Следующий код C# иллюстрирует этот способ закрепления SSL.The following C# code illustrates this method of SSL pinning. Метод ValidateSSLRoot использует класс HttpClient для выполнения HTTP-запроса.The ValidateSSLRoot method uses the HttpClient class to execute an HTTP request. Когда клиент отправляет ответ, он использует коллекцию RequestMessage.TransportInformation.ServerIntermediateCertificates, чтобы проверить сертификаты, возвращаемые сервером.After the client sends the response, it uses the RequestMessage.TransportInformation.ServerIntermediateCertificates collection to inspect the certificates returned by the server. Клиент может затем проверить всю цепочку сертификатов с отпечатками, которые он включил.The client can then validate the entire certificate chain with the thumbprints it has included. Этот метод требует, чтобы отпечатки сертификатов были обновлены в приложении после того, как срок действия сертификата сервера истечет и будет возобновлен.This method does require the certificate thumbprints to be updated in the app when the server certificate expires and is renewed.

private async Task ValidateSSLRoot()
{
    // Send a get request to Bing
    var httpClient = new HttpClient();
    var bingUri = new Uri("https://www.bing.com");
    HttpResponseMessage response = 
        await httpClient.GetAsync(bingUri);

    // Get the list of certificates that were used to
    // validate the server's identity
    IReadOnlyList<Certificate> serverCertificates = response.RequestMessage.TransportInformation.ServerIntermediateCertificates;
  
    // Perform validation
    if (!ValidateCertificates(serverCertificates))
    {
        // Close connection as chain is not valid
        return;
    }
    // Validation passed, continue with connection to service
}

private bool ValidateCertificates(IReadOnlyList<Certificate> certs)
{
    // In this example, we iterate through the certificates
    // and check that the chain contains
    // one specific certificate we are expecting
    foreach (var cert in certs)
    {
        byte[] thumbprint = cert.GetHashValue();

        // Check if the thumbprint matches whatever you 
        // are expecting
        var expected = new byte[] { 212, 222, 32, 208, 94, 102, 
            252, 83, 254, 26, 80, 136, 44, 120, 219, 40, 82, 202, 
            228, 116 };

        // ThumbprintMatches does the byte[] comparison 
        if (ThumbprintMatches(thumbprint, expected))
        {
            return true;
        }
    }
    return false;
}

3.3 Публикация и обеспечение безопасного доступа к API REST3.3 Publishing and securing access to REST APIs

Чтобы обеспечить санкционированный доступ к веб-службам, последние должны требовать проверку подлинности при каждом вызове API.To ensure authorized access to web services, they must require authentication every time an API call is made. Возможность контролировать производительность и выполнять масштабирование также являются важными аспектами при достуности веб-служб в Интернете.Being able to control performance and scale is also something to consider when web services are exposed across the web. Управление API Azure – это служба, которая может помочь сделать API доступными в Интернете, предоставляя функции на трех уровнях.Azure API Management is a service that can help expose APIs across the web, while providing features on three levels.

Издатели/администраторы API могут легко настроить API с помощью портала издателя службы управления API Azure.Publishers/Administrators of the API can easily configure the API through the Publisher Portal of Azure API Management. Здесь можно создать наборы API и управлять доступом к ним, чтобы управлять доступом к конкретным API.Here, API sets can be created and access to them can be managed to control who has access to which APIs.

Разработчики, желающие получить доступ к этим API, могут отправить соответствующие запросы посредством портала разработчиков. Он может либо сразу предоставить доступ, либо потребовать утверждения издателя или администратора.Developers wanting access to these APIs can make requests through the Developer Portal, which can either immediately provide access or require approval by the publisher/administrator. Разработчики могут также просмотреть документацию API и пример кода на портале разработчиков, чтобы быстро принять API, предложенные веб-службой.Developers can also view the API documentation and sample code in the Developer Portal, to rapidly adopt the APIs offered by the web service.

Приложения, создаваемые этими разработчиками, получают доступ к API посредством прокси-сервера, предложенного службой управления API Azure.The apps that these developers create then access the API through the proxy offered by Azure API Management. Прокси-сервер предоставляет слой неясности, скрывая фактическую конечную точку API на сервере издателя или администратора. Он также может содержать дополнительную логику, например, перевод API, чтобы обеспечить согласованность отображаемого API, когда вызов одного API перенаправляется на другой.The proxy both provides a layer of obscurity, hiding the actual end-point of the API on the publisher/administrator’s server and can also include additional logic like API translation to ensure the exposed API is kept consistent when a call to one API is redirected to another. Они также могут использовать фильтрацию IP, чтобы блокировать вызовы API, происходящие из указанного домена IP или набора доменов.It can also use IP filtering to block API calls originating from a specific IP domain or set of domains. Служба управления API Azure также поддерживает безопасность своих веб-служб, используя набор открытых ключей, называемых ключи API, для проверки подлинности и обеспечения авторизации каждого вызова API.Azure API Management also keeps its web services secure by using a set of public keys, called API keys, to authenticate and authorize each API call. Если авторизация не удалась, доступ к API и функциям, которые они поддерживают, будет заблокирован.When authorization fails, access to the API and the functionality it supports is blocked.

Служба управления API Azure может также уменьшить число вызовов API в службу (процедура, называемая регулированием) для оптимизации производительности веб-службы.Azure API Management can also reduce the number of API calls to a service (a procedure called throttling) to optimizes the performance of the web service. Чтобы узнать больше, просмотрите разделы Управление API Azure и Управление API Azure на AzureCon 2015.To learn more, review Azure API Management and Azure API Management at AzureCon 2015.

4. Методы безопасности для данных в состоянии покоя4 Data-at-rest security methods

После того, как данные поступают на устройство, они называются "данными в состоянии покоя".When data arrives on a device, we refer to it as "data-at-rest." Эти данные необходимо хранить на устройстве в безопасном месте, чтобы несанкционированные пользователи или приложения не могли получить к ним доступ.This data needs to be stored on the device in a secure manner, so that it cannot be accessed by unauthorized users or apps. Модель приложений в Windows 10 много делает для обеспечения того, чтобы данные, сохраняемые каким-либо приложением, были доступны только этому приложению, одновременно создавая условия для того, чтобы API давали доступ к этим данным в случае необходимости.The app model in Windows 10 does a lot to ensure that the data stored by any app is only accessible to that app, while providing APIs to share the data when necessary. Также доступны дополнительные API, которые гарантируют, что данные могут быть зашифрованы, а учетные данные могут храниться в безопасности.Additional APIs are also available to ensure that data can be encrypted and credentials can be stored safely.

4.1 Модель приложения для Windows4.1 Windows app model

Традиционно, у Windows никогда не было определения для приложения.Traditionally, Windows has never had a definition of an app. Наиболее часто так называли исполняемый файл (.exe), но в определение никогда не входили установка, сохранение состояния, длина выполнения, управление версиями, интеграция операционной системы или взаимодействие между приложениями.It was most commonly referred to as an executable (.exe), and this never included installation, storage of state, execution length, versioning, OS integration, or app-to-app communication. Модель универсальной платформы Windows определяет модель приложения, в которую входят установка, среда выполнения, управление ресурсами, обновления, модель данных и удаление.The Universal Windows Platform model defines an app model that covers installation, runtime environment, resource management, updates, data model, and uninstallation.

Приложения Windows 10 запускаются в контейнере. Это означает, что у них ограниченные права по умолчанию (пользователь может запросить и получить дополнительные права).Windows 10 apps run in a container, which means that they have limited privileges by default (additional privileges can be requested and granted by the user). Например, если приложению нужно получить доступ к файлам в системе, то должно использоваться средство выбора файлов из пространства имен Windows.Storage.Pickers, чтобы разрешить пользователю выбрать файл (прямой доступ к файлам невозможен).For example, if an app wants to access files on the system, a file picker from the Windows.Storage.Pickers namespace has to be used to let the user pick a file (no direct access to files is enabled). Другой пример: если приложению необходимо получить доступ к данным о местоположении пользователя, ему следует объявить возможность определения местоположения устройства, предложив пользователю в момент скачивания, чтобы это приложение запрашивало доступ к данным о местоположении пользователя.Another example is if an app wants to access the user’s location data, it needs to enable the location device capability needs to be declared, prompting the user at download time that this app will request access to the user’s location. Кроме этого, когда приложению необходимо получить доступ к данным о местоположении пользователя в первый раз, пользователю отобразится дополнительный запрос на продолжение с запросом на разрешение на доступ к данным.On top of that, the first time the app wants to access the user’s location, an additional consent prompt is shown to the user, requesting permission to access the data.

Обратите внимание, что данная модель приложений играет роль "тюрьмы" для приложений. Это означает, что к ним нельзя получить внешний доступ, но это не "замок", доступ к которому нельзя получить снаружи (приложения с правами администратора могут по-прежнему получать доступ изнутри).Note that this app model acts as a "jail" for apps, meaning that they can’t reach out, but it is not a “castle” that cannot be reached from the outside (applications with administrator privileges can of course still reach in). Device Guard в Windows 10, который позволяет огранизациям и ИТ-отделам определить, какие приложения (Win32) можно выполнять, может в дальнейшем помочь ограничить доступ.Device Guard in Windows 10, which enables organizations/IT to specify which (Win32) apps are allowed to execute, can further help limit this access.

Модель приложений также управляет жизненным циклом приложения.The app model also manages the app lifecycle. Она, например, ограничивает фоновое выполнение приложений по умолчанию. Когда приложение переходит в фоновый режим, процесс приостанавливается (после предоставления приложению небольшого количества времени для устранения приостановки работы приложения в коде), а его память фиксируется.It limits the background execution of apps by default, for example; as soon as an app goes into the background, the process is suspended – after giving the app a brief period to address app suspension in code – and its memory is frozen. Операционная система предоставляет механизмы для приложений, чтобы запрашивать выполнение конкретной фоновой задачи (запланированной, инициированной различными событиями, например подключением к Интернету или Bluetooth, изменениями режима питания и пр., в определенных сценариях, в частности при воспроизведении музыки или отслеживании по GPS).The operating system does provide mechanisms for apps to ask for specific background task execution (on a schedule, triggered by various events such as Internet/Bluetooth connectivity, power changes, etc., and in specific scenarios such as music playing or GPS tracking).

Если ресурсов памяти устройства становится недостаточно, Windows высвобождает пространство памяти, закрывая приложения.When memory resources on the device are running low, Windows frees memory space by terminating apps. Эта модель жизненного цикла заставляет приложения сохранять данные, когда они приостановлены, поскольку у него нет доступного дополнительного времени между приостановкой и завершением.This lifecycle model forces apps to persist data whenever they’re suspended, because there is no additional time available between suspension and termination.

Подробнее см. в разделе Универсальность: понимание жизненного цикла приложения для Windows 10.For more information, see It's Universal: Understanding the Lifecycle of a Windows 10 Application.

4.2 Защита сохраненных учетных данных4.2 Stored credential protection

Приложения для Windows, которые получают доступ к прошедшим проверку подлинности службам, нередко предоставляют пользователям возможность сохранять учетные данные на локальном устройстве.Windows apps that access authenticated services often provide the users the option of storing their credentials on the local device. Это удобно для пользователей. После того, как они введут имя пользователя и пароль, приложение автоматически использует их при последующих запусках данного приложения.This is a convenience for the users; when they provide their username and password, the app automatically uses them in subsequent launches of the app. Так как это может стать проблемой безопасности, если злоумышленник получит доступ к этим хранящимся данным, Windows 10 предоставляет приложениям Windows возможность сохранять учетные данные пользователя в защищенном хранилище учетных данных.Because this can be a security issue if an attacker gains access to this stored data, Windows 10 provides the ability for Windows apps to store user credentials in a secure credential locker. Приложение вызывает API хранилища учетных данных для хранения и извлечения учетных данных из хранилища, а не сохраняет их в контейнере хранилища приложения.The app calls the Credential Locker API to store and retrieve the credentials from the locker instead of storing them in the app’s storage container. Хранилище учетных данных управляется операционной системой, но такой доступ ограничен до приложения, которое хранит их, тем самым предоставляя безопасно управляемое решение для хранения учетных данных.The credential locker is managed by the operating system, but access is limited to the app that stores them, providing a securely managed solution for credential storage.

Когда пользователь предоставляет учетные данные для хранения, приложение получает ссылку на хранилище учетных данных с помощью объекта PasswordVault в пространстве имен Windows.Security.Credentials.When a user supplies the credentials to be stored, the app gets a reference to the credential locker using the PasswordVault object in the Windows.Security.Credentials namespace. Затем он создает объект PasswordCredential, содержащий идентификатор для приложения Windows, имя пользователя и пароль.It then creates a PasswordCredential object containing an identifier for the Windows app and the username and password. Это передается методу PasswordVault.Add для хранения учетных данных в хранилище.This is passed to the PasswordVault.Add method to store the credentials in the locker. Это показано в следующем примере кода C#.The following C# code example shows how this is done.

var vault = new PasswordVault();
vault.Add(new PasswordCredential("My App", username, password));

В следующем примере кода C# приложение запрашивает все учетные данные, соответствующие приложению, вызвав метод FindAllByResource объекта PasswordVault.In the following C# code example, the app requests all of the credentials corresponding to the app by calling the FindAllByResource method of the PasswordVault object. Если возвращается несколько результатов, он предлагает пользователю ввести имя пользователя.If more than one is returned, it prompts the user to enter their username. Если учетные данные не находятся в хранилище, приложение дает пользователю возможность их выбрать.If the credentials are not in the locker, the app prompts the user for them. После этого пользователь заходит на сервер с помощью учетных данных.The user is then logged into the server using the credentials.

private string resourceName = "My App";
private string defaultUserName;

private void Login()
{
    PasswordCredential loginCredential = GetCredentialFromLocker();

    if (loginCredential != null)
    {
        // There is a credential stored in the locker.
        // Populate the Password property of the credential
        // for automatic login.
        loginCredential.RetrievePassword();
    }
    else
    {
        // There is no credential stored in the locker.
        // Display UI to get user credentials.
        loginCredential = GetLoginCredentialUI();
    }
    // Log the user in.
    ServerLogin(loginCredential.UserName, loginCredential.Password);
}

private PasswordCredential GetCredentialFromLocker()
{
    PasswordCredential credential = null;

    var vault = new PasswordVault();
    var credentialList = vault.FindAllByResource(resourceName);

    if (credentialList.Count == 1)
    {
        credential = credentialList[0];
    }
    else if (credentialList.Count > 0)
    {
        // When there are multiple usernames,
        // retrieve the default username. If one doesn't
        // exist, then display UI to have the user select
        // a default username.
        defaultUserName = GetDefaultUserNameUI();

        credential = vault.Retrieve(resourceName, defaultUserName);
    }
    return credential;
}

Подробнее см. в разделе Хранилище учетных данных.For more information, see Credential locker.

4.3 Защита сохраненных данных4.3 Stored data protection

При работе с сохраненными данными, обычно называемыми данными в состоянии покоя, их шифрование может предотвратить доступ к сохраненным данным неавторизованным пользователем.When you are dealing with stored data, commonly referred to as data-at-rest, encrypting it can prevent unauthorized users from accessing the stored data. Два стандартных механизма для шифрования данных используют симметричные ключи или асимметричные ключи.The two common mechanisms to encrypt data are using either symmetric keys or using asymmetric keys. Однако шифрование данных не может обеспечить то, что данные никто не изменил между временем отправки и временем, которое они хранились.However, data encryption can’t ensure that the data is unaltered between the time it was sent and the time it was stored. Другими словами, целостность данных невозможно обеспечить.In other words, the data integrity cannot be ensured. Использование кодов проверки подлинности сообщений, хэшей и цифровые подписи являются стандартными техниками решения этой проблемы.Using message authentication codes, hashes, and digital signing are common techniques to solve this problem.

4.3.1 Шифрование данных4.3.1 Data encryption

В процессе симметричного шифрования и отправитель и получатель имеют один и тот же ключ и используют его для шифрования и расшифровки данных.With symmetric encryption, both the sender and recipient have the same key and use it to both encrypt and decrypt the data. Сложность этого подхода заключается обычно в безопасности общего доступа к ключу, чтобы обе стороны знали его.The challenge with this approach is securely sharing the key so both parties are aware of it.

Единственным ответом на это является асимметричное шифрование, при котором используется пара открытых и закрытых ключей.One answer to this is asymmetric encryption, in which a public/private key pair is used. Открытый ключ свободно раздается любому, кто желает зашифровать сообщение.The public key is shared freely with anyone who wants to encrypt a message. Закрытый ключ всегда хранится в секрете, чтобы только вы могли его использовать для расшифровки данных.The private key is always kept secret so that only you can use it to decrypt the data. Распространенной технологией, позволяющей обнаруживать открытый ключ, является использование цифровых сертификатов, также называемых просто сертификаты.A common technique to allow for discovery of the public key is by using digital certificates, also simply referred to as certificates. Сертификат содержит сведения об открытом ключе в дополнение к сведениям о пользователе или сервере (например, имени, издателе, адресе электронной почты и стране).The certificate holds information about the public key, in addition to information about the user or server such as the name, issuer, email address and country.

Для реализации симметричного и ассиметричного шифрования в приложениях UWP разработчики приложений для Windows могут использовать классы SymmetricKeyAlgorithmProvider и AsymmetricKeyAlgorithmProvider.Windows app developers can use the SymmetricKeyAlgorithmProvider and AsymmetricKeyAlgorithmProvider classes to implement symmetric and asymmetric encryption in their UWP apps. Кроме того, класс CryptographicEngine можно использовать для шифрования и расшифровки данных, подписи содержимого и проверки цифровых подписей.Additionally, the CryptographicEngine class can be used to encrypt and decrypt data, sign content and verify digital signatures. Приложения также могут использовать класс DataProtectionProvider в пространстве имен Windows.Security.Cryptography.DataProtection для шифрования и расшифровки данных, хранящихся локально.Apps can also use the DataProtectionProvider class in the Windows.Security.Cryptography.DataProtection namespace to encrypt and decrypt stored local data.

4.3.2 Выявление несанкционированных изменений сообщений (коды проверки подлинности сообщения (MAC), хэши и подписи)4.3.2 Detecting message tampering (MACs, hashes, and signatures)

MAC — это код (или тег), получаемый в результате использования симметричного ключа (называемого секретным ключом) или сообщения в качестве входных данных в алгоритм шифрования MAC.A MAC is a code (or tag) that results from using a symmetric key (called the secret key) or a message as input to a MAC encryption algorithm. Секретный ключ и алгоритм согласовываются отправителем и получателем до передачи сообщения.The secret key and the algorithm are agreed upon by the sender and receiver before the message transfer.

MAC-коды позволяют проверить сообщения описанным ниже способом.MACs verify messages like this.

  • Отправитель получает тег MAC, используя секретный ключ в качестве входных данных для алгоритма MAC.The sender derives the MAC tag by using the secret key as input to the MAC algorithm.
  • Отправитель отправляет тег MAC и сообщение получателю.The sender sends the MAC tag and the message to the receiver.
  • Получатель наследует тег MAC с помощью секретного ключа и сообщения в качестве входных данных в алгоритм MAC.The receiver derives the MAC tag by using the secret key and the message as inputs to the MAC algorithm.
  • Получатель сравнивает свой тег MAC с тегом MAC отправителя.The receiver compares their MAC tag with the sender's MAC tag. Если они одинаковы, то мы знаем, что сообщение не было несанкционированно изменено.If they are the same then we know that the message has not been tampered with.

Подтверждение MAC

Приложения Windows могут реализовывать проверку сообщений с помощью MAC, вызывая класс MacAlgorithmProvider для создания ключа и класс CryptographicEngine для выполнения алгоритма шифрования MAC.Windows apps can implement MAC message verification by calling the MacAlgorithmProvider class to generate the key and CryptographicEngine class to perform the MAC encryption algorithm.

4.3.3 Использование хэшей4.3.3 Using hashes

Функция хэширования — это криптографический алгоритм, который преобразовывает блок данных произвольной длины в двоичную строку фиксированной длины, называемую значением хэша.A hash function is a cryptographic algorithm that takes an arbitrarily long block of data and returns a fixed-size bit string called a hash value. Существует целое семейство хэш-функций, которые могут выполнить это.There is an entire family of hash functions that can do this.

Значение хэша можно использовать вместо кода MAC в сценарии передачи сообщений, описанном выше.A hash value can be used in place of a MAC in the message-transfer scenario above. Отправитель отправляет значение хэша и сообщение, а получатель наследует собственное значение хэша из значения хэша и сообщения отправителя и сравнивает оба значения хэша.The sender sends a hash value and a message, and the receiver derives their own hash value from the sender's hash value and message and compares the two hash values. Приложения, работающие в Windows 10, могут вызывать класс HashAlgorithmProvider для перечисления доступных алгоритмов хэширования и выполнения одного из них.Apps running on Windows 10 can call the HashAlgorithmProvider class to enumerate the hash algorithms that are available and run one of them. Класс CryptographicHash представляет собой значение хэша.The CryptographicHash class represents the hash value. Метод CryptographicHash.GetValueAndReset можно использовать для повторного хэширования различных данных без необходимости заново создавать объект для каждого случая применения.The CryptographicHash.GetValueAndReset method can be used to repeatedly hash different data without having to re-create the object for each use. Метод Append класса CryptographicHash добавляет новые данные в буфер для хэширования.The Append method of the CryptographicHash class adds new data to a buffer to be hashed. Этот процесс полностью показан в следующем примере кода на C#.This entire process is shown in the following C# code example.

public void SampleReusableHash()
{
    // Create a string that contains the name of the
    // hashing algorithm to use.
    string strAlgName = HashAlgorithmNames.Sha512;

    // Create a HashAlgorithmProvider object.
    HashAlgorithmProvider objAlgProv = HashAlgorithmProvider.OpenAlgorithm(strAlgName);

    // Create a CryptographicHash object. This object can be reused to continually
    // hash new messages.
    CryptographicHash objHash = objAlgProv.CreateHash();

    // Hash message 1.
    string strMsg1 = "This is message 1";
    IBuffer buffMsg1 = CryptographicBuffer.ConvertStringToBinary(strMsg1, BinaryStringEncoding.Utf16BE);
    objHash.Append(buffMsg1);
    IBuffer buffHash1 = objHash.GetValueAndReset();

    // Hash message 2.
    string strMsg2 = "This is message 2";
    IBuffer buffMsg2 = CryptographicBuffer.ConvertStringToBinary(strMsg2, BinaryStringEncoding.Utf16BE);
    objHash.Append(buffMsg2);
    IBuffer buffHash2 = objHash.GetValueAndReset();

    // Convert the hashes to string values (for display);
    string strHash1 = CryptographicBuffer.EncodeToBase64String(buffHash1);
    string strHash2 = CryptographicBuffer.EncodeToBase64String(buffHash2);
}

4.3.4 Цифровые подписи4.3.4 Digital signatures

Целостность данных сохраненного сообщения, подписанного цифровой подписью, проверяется способом, подобным проверке подлинности с помощью кода MAC.The data integrity of a digitally signed stored message is verified in a similar way to MAC authentication. Ниже описан процесс работы цифровой подписи.Here is the way the digital signature workflow operates.

  • Отправитель наследует значение хэша (также называемое дайджестом) с помощью сообщения в качестве входных данных для алгоритма хэширования.The sender derives a hash value (also known as a digest) by using the message as the input to a hash algorithm.
  • Отправитель шифрует дайджест с помощью закрытого ключа.The sender encrypts the digest using their private key.
  • Отправитель отправляет сообщение, зашифрованный дайджест и имя алгоритма хэширования, который использовался.The sender sends the message, the encrypted digest, and the name of the hash algorithm that was used.
  • Получатель использует открытый ключ, чтобы расшифровать зашифрованный дайджест, который он получит.The receiver uses the public key to decrypt the encrypted digest it received. Затем он использует алгоритм хэширования для хэширования сообщения, чтобы создать собственный дайджест.It then uses the hash algorithm to hash the message to create a digest of its own. После этого получатель сравнивает эти два дайджеста (первый — полученный и расшифрованный, второй — созданный им).And finally the receiver compares the two digests (the one it received and decrypted, and the one it made). Только если эти два дайджеста совпадают, получатель может быть уверен, что сообщение было отправлено владельцем закрытого ключа, следовательно он является тем, кем представляется, и сообщение не было изменено в процессе передачи.Only if the two match can the receiver be sure that the message was sent by the possessor of the private key, and therefore they are who they say they are, and that the message was not altered in transit.

Цифровые подписи

Алгоритмы хэширования очень быстрые, поэтому значение хэша можно быстро получить даже из больших сообщений.Hashing algorithms are very fast, so hash values can be derived quickly from even large messages. Полученное значение хэша имеет произвольную длину и может быть короче полного сообщения, поэтому использование открытого и закрытого ключей для шифрования и расшифровки только дайджеста, а не всего сообщения является оптимизацией.The resulting hash value is an arbitrary length and can be shorter than the full message, so using public and private keys to encrypt and decrypt only the digest rather than the full message is an optimization.

Подробнее см. в статьях Цифровые подписи, Коды проверки подлинности сообщений, хэши и подписи и Шифрование.For more information, take a look articles on Digital signatures, MACs, hashes, and signatures, and Cryptography.

5. Резюме5 Summary

Универсальная платформа Windows в Windows 10 предоставляет множество способов воспользоваться возможностями операционной системы для создания более безопасных приложений.The Universal Windows Platform in Windows 10 offers a number of ways to leverage operating system capabilities to create more secure apps. В различных сценариях проверки подлинности, например, однофакторной, многофакторной или посреднической с помощью поставщика удостоверений OAuth, API существуют для решения наиболее сложных проблем с проверкой подлинности.In different authentication scenarios, such as single-factor, multi-factor, or brokered authentication with an OAuth identity provider, APIs exist to mitigate the most common challenges with authentication. Windows Hello предоставляет новую биометрическую систему входа, которая распознает пользователя и активно предотвращает попытки обойти надлежащую идентификацию.Windows Hello provides a new biometric sign-in system that recognizes the user and actively defeats efforts to circumvent proper identification. Она также предоставляет несколько уровней ключей и сертификатов, которые ни при каких обстоятельствах не могут быть раскрыты или использованы за пределами доверенного платформенного модуля.It also delivers multiple layers of keys and certificates that can never be revealed or used outside the trusted platform module. Кроме того, дальнейший уровень безопасности обеспечивается с помощью дополнительного использования ключей удостоверения подлинности и сертификатов.Plus, a further layer of security is available through the optional use of attestation identity keys and certificates.

Чтобы обеспечить безопасность данных в процессе передачи, API помогают установить безопасную связь с удаленными системами через SSL, одновременно предоставляя возможность проверить подлинность сервера с помощью закрепления SSL.To secure data in flight, APIs exist to communicate with remote systems securely over SSL, while providing the possibility to validate the server’s authenticity with SSL pinning. Управление API Azure помогает в безопасной и контролируемой публикации API, предоставляя мощные варианты конфигурации для отображения API в Интернете с помощью прокси-сервера, который дополнительно скрывает конечную точку API.Publishing APIs securely and in a controlled manner is something in which Azure API Management aids by providing powerful configuration options for exposing APIs across the web using a proxy that provides additional obfuscation of the API endpoint. Доступ к этим API защищается с помощью ключей API, а для контроля производительности можно отрегулировать вызовы API.Access to these APIs is secured by using API keys and API calls can be throttled to control performance.

Когда данные поступают на устройство, модель приложений Windows обеспечивает больше контроля за установкой, обновлением и доступом к данным, блокируя несанционированный доступ к данным других приложений.When the data arrives on the device, the Windows app model provides more control over how the app is installed, updated and accesses it data, while keeping it from accessing data of other apps in an unauthorized manner. Хранилище учетных данных может обеспечивать безопасное хранение учетных данных пользователя под управлением операционной системы, а остальные данные можно защитить на устройстве с помощью шифрования и хэширования API, предлагаемых универсальной платформой Windows.Credential locker can provide secure storage of user credentials that is managed by the operating system and other data can be protected on the device by using the encryption and hashing APIs offered by the Universal Windows Platform.

6. Ресурсы6 Resources

6.1. Практические руководства6.1 How-to articles

6.2. Примеры кода6.2 Code samples

6.3. Справочник по API6.3 API reference