Présentation du développement d’applications Windows sécuriséesIntro to secure Windows app development

Cet article introductif aide les architectes et développeurs d’applications à se familiariser avec les diverses fonctionnalités de plateforme Windows 10 qui accélèrent la création d’applications de plateforme Windows universelle (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. Il explique en détail comment utiliser les fonctionnalités de sécurité Windows disponibles à chacune des phases suivantes : authentification, données en transit et données au repos.It details how to use the Windows security features available at each of the following stages: authentication, data-in-flight, and data-at-rest. Vous pourrez accéder à des informations plus détaillées sur les différents sujets en consultant les ressources supplémentaires mentionnées dans chaque chapitre.You can find more in-depth information on each topic by reviewing the additional resources included in each chapter.

1 Introduction1 Introduction

Le développement d’une application sécurisée peut relever du défi.Developing a secure app can be a challenge. Au rythme où évoluent les applications d’entreprise mobiles, sociales, cloud et complexes d’aujourd’hui, les clients exigent que les applications soient disponibles et mises à jour en un temps record.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. Ils utilisent également de nombreux types d’appareils, rendant ainsi le processus de création d’applications encore plus complexe.They also use many types of devices, further adding to the complexity of creating app experiences. Si vous développez pour la plateforme Windows universelle (UWP) Windows 10, vos applications doivent pouvoir s’exécuter sur l’éventail traditionnel d’ordinateurs de bureau, ordinateurs portables, tablettes et appareils mobiles, ainsi que sur un nombre croissant de nouveaux appareils englobant l’Internet des objets, Xbox One, Microsoft Surface Hub et 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. En tant que développeur, vous devez vous assurer que vos applications communiquent et stockent les données de manière sécurisée, sur l’ensemble des plateformes ou des appareils utilisés.As the developer, you must ensure your apps communicate and store data securely, across all the platforms or devices involved.

Voici quelques-uns des avantages que vous procurent les fonctionnalités de sécurité de Windows 10.Here are some of the benefits of utilizing Windows 10 security features.

  • Vous bénéficiez d’une sécurité standardisée sur tous les appareils qui prennent en charge Windows 10, grâce à l’utilisation d’API cohérentes relatives aux composants et technologies de sécurité.You will have standardized security across all devices that support Windows 10, by using consistent APIs for security components and technologies.
  • Vous écrivez, testez et gérez moins de code que si vous implémentiez du code personnalisé pour prendre en compte ces scénarios de sécurité.You write, test, and maintain less code than you would if you implemented custom code to cover these security scenarios.
  • Vos applications se révèlent plus stables et sécurisées, car vous utilisez le système d’exploitation pour contrôler la façon dont l’application accède à ses ressources, ainsi qu’aux ressources système locales ou distantes.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.

Au cours de l’authentification, l’identité d’un utilisateur demandant l’accès à un service spécifique est validée.During authentication, the identity of a user requesting access to a particular service is validated. Windows Hello est le composant de Windows 10 qui permet de créer un mécanisme d’authentification plus sécurisé dans les applications Windows.Windows Hello is the component in Windows 10 that helps create a more secure authentication mechanism in Windows apps. Avec elle, vous pouvez utiliser un code confidentiel ou une biométrie telle que les empreintes digitales de l’utilisateur, le visage ou l’iris pour implémenter l’authentification multifacteur pour vos applications.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.

Les données en transit font référence à la connexion et aux messages transférés pendant cette dernière.Data-in-flight refers to the connection and the messages transferred across it. La récupération de données à partir d’un serveur distant au moyen de services web en constituent un exemple.An example of this is retrieving data from a remote server using web services. L’utilisation des protocoles SSL (Secure Sockets Layer) et S-HTTP (Secure Hypertext Transfer Protocol) garantit la sécurité de la connexion.The use of Secure Sockets Layer (SSL) and Secure Hypertext Transfer Protocol (HTTPS) ensures the security of the connection. La capacité à empêcher des tiers d’accéder à ces messages ou des applications non autorisées de communiquer avec les services web constitue un aspect primordial de la sécurisation des données en transit.Preventing intermediary parties from accessing these messages, or unauthorized apps from communicating with the web services, is key to securing data in flight.

Enfin, les données au repos désignent les données qui résident en mémoire ou sur les médias de stockage.Lastly, data-at-rest relates to data residing in memory or on storage media. Windows 10 intègre un modèle d’application qui empêche les accès non autorisés aux données entre applications et fournit des API de chiffrement pour sécuriser davantage les données sur l’appareil.Windows 10 has an app model that prevents unauthorized data access between apps, and offers encryption APIs to further secure data on the device. La fonctionnalité Stockage sécurisé des informations d’identification permet de stocker les informations d’identification de l’utilisateur sur l’appareil en toute sécurité, le système d’exploitation empêchant les autres applications d’y accéder.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 Facteurs d’authentification2 Authentication Factors

Pour protéger les données, le système doit identifier la personne qui demande l’accès aux ressources de données et doit autoriser cet accès.To protect data, the person requesting access to it must be identified and authorized to access the data resources they request. Le processus d’identification d’un utilisateur est appelé authentification, et la détermination des privilèges d’accès vis-à-vis d’une ressource est désigné sous le terme d’autorisation.The process of identifying a user is called authentication, and determining access privileges to a resource is called authorization. Ces deux opérations sont étroitement liées et peuvent se révéler impossibles à distinguer par l’utilisateur.These are closely related operations, and to the user they might be indistinguishable. Le degré de complexité de ces opérations dépend de nombreux facteurs et varie, par exemple, selon que les données résident sur un seul serveur ou sont réparties entre plusieurs systèmes.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. Le serveur fournissant les services d’authentification et d’autorisation est désigné sous le terme de fournisseur d’identité.The server providing the authentication and authorization services is referred to as the identity provider.

Pour s’authentifier auprès d’un service et/ou d’une application spécifiques, l’utilisateur a recours à des informations d’identification composées d’éléments qu’il connaît, dont il dispose et/ou qui le caractérisent.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. Chacun de ces éléments constitue un facteur d’authentification.Each of these are called authentication factors.

  • Quelque chose que l’utilisateur connaît prend généralement la forme d’un mot de passe, mais peut également correspondre à un PIN ou à une question secrète et à sa réponse.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.
  • Quelque chose dont dispose l’utilisateur constitue le plus souvent un appareil de mémoire matériel comme une clé USB contenant les données d’authentification propres à l’utilisateur.Something the user has is most often a hardware memory device such as a USB stick containing the authentication data unique to the user.
  • Quelque chose qui caractérise l’utilisateur correspond fréquemment aux empreintes digitales de l’utilisateur, mais les caractéristiques vocales, faciales ou oculaires ou les modèles comportementaux de l’utilisateur sont de nouveaux facteurs dont l’emploi se généralise.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. Ces mesures stockées sous forme de données sont appelées biométrie.When stored as data, these measurements are called biometrics.

Un mot de passe créé par l’utilisateur est un facteur d’authentification en soi, mais se révèle généralement insuffisant ; en effet, toute personne connaissant ce mot de passe peut emprunter l’identité de son propriétaire légitime.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. Une carte à puce peut offrir un niveau de sécurité supérieur, mais risque d’être volée, perdue ou rangée au mauvais endroit.A smart card can provide a higher level of security, but it might be stolen, lost, or misplaced. Enfin, un système capable d’authentifier un utilisateur par ses empreintes digitales ou par une analyse oculaire peut garantir le niveau de sécurité le plus élevé et le plus commode, mais nécessite un matériel onéreux et spécialisé (tel qu’une caméra Intel RealSense pour la reconnaissance faciale) non accessible à tous.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.

La conception de la méthode d’authentification utilisée par un système constitue donc un aspect complexe et important de la sécurité des données.Designing the method of authentication used by a system is a complex and important aspect of data security. En règle générale, plus vous utilisez de facteurs d’authentification, plus le système est sécurisé.In general, the greater number of factors you use in authentication, the more secure the system is. Toutefois, le processus d’authentification doit rester simple.At the same time, authentication must be usable. Étant donné qu’un utilisateur se connecte généralement plusieurs fois par jour, il a besoin de pouvoir effectuer cette opération rapidement.A user will usually log in many times a day, so the process must be fast. Le type d’authentification que vous choisissez doit représenter un bon compromis entre la sécurité et la facilité d’utilisation ; l’authentification à un seul facteur se révèle la moins sécurisée mais la plus simple d’emploi, tandis que l’authentification multifacteur devient de plus en plus sûre mais aussi plus complexe à mesure que le nombre de facteurs utilisés augmente.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 Authentification à un seul facteur2.1 Single-factor authentication

Ce type d’authentification repose sur une seule information d’identification d’utilisateur.This form of authentication is based on a single user credential. Il s’agit généralement d’un mot de passe, mais cette information peut également prendre la forme d’un code confidentiel.This is usually a password, but it could also be a personal identification number (PIN).

Le processus d’authentification à un seul facteur est décrit ci-après.Here’s the process of single-factor authentication.

  • L’utilisateur indique son nom d’utilisateur et son mot de passe au fournisseur d’identité.The user provides their username and password to the identity provider. Le fournisseur d’identité est le processus serveur qui vérifie l’identité de l’utilisateur.The identity provider is the server process that verifies the identity of the user.
  • Le fournisseur d’identité vérifie si le nom d’utilisateur et le mot de passe sont identiques à ceux stockés dans le système.The identity provider checks whether the username and password are the same as those stored in the system. Dans la plupart des cas, le mot de passe est chiffré et offre ainsi une sécurité supplémentaire en empêchant les autres utilisateurs de le lire.In most cases, the password will be encrypted, providing additional security so that others cannot read it.
  • Le fournisseur d’identité renvoie un état d’authentification précisant si l’authentification a réussi.The identity provider returns an authentication status that indicates whether the authentication was successful.
  • En cas de succès, l’échange de données commence.If successful, data exchange begins. En cas d’échec, l’utilisateur doit s’authentifier de nouveau.If unsuccessful, the user must be re-authenticated.

authentification à un seul facteur

Aujourd’hui, cette méthode d’authentification est la plus couramment utilisée pour l’ensemble des services.Today, this method of authentication is the most commonly used one across services. Toutefois, il s’agit également du type d’authentification le moins sécurisé lorsqu’il constitue l’unique moyen d’authentification.It is also the least secure form of authentication when used as the only means of authentication. Les exigences de complexité des mots de passe, les « questions secrètes » et les changements de mots de passe réguliers peuvent renforcer la sécurisation de l’utilisation de ces informations d’identification, mais se révèlent plus contraignantes pour les utilisateurs et ne sont pas des moyens de dissuasion efficaces contre le piratage informatique.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.

L’inconvénient des mots de passe réside dans le fait qu’ils sont plus faciles à deviner que les systèmes d’authentification multifacteurs.The challenge with passwords is that it is easier to guess them successfully than systems that have more than one factor. Si une personne malveillante pirate une base de données de comptes d’utilisateurs et de mots de passe hachés d’une boutique en ligne, elle peut exploiter les mots de passe utilisés sur d’autres sites web.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. Les utilisateurs ont tendance à réutiliser systématiquement les comptes, car les mots de passe complexes sont difficiles à mémoriser.Users tend to reuse accounts all the time, because complex passwords are hard to remember. Enfin, la gestion des mots de passe par un service informatique entraîne également un surcroît de complexité lié à la nécessité d’offrir des mécanismes de réinitialisation, d’exiger de fréquentes mises à jour des mots de passe et de les stocker de manière sécurisée.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.

En dépit de ses inconvénients, l’authentification à un seul facteur dote l’utilisateur d’un contrôle total sur son information d’identification.For all of its disadvantages, single-factor authentication gives the user control of the credential. En effet, l’utilisateur peut créer et modifier ces informations, et le processus d’authentification ne nécessite rien d’autre qu’un clavier.They create it and modify it, and only a keyboard is needed for the authentication process. Cet aspect constitue la principale différence entre l’authentification à un seul facteur et l’authentification multifacteur.This is the main aspect that distinguishes single-factor from multi-factor authentication.

2.1.1 Service Broker d’authentification web2.1.1 Web authentication broker

Comme décrit précédemment, l’une des difficultés liées à l’authentification par mot de passe pour un service informatique réside dans le surcroît de travail induit par la gestion de la base de noms d’utilisateur/mots de passe, des mécanismes de réinitialisation, etc. Une solution de plus en plus populaire consiste à recourir à des fournisseurs d’identité tiers assurant l’authentification par le biais du standard ouvert 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.

Le protocole OAuth permet aux services informatiques de « sous-traiter » efficacement la complexité de la gestion d’une base de données de noms d’utilisateur et de mots de passe, de la fonctionnalité de réinitialisation des mots de passe, etc., à un fournisseur d’identité tiers comme Facebook, Twitter ou 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.

Les utilisateurs disposent d’un contrôle total sur leur identité sur ces plateformes, mais une fois qu’ils ont été authentifiés, les applications peuvent demander un jeton au fournisseur d’identité avec le consentement de l’utilisateur, afin d’utiliser ce jeton pour autoriser les utilisateurs authentifiés.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.

Le service Broker d’authentification web de Windows 10 fournit un ensemble d’API et l’infrastructure qui permettent aux applications d’utiliser des protocoles d’authentification et d’autorisation tels qu’OAuth et 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. Les applications peuvent lancer des opérations d’authentification via l’API WebAuthenticationBroker , ce qui entraîne le retour d’un WebAuthenticationResult.Apps can initiate authentication operations through the WebAuthenticationBroker API, resulting in the return of a WebAuthenticationResult. La figure ci-après illustre une vue d’ensemble du flux de communications.An overview of the communication flow is illustrated in the following figure.

flux de travail du service Broker d’authentification web

L’application joue le rôle d’intermédiaire en initiant l’authentification auprès du fournisseur d’identité par le biais d’un élément WebView dans l’application.The app acts as the broker, initiating the authentication with the identity provider through a WebView in the app. Une fois que le fournisseur d’identité a authentifié l’utilisateur, il renvoie à l’application un jeton qui permettra de demander des informations sur l’utilisateur au fournisseur d’identité.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. Par mesure de sécurité, l’application doit être inscrite auprès du fournisseur d’identité avant de pouvoir faire office d’intermédiaire pour les processus d’authentification auprès du fournisseur d’identité.As a security measure, the app must be registered with the identity provider before it can broker the authentication processes with the identity provider. Cette procédure d’inscription diffère pour chaque fournisseur.This registration steps differ for each provider.

Voici le flux de travail général concernant l’appel de l’API WebAuthenticationBroker pour communiquer avec le fournisseur.Here’s the general workflow for calling the WebAuthenticationBroker API to communicate with the provider.

  • Construction des chaînes de demande à envoyer au fournisseur d’identité.Construct the request strings to be sent to the identity provider. Le nombre de chaînes et les informations figurant dans chacune d’elles diffèrent selon chaque service web, mais comprennent généralement deux chaînes d’URI contenant chacune une URL : l’une à laquelle la demande d’authentification est envoyée, et l’autre vers laquelle l’utilisateur est redirigé une fois l’autorisation effectuée.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.
  • Appel de WebAuthenticationBroker.AuthenticateAsync, transmission des chaînes de demande, puis attente de la réponse du fournisseur d’identité.Call WebAuthenticationBroker.AuthenticateAsync, passing in the request strings, and wait for the response from the identity provider.
  • Appel de WebAuthenticationResult.ResponseStatus pour obtenir l’état lors de la réception de la réponse.Call WebAuthenticationResult.ResponseStatus to get the status when the response is received.
  • Si la communication aboutit, traitement de la chaîne de réponse renvoyée par le fournisseur d’identité.If the communication is successful, process the response string returned by the identity provider. Si la communication échoue, traitement de l’erreur.If unsuccessful, process the error.

Si la communication aboutit, traitement de la chaîne de réponse renvoyée par le fournisseur d’identité.If the communication is successful, process the response string returned by the identity provider. Si la communication échoue, traitement de l’erreur.If unsuccessful, process the error.

L’exemple de code C# de ce processus est fourni ci-après.Sample C# code that for this process is below. Pour obtenir plus d’informations et découvrir une procédure pas à pas, voir WebAuthenticationBroker.For information and a detailed walkthrough, see WebAuthenticationBroker. Pour obtenir un exemple de code complet, consultez l’exemple WebAuthenticationBroker sur GitHub (en anglais).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 Authentification multifacteur2.2 Multi-factor authentication

Comme son nom l’indique, l’authentification multifacteur a recours à plusieurs facteurs d’authentification.Multi-factor authentication makes use of more than one authentication factor. Elle combine généralement un élément que vous connaissez, tel qu’un mot de passe, avec un élément dont vous disposez, par exemple un téléphone mobile ou une carte à puce.Usually, "something you know," such as a password, is combined with "something you have," which can be a mobile phone or a smart card. Ainsi, même si un attaquant découvre le mot de passe de l’utilisateur, le compte restera inaccessible sans le dispositif ou la carte.Even if an attacker discovers the user’s password, the account is still inaccessible without the device or card. Inversement, un dispositif ou une carte dont l’intégrité a été compromise ne seront d’aucune utilité à l’attaquant sans le mot de passe.And if only the device or card is compromised, it is not useful to the attacker without the password. L’authentification multifacteur se révèle donc plus sécurisée, mais également plus complexe, que l’authentification à un seul facteur.Multi-factor authentication is therefore more secure, but also more complex, than single-factor authentication.

Les services qui utilisent l’authentification multifacteur permettent souvent à l’utilisateur de choisir la façon dont il souhaite recevoir la seconde information d’identification.Services that use multi-factor authentication will often give the user a choice in how they receive the second credential. Un exemple courant de ce type d’authentification est le processus qui consiste à envoyer un code de vérification par SMS sur le téléphone mobile de l’utilisateur.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.

  • L’utilisateur indique son nom d’utilisateur et son mot de passe au fournisseur d’identité.The user provides their username and password to the identity provider.
  • Le fournisseur d’identité vérifie le nom d’utilisateur et le mot de passe comme dans le cadre du processus d’autorisation à un seul facteur, puis recherche le numéro de téléphone mobile de l’utilisateur stocké dans le système.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.
  • Le serveur envoie sur le téléphone mobile de l’utilisateur un message SMS contenant un code de vérification généré.The server sends an SMS message containing a generated verification code to the user’s mobile phone.
  • L’utilisateur fournit ce code de vérification au fournisseur d’identité par le biais d’un formulaire qui lui est présenté.The user provides the verification code to the identity provider; through a form presented to the user.
  • Le fournisseur d’identité renvoie un état d’authentification indiquant si l’authentification des deux informations d’identification a réussi.The identity provider returns an authentication status that indicates whether the authentication of both credentials were successful.
  • En cas de succès, l’échange de données commence.If successful, data exchange begins. Dans le cas contraire, l’utilisateur doit s’authentifier de nouveau.Otherwise, the user must be re-authenticated.

authentification à 2 facteurs

Comme vous pouvez le voir, ce processus diffère également de l’authentification à un seul facteur par le fait que la seconde information d’identification est envoyée à l’utilisateur et non créée ou fournie par ce dernier.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. L’utilisateur ne dispose donc pas d’un contrôle total sur les informations d’identification requises.The user is therefore not in complete control of the necessary credentials. C’est également le cas lorsqu’une carte à puce est utilisée comme seconde information d’identification : l’organisation est responsable de sa création et de sa remise à l’utilisateur.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) est un service de gestion des identités et des accès basé sur le cloud qui peut faire office de fournisseur d’identité dans les processus d’authentification à un seul facteur ou multifacteur.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. L’authentification Azure AD est utilisable avec ou sans code de vérification.Azure AD authentication can be used with or without a verification code.

Bien qu’Azure AD puisse également implémenter l’authentification à un seul facteur, les entreprises exigent généralement le surcroît de sécurité offert par l’authentification multifacteur.While Azure AD can also implement single-factor authentication, enterprises usually require the higher security of multi-factor authentication. Dans une configuration d’authentification multifacteur, un utilisateur qui s’authentifie avec un compte Azure AD peut demander qu’un code de vérification soit envoyé sous la forme d’un SMS soit sur son téléphone mobile, soit à l’application mobile Azure Authenticator.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.

En outre, Azure AD peut jouer le rôle de fournisseur OAuth, en offrant à l’utilisateur standard un mécanisme d’authentification et d’autorisation pour des applications exécutées sur différentes plateformes.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. Pour plus d’informations, voir Azure Active Directory et Azure Multi-Factor Authentication.To learn more, see Azure Active Directory and Multi-Factor Authentication on Azure.

2,4 Windows Hello2.4 Windows Hello

Le système d’exploitation Windows 10 intègre un mécanisme d’authentification multifacteur d’une grande simplicité.In Windows 10, a convenient multi-factor authentication mechanism is built into the operating system. Windows Hello est le nouveau système de connexion biométrique intégré à Microsoft 10.Windows Hello is the new biometric sign-in system built into Windows 10. Étant donné qu’il est directement intégré au système d’exploitation, Windows Hello peut identifier le visage ou les empreintes digitales pour déverrouiller les appareils des utilisateurs.Because it is built directly into the operating system, Windows Hello allows face or fingerprint identification to unlock users’ devices. Le magasin d’informations d’identification sécurisées Windows protège les données biométriques figurant sur l’appareil.The Windows secure credential store protects biometric data on the device.

Avec Windows Hello, un appareil dispose d’une méthode fiable de reconnaissance de l’utilisateur, ce qui permet de traiter la première partie du chemin d’accès entre un utilisateur et un service ou un élément de données demandé.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. Une fois que l’appareil a reconnu l’utilisateur, il doit toujours authentifier ce dernier avant de déterminer s’il lui accorde l’accès à une ressource demandée.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 offre également une puissante authentification à deux facteurs (2FA) qui est entièrement intégrée à Windows et remplace les mots de passe réutilisables par la combinaison d’un appareil spécifique et d’un mouvement biométrique ou d’un code confidentiel.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. Le code PIN est spécifié par l’utilisateur dans le cadre de l’inscription de compte Microsoft.The PIN is specified by the user as part of their Microsoft account enrollment.

Cependant, Windows Hello ne se contente pas de remplacer les systèmes 2FA traditionnels.Windows Hello isn’t just a replacement for traditional 2FA systems, though. Sa conception est similaire aux cartes à puce : l’authentification est effectuée à l’aide de primitives cryptographiques plutôt que des comparaisons de chaînes, et le document de clé de l’utilisateur est protégé à l’intérieur d’un matériel inviolable.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 n’a pas besoin des composants d’infrastructure supplémentaires requis pour le déploiement de cartes à puce.Microsoft Hello doesn't require the extra infrastructure components required for smart card deployment, either. Par exemple, vous n’avez pas besoin d’une infrastructure à clé publique (PKI) pour gérer les certificats, si vous n’en êtes pas encore équipé.In particular, you don’t need a Public Key Infrastructure (PKI) to manage certificates, if you don’t currently have one. Windows Hello allie les principaux avantages des cartes à puce : flexibilité de déploiement pour les cartes à puce virtuelles et sécurité robuste pour les cartes à puce physiques, sans aucun inconvénient.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.

Un appareil doit être inscrit auprès de Windows Hello pour que les utilisateurs puissent s’authentifier auprès de celui-ci.A device must be registered with Windows Hello before users can authenticate with it. Windows Hello utilise le chiffrement asymétrique (clé publique/privée) dans lequel un tiers utilise une clé publique pour chiffrer les données que l’autre partie peut déchiffrer à l’aide d’une clé privée.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. Dans le cas de Windows Hello, il crée un ensemble de paires de clés publiques/privées et écrit les clés privées sur la puce de la Module de plateforme sécurisée (TPM) du périphérique (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. Une fois qu’un appareil est inscrit, les applications UWP peuvent appeler les API système pour récupérer la clé publique de l’utilisateur, qui peut être utilisée pour inscrire l’utilisateur sur le serveur.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.

Le flux de travail d’inscription d’une application peut ressembler à ce qui suit :The registration workflow of an app might look like the following:

inscription à Windows Hello

Les informations d’inscription que vous collectez peuvent inclure beaucoup d’autres informations d’identification que dans le cas de ce scénario simple.The registration information you collect may include a lot more identifying information than it does in this simple scenario. Par exemple, si votre application accède à un service sécurisé tel qu’un service bancaire, votre processus d’inscription doit demander une preuve d’identité et d’autres informations.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. Une fois toutes les conditions remplies, la clé publique de cet utilisateur est stockée dans le système principal et utilisée pour la validation lors de l’utilisation suivante du service par l’utilisateur.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.

Pour plus d’informations sur Windows Hello, reportez-vous au Guide Windows Hello et au Guide du développeur Windows Hello.For more information on Windows Hello, see the Windows Hello guide and the Windows Hello developer guide.

3 Méthodes de sécurité des données en transit3 Data-in-flight security methods

Ces méthodes de sécurité s’appliquent aux données en transit entre plusieurs appareils connectés à un réseau.Data-in-flight security methods apply to data in transit between devices connected to a network. Les données peuvent être transférées entre les systèmes de l’environnement haute sécurité d’un intranet d’entreprise privé ou entre un client et un service web dans l’environnement non sécurisé du web.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. Les applications Windows 10 prennent en charge des normes comme SSL par le biais de leurs API de réseau, et fonctionnent avec des technologies telles que le service Azure Gestion des API, qui permettent aux développeurs de garantir le niveau de sécurité approprié pour leurs applications.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 Authentification de système distant3.1 Remote system authentication

Il existe deux scénarios types impliquant une communication avec un système informatique distant.There are two general scenarios where communication occurs with a remote computer system.

  • Un serveur local authentifie un utilisateur par le biais d’une connexion directe,A local server authenticates a user over a direct connection. par exemple, lorsque le serveur et le client appartiennent à un intranet d’entreprise.For example, when the server and the client are on a corporate intranet.
  • La communication avec un service web s’effectue sur Internet.A web service is communicated with over the Internet.

Les exigences de sécurité en matière de communication avec un service web sont plus strictes que celles qui s’appliquent aux scénarios de connexion directe, car les données ne font plus seulement partie intégrante d’un réseau sécurisé, et le risque d’interception des données par des personnes malveillantes se révèle également plus élevé.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. Étant donné que divers types d’appareils accéderont au service, ce dernier sera probablement généré sous forme de service RESTful, plutôt qu’en tant que service WCF (Windows Communication Foundation) par exemple, ce qui signifie que l’authentification et l’autorisation auprès du service soulèveront également de nouvelles difficultés.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. Examinons deux exigences en matière de communication sécurisée avec un système distant.We’ll discuss two requirements for secure remote system communication.

La première exigence concerne la confidentialité des messages : les informations transmises entre le client et les services web (par exemple, l’identité de l’utilisateur et les autres informations personnelles) ne doivent pas être lisibles par des tiers lors du transit.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. Ce résultat s’obtient généralement par le chiffrement de la connexion par l’intermédiaire de laquelle les messages sont envoyés, ainsi que par le chiffrement du message proprement dit.This is usually accomplished by encrypting the connection over which messages are sent and by encrypting the message itself. Dans le chiffrement à clé privée/publique, la clé publique est accessible à tous et permet de chiffrer les messages à envoyer à un destinataire spécifique.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. La clé privée est uniquement détenue par le destinataire et sert à déchiffrer le message.The private key is only held by the receiver and is used to decrypt the message.

La seconde exigence concerne l’intégrité des messages : le client et le service web doivent être en mesure de vérifier que les messages qu’ils reçoivent sont ceux destinés à être envoyés par l’autre partie, et que le message n’a pas été modifié lors du transit.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. Ce résultat est obtenu grâce à la signature des messages à l’aide de signatures numériques, ainsi que par le biais de l’authentification par certificat.This is accomplished by signing messages with digital signatures and using certificate authentication.

3.2 Connexions SSL3.2 SSL connections

Pour établir et garantir des connexions sécurisées avec les clients, les services web peuvent utiliser le protocole SSL (Secure Sockets Layer), qui est pris en charge par le protocole S-HTTP (Secure Hypertext Transfer Protocol).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 assure la confidentialité et l’intégrité des messages en prenant en charge le chiffrement à clé publique, ainsi que des certificats de serveur.SSL provides message confidentiality and integrity by supporting public key encryption as well as server certificates. SSL a été remplacé par le protocole TLS (Transport Layer Security), mais ce dernier est encore souvent désigné sous le nom de SSL.SSL is superseded by Transport Layer Security (TLS), but TLS is often casually referred to as SSL.

Lorsqu’un client demande l’accès à une ressource sur un serveur, SSL démarre un processus de négociation avec le serveur,When a client requests access to a resource on a server, SSL starts a negotiation process with the server. appelé établissement d’une liaison SSL.This is called an SSL handshake. Un niveau de chiffrement, un ensemble de clés de chiffrement publiques et privées et les informations d’identité figurant dans les certificats clients et de serveur sont acceptés comme base de l’ensemble des communications pour toute la durée de la connexion 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. Le serveur peut également exiger que le client ait été authentifié à ce stade.The server may also require the client to be authenticated at this time. Une fois la connexion établie, tous les messages sont chiffrés avec la clé publique négociée jusqu’à ce que la connexion se ferme.Once the connection is established, all messages are encrypted with the negotiated public key until the connection closes.

3.2.1 Épinglage SSL3.2.1 SSL pinning

Alors que le protocole SSL peut assurer la confidentialité des messages à l’aide du chiffrement et des certificats, il ne vérifie pas que le serveur avec lequel le client communique est le serveur approprié.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. Le comportement du serveur peut être simulé par un tiers non autorisé, interceptant ainsi les données sensibles transmises par le client.The server’s behavior can be mimicked by an unauthorized third-party, intercepting the sensitive data that the client transmits. Pour éviter ce problème, une technique appelée épinglage SSL permet de vérifier que le certificat sur le serveur est le certificat attendu et approuvé par le client.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.

Il existe différentes méthodes pour implémenter l’épinglage SSL dans les applications, chacune d’elles présentant des avantages et des inconvénients.There are a few different ways to implement SSL pinning in apps, each with their own pros and cons. L’approche la plus simple consiste à utiliser la déclaration de certificats dans le manifeste du package de l’application.The easiest approach is via the Certificates declaration in the app’s package manifest. Cette déclaration permet au package de l’application d’installer des certificats numériques et de spécifier une confiance exclusive vis-à-vis de ces derniers.This declaration enables the app package to install digital certificates and specify exclusive trust in them. En conséquence, les connexions SSL sont uniquement autorisées entre l’application et les serveurs qui détiennent les certificats correspondants dans leur chaîne de certificats.This results in SSL connections being allowed only between the app and servers that have the corresponding certificates in their certificate chain. Ce mécanisme favorise également l’utilisation sécurisée de certificats auto-signés, car aucune dépendance tierce n’est requise sur les autorités de certification publique de confiance.This mechanism also enables the secure use of self-signed certificates, as no third party dependency is needed on trusted public certification authorities.

manifeste SSL

Afin d’offrir un contrôle accru sur la logique de validation, des API sont disponibles pour valider les certificats renvoyés par le serveur en réponse à une requête HTTPS.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. Notez que cette méthode nécessite l’envoi d’une requête et l’inspection de la réponse. Par conséquent, prenez soin d’ajouter cette tâche en tant qu’opération de validation avant de commencer à envoyer des informations sensibles dans une requête.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.

Le code C# ci-après illustre cette méthode d’épinglage SSL.The following C# code illustrates this method of SSL pinning. La méthode ValidateSSLRoot utilise la classe HttpClient pour exécuter une requête HTTP.The ValidateSSLRoot method uses the HttpClient class to execute an HTTP request. Une fois que le client a envoyé la réponse, il utilise la collection RequestMessage.TransportInformation.ServerIntermediateCertificates pour inspecter les certificats renvoyés par le serveur.After the client sends the response, it uses the RequestMessage.TransportInformation.ServerIntermediateCertificates collection to inspect the certificates returned by the server. Le client peut ensuite valider la totalité de la chaîne de certificats avec les empreintes numériques qu’il a incluses.The client can then validate the entire certificate chain with the thumbprints it has included. Cette méthode n’exige pas que les empreintes numériques des certificats soient mises à jour dans l’application lorsque le certificat de serveur arrive à expiration et fait l’objet d’un renouvellement.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 Publication et sécurisation de l’accès aux API REST3.3 Publishing and securing access to REST APIs

Pour garantir un accès autorisé aux services web, ces derniers doivent nécessiter une authentification chaque fois qu’un appel d’API est effectué.To ensure authorized access to web services, they must require authentication every time an API call is made. L’aptitude à contrôler les performances et l’évolutivité sont également des éléments à prendre en compte lorsque les services web sont exposés sur le web.Being able to control performance and scale is also something to consider when web services are exposed across the web. Le service Azure Gestion des API contribue à faciliter l’exposition d’API sur le web tout en fournissant des fonctionnalités à trois niveaux.Azure API Management is a service that can help expose APIs across the web, while providing features on three levels.

Les éditeurs/administrateurs de l’API peuvent configurer facilement cette dernière par le biais du portail de publication du service Azure Gestion des API.Publishers/Administrators of the API can easily configure the API through the Publisher Portal of Azure API Management. Il est ensuite possible de créer des ensembles d’API et de gérer l’accès à ces derniers pour déterminer les personnes autorisées à accéder aux différentes API.Here, API sets can be created and access to them can be managed to control who has access to which APIs.

Les développeurs souhaitant accéder à ces API peuvent soumettre des requêtes par l’intermédiaire du portail des développeurs, lequel peut soit leur offrir un accès immédiat, soit exiger l’approbation de l’éditeur/administrateur.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. Les développeurs peuvent également consulter la documentation sur les API et les exemples de code à partir du portail des développeurs afin d’adopter rapidement les API proposées par le service web.Developers can also view the API documentation and sample code in the Developer Portal, to rapidly adopt the APIs offered by the web service.

Les applications créées par ces développeurs accèdent ensuite à l’API par le biais du proxy offert par le service Azure Gestion des API.The apps that these developers create then access the API through the proxy offered by Azure API Management. Ce proxy fournit une couche d’obscurité masquant le point de terminaison réel de l’API sur le serveur de l’éditeur/administrateur, et peut également inclure une logique supplémentaire comme la traduction d’API pour garantir la cohérence continue de l’API exposée lorsqu’un appel vers une API est redirigé vers une autre 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. Le proxy peut également utiliser le filtrage IP pour bloquer les appels d’API émanant d’un domaine IP spécifique ou d’un ensemble de domaines.It can also use IP filtering to block API calls originating from a specific IP domain or set of domains. Par ailleurs, le service Azure Gestion des API garantit la sécurisation de ses services web à l’aide d’un ensemble de clés publiques, appelées clés API, pour authentifier et autoriser chaque appel d’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. Lorsque l’autorisation échoue, l’accès à l’API et les fonctionnalités prises en charge par cette dernière sont bloqués.When authorization fails, access to the API and the functionality it supports is blocked.

En outre, le service Azure Gestion des API est en mesure de réduire le nombre d’appels d’API à un service (cette procédure étant désignée sous le terme de limitation de requêtes) pour optimiser les performances du service web.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. Pour plus d’informations, voir Azure Gestion des API et la vidéo de présentation d’Azure Gestion des API à AzureCon 2015 (en anglais).To learn more, review Azure API Management and Azure API Management at AzureCon 2015.

4 Méthodes de sécurité des données au repos4 Data-at-rest security methods

Lorsque les données arrivent sur un appareil, nous les désignons sous le terme de « données au repos ».When data arrives on a device, we refer to it as "data-at-rest." Ces données doivent être stockées sur l’appareil de manière sécurisée de façon à ne pas être accessibles par des utilisateurs ou applications non autorisés.This data needs to be stored on the device in a secure manner, so that it cannot be accessed by unauthorized users or apps. Le modèle d’application inclus dans Windows 10 contribue à garantir le fait que les données stockées par une application quelconque sont uniquement accessibles à cette dernière, tout en fournissant des API permettant de partager les données lorsque cela se révèle nécessaire.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. Des API supplémentaires sont également disponibles pour assurer le chiffrement des données et le stockage sécurisé des informations d’identification.Additional APIs are also available to ensure that data can be encrypted and credentials can be stored safely.

4.1 Modèle d’application Windows4.1 Windows app model

Par le passé, Windows n’a jamais présenté de définition d’une application.Traditionally, Windows has never had a definition of an app. Ce terme désignait le plus souvent un exécutable (.exe), et ceci n’englobait jamais l’installation, le stockage d’état, la durée d’exécution, le contrôle de version, l’intégration du système d’exploitation et la communication entre les applications.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. Le modèle de plateforme Windows universelle définit un modèle d’application qui couvre l’installation, l’environnement d’exécution, la gestion des ressources, les mises à jour, le modèle de données et la désinstallation.The Universal Windows Platform model defines an app model that covers installation, runtime environment, resource management, updates, data model, and uninstallation.

Les applications Windows 10 s’exécutent dans un conteneur, ce qui signifie qu’elles disposent de privilèges limités par défaut (des privilèges supplémentaires peuvent être demandés et accordés par l’utilisateur).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). Par exemple, si une application souhaite accéder à des fichiers du système, il convient d’utiliser un sélecteur de fichiers à partir de l’espace de noms Windows.Storage.Pickers pour permettre à l’utilisateur de sélectionner un fichier (aucun accès direct aux fichiers n’est autorisé).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). De même, si une application a besoin d’accéder aux données d’emplacement de l’utilisateur, il convient d’activer et de déclarer la fonctionnalité de localisation des appareils, en informant l’utilisateur lors du téléchargement que cette application demandera l’accès à l’emplacement de l’utilisateur.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. En outre, lorsque l’application doit accéder pour la première fois à l’emplacement de l’utilisateur, elle présente une invite de consentement supplémentaire à l’utilisateur pour demander l’autorisation d’accéder à ces données.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.

Notez que ce modèle d’application agit à la façon d’une « prison » pour les applications (empêchant ces dernières d’atteindre l’extérieur), mais non à la manière d’un « château » inaccessible depuis l’extérieur (les applications avec des privilèges administratifs peuvent bien entendu accéder à l’intérieur).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). La fonctionnalité Device Guard disponible dans Windows 10 contribue à restreindre davantage cet accès en permettant aux organisations/services informatiques de spécifier les applications (Win32) qui sont autorisées à s’exécuter.Device Guard in Windows 10, which enables organizations/IT to specify which (Win32) apps are allowed to execute, can further help limit this access.

Le modèle d’application gère également le cycle de vie des applications.The app model also manages the app lifecycle. Par exemple, il limite par défaut l’exécution en arrière-plan des applications ; dès qu’une application passe à l’arrière-plan, le processus est suspendu (après avoir accordé à l’application un court instant pour prendre en compte sa suspension dans le code), et sa mémoire est figée.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. Le système d’exploitation fournit des mécanismes permettant aux applications de demander l’exécution de tâches spécifiques en arrière-plan (exécution selon une planification, déclenchée par divers événements tels que la connectivité Internet/Bluetooth, les modifications des conditions d’alimentation, etc., ainsi que dans le cadre de scénarios spécifiques comme l’écoute de musique ou un suivi 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).

Lorsque les ressources mémoire sur l’appareil deviennent insuffisantes, Windows libère de l’espace mémoire en arrêtant des applications.When memory resources on the device are running low, Windows frees memory space by terminating apps. Ce modèle de cycle de vie force les applications à conserver les données chaque fois qu’elles sont suspendues, car aucun laps de temps supplémentaire n’est disponible entre la suspension et l’arrêt.This lifecycle model forces apps to persist data whenever they’re suspended, because there is no additional time available between suspension and termination.

Pour plus d’informations, voir Plateforme Windows universelle : présentation du cycle de vie d’une application Windows 10 (en anglais).For more information, see It's Universal: Understanding the Lifecycle of a Windows 10 Application.

4.2 Protection des informations d’identification stockées4.2 Stored credential protection

Les applications Windows qui accèdent aux services authentifiés offrent souvent aux utilisateurs la possibilité de stocker leurs informations d’identification sur leur appareil local.Windows apps that access authenticated services often provide the users the option of storing their credentials on the local device. Cela simplifie la tâche des utilisateurs, car lorsque ces derniers fournissent leur nom d’utilisateur et leur mot de passe, l’application réutilise automatiquement ces informations à chacun de ses lancements ultérieurs.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. Cette fonctionnalité risquant de poser un problème de sécurité si un attaquant parvient à accéder à ces données stockées, Windows 10 permet aux applications Windows de stocker les informations d’identification des utilisateurs dans un stockage sécurisé des informations d’identification.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. L’application appelle l’API Stockage sécurisé des informations d’identification pour stocker et récupérer les informations d’identification dans cet espace sécurisé plutôt que de les conserver dans le conteneur de stockage de l’application.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. Le Stockage sécurisé des informations d’identification est géré par le système d’exploitation, mais son accès est limité à l’application qui stocke ces informations, offrant ainsi une solution gérée en toute sécurité pour le stockage des informations d’identification.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.

Lorsqu’un utilisateur fournit les informations d’identification à stocker, l’application obtient une référence au stockage sécurisé des informations d’identification à l’aide de l’objet PasswordVault dans l’espace de noms 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. Elle crée ensuite un objet PasswordCredential contenant un identificateur pour l’application Windows, le nom d’utilisateur et le mot de passe.It then creates a PasswordCredential object containing an identifier for the Windows app and the username and password. Cet objet est transmis à la méthode PasswordVault.Add pour stocker les informations d’identification dans le stockage sécurisé.This is passed to the PasswordVault.Add method to store the credentials in the locker. L’exemple de code C# ci-après illustre cette procédure.The following C# code example shows how this is done.

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

Dans l’exemple de code C# suivant, l’application demande toutes les informations d’identification correspondant à l’application en appelant la méthode FindAllByResource de l’objet 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. Si plusieurs informations sont renvoyées, l’utilisateur est invité à entrer son nom d’utilisateur.If more than one is returned, it prompts the user to enter their username. Si les informations d’identification ne figurent pas dans le Stockage sécurisé, l’application demande à l’utilisateur de les lui fournir.If the credentials are not in the locker, the app prompts the user for them. L’utilisateur est alors connecté au serveur à l’aide de ces informations d’identification.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;
}

Pour plus d’informations, voir Stockage sécurisé des informations d’identification.For more information, see Credential locker.

4.3 Protection des données stockées4.3 Stored data protection

Le chiffrement des données stockées, communément désignées sous le terme de données au repos, permet d’éviter tout risque d’accès non autorisé à ces données.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. Les deux mécanismes courants de chiffrement des données consistent à utiliser des clés symétriques ou des clés asymétriques.The two common mechanisms to encrypt data are using either symmetric keys or using asymmetric keys. Toutefois, le chiffrement des données ne permet pas de garantir que les données ne sont pas modifiées entre le moment de leur envoi et celui de leur stockage.However, data encryption can’t ensure that the data is unaltered between the time it was sent and the time it was stored. En d’autres termes, l’intégrité des données ne peut pas être assurée.In other words, the data integrity cannot be ensured. L’utilisation de codes d’authentification des messages, de codes de hachage et de signatures numériques sont des techniques courantes pour résoudre ce problème.Using message authentication codes, hashes, and digital signing are common techniques to solve this problem.

4.3.1 Chiffrement des données4.3.1 Data encryption

Avec le chiffrement symétrique, l’expéditeur et le destinataire disposent de la même clé et l’utilisent aussi bien pour chiffrer les données que pour les déchiffrer.With symmetric encryption, both the sender and recipient have the same key and use it to both encrypt and decrypt the data. La difficulté liée à cette approche réside généralement dans le partage sécurisé de la clé pour que les deux parties la reconnaissent.The challenge with this approach is securely sharing the key so both parties are aware of it.

L’un des moyens de résoudre cette difficulté correspond au chiffrement asymétrique, impliquant l’utilisation d’une paire de clés publique/privée.One answer to this is asymmetric encryption, in which a public/private key pair is used. La clé publique est partagée librement avec toute personne souhaitant chiffrer un message.The public key is shared freely with anyone who wants to encrypt a message. La clé privée est systématiquement gardée secrète afin que vous seul puissiez l’utiliser pour déchiffrer les données.The private key is always kept secret so that only you can use it to decrypt the data. L’une des techniques courantes pour autoriser la découverte de la clé publique consiste à utiliser des certificats numériques, également désignés simplement sous le terme de certificats.A common technique to allow for discovery of the public key is by using digital certificates, also simply referred to as certificates. Le certificat inclut des informations concernant la clé publique, ainsi que des informations sur l’utilisateur ou le serveur, telles que le nom, l’émetteur, l’adresse e-mail et le pays.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.

Les développeurs d’applications Windows peuvent utiliser les classes SymmetricKeyAlgorithmProvider et AsymmetricKeyAlgorithmProvider pour mettre en œuvre un chiffrement symétrique et asymétrique dans leurs applications UWP.Windows app developers can use the SymmetricKeyAlgorithmProvider and AsymmetricKeyAlgorithmProvider classes to implement symmetric and asymmetric encryption in their UWP apps. En outre, la classe CryptographicEngine permet de chiffrer et déchiffrer des données, signer du contenu et vérifier les signatures numériques.Additionally, the CryptographicEngine class can be used to encrypt and decrypt data, sign content and verify digital signatures. Les applications peuvent également utiliser la classe DataProtectionProvider de l’espace de noms Windows.Security.Cryptography.DataProtection pour chiffrer et déchiffrer les données locales stockées.Apps can also use the DataProtectionProvider class in the Windows.Security.Cryptography.DataProtection namespace to encrypt and decrypt stored local data.

4.3.2 Détection des falsifications de message (codes MAC, codes de hachage et signatures)4.3.2 Detecting message tampering (MACs, hashes, and signatures)

Un code d’authentification de message (MAC) est un code (ou une balise) résultant de l’utilisation d’une clé symétrique (appelée clé secrète) ou d’un message comme entrée dans un algorithme de chiffrement 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. La clé secrète et l’algorithme sont acceptés par l’expéditeur et le destinataire avant le transfert des messages.The secret key and the algorithm are agreed upon by the sender and receiver before the message transfer.

Les codes MAC vérifient les messages en procédant comme suit.MACs verify messages like this.

  • L’expéditeur dérive la balise MAC en utilisant la clé secrète en tant qu’entrée pour l’algorithme MAC.The sender derives the MAC tag by using the secret key as input to the MAC algorithm.
  • L’expéditeur envoie la balise MAC et le message au destinataire.The sender sends the MAC tag and the message to the receiver.
  • Le destinataire dérive la balise MAC en utilisant la clé secrète et le message en tant qu’entrées pour l’algorithme MAC.The receiver derives the MAC tag by using the secret key and the message as inputs to the MAC algorithm.
  • Le destinataire compare sa balise MAC avec celle de l’expéditeur.The receiver compares their MAC tag with the sender's MAC tag. Si les deux balises sont identiques, cela signifie que le message n’a pas été falsifié.If they are the same then we know that the message has not been tampered with.

vérification de code MAC

Les applications Windows peuvent implémenter la vérification des messages MAC en appelant la classe MacAlgorithmProvider pour générer la clé et la classe CryptographicEngine pour exécuter l’algorithme de chiffrement 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 Utilisation de codes de hachage4.3.3 Using hashes

Une fonction de hachage est un algorithme de chiffrement qui sélectionne un long bloc de données au hasard et renvoie une chaîne de bits de taille fixe, appelée valeur de hachage.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. Une famille complète de fonctions de hachage permet d’effectuer cette opération.There is an entire family of hash functions that can do this.

Il est possible d’utiliser une valeur de hachage à la place d’un code MAC dans le scénario de transfert de message décrit ci-dessus.A hash value can be used in place of a MAC in the message-transfer scenario above. L’expéditeur envoie une valeur de hachage et un message, puis le destinataire dérive sa propre valeur de hachage de celle de l’expéditeur et du message associé et compare les deux valeurs de hachage.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. Les applications qui s’exécutent sur Windows 10 peuvent appeler la classe HashAlgorithmProvider pour énumérer les algorithmes de hachage qui sont disponibles et exécuter l’un d’eux.Apps running on Windows 10 can call the HashAlgorithmProvider class to enumerate the hash algorithms that are available and run one of them. La classe CryptographicHash représente la valeur de hachage.The CryptographicHash class represents the hash value. La méthode CryptographicHash.GetValueAndReset peut être utilisée pour hacher différentes données de manière répétée sans avoir à recréer l’objet pour chaque utilisation.The CryptographicHash.GetValueAndReset method can be used to repeatedly hash different data without having to re-create the object for each use. La méthode Append de la classe CryptographicHash ajoute de nouvelles données à une mémoire tampon pour qu’elles soient hachées.The Append method of the CryptographicHash class adds new data to a buffer to be hashed. L’ensemble de ce processus est illustré dans l’exemple de code C# suivant.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 Signatures numériques4.3.4 Digital signatures

La vérification de l’intégrité des données d’un message stocké signé numériquement est comparable à celle de l’authentification par code MAC.The data integrity of a digitally signed stored message is verified in a similar way to MAC authentication. Le flux de travail de signature numérique est décrit ci-après.Here is the way the digital signature workflow operates.

  • L’expéditeur dérive une valeur de hachage (également appelée synthèse) en utilisant le message en tant qu’entrée d’un algorithme de hachage.The sender derives a hash value (also known as a digest) by using the message as the input to a hash algorithm.
  • L’expéditeur chiffre la synthèse à l’aide de sa clé privée.The sender encrypts the digest using their private key.
  • L’expéditeur envoie le message, la synthèse chiffrée et le nom de l’algorithme de hachage utilisé.The sender sends the message, the encrypted digest, and the name of the hash algorithm that was used.
  • Le destinataire utilise la clé publique pour déchiffrer la synthèse chiffrée qu’il a reçue.The receiver uses the public key to decrypt the encrypted digest it received. Il utilise ensuite l’algorithme de hachage pour hacher le message afin de créer sa propre synthèse.It then uses the hash algorithm to hash the message to create a digest of its own. Pour finir, le destinataire compare les deux synthèses (celle qu’il a reçue et déchiffrée, et celle qu’il a créée).And finally the receiver compares the two digests (the one it received and decrypted, and the one it made). Seule la correspondance de ces deux synthèses offre au destinataire l’assurance que le message a été envoyé par le possesseur de la clé privée, que ce dernier est donc bien celui qu’il prétend être, et que le message n’a pas été altéré lors du transit.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.

signatures numériques

Grâce à la grande rapidité des algorithmes de hachage, les valeurs de hachage peuvent être dérivées en un temps record, même pour les messages volumineux.Hashing algorithms are very fast, so hash values can be derived quickly from even large messages. La valeur de hachage obtenue présente une longueur arbitraire et peut être plus courte que le message complet ; par conséquent, l’utilisation de clés publiques et privées pour chiffrer et déchiffrer uniquement la synthèse plutôt que la totalité du message constitue une optimisation.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.

Pour plus d’informations, voir les articles Signatures numériques, Codes d’authentification des messages, hachages et signatures et Chiffrement.For more information, take a look articles on Digital signatures, MACs, hashes, and signatures, and Cryptography.

5 Récapitulatif5 Summary

La plateforme Windows universelle de Windows 10 offre de nombreuses techniques pour tirer parti des fonctionnalités du système d’exploitation afin de créer des applications plus sécurisées.The Universal Windows Platform in Windows 10 offers a number of ways to leverage operating system capabilities to create more secure apps. Dans les différents scénarios d’authentification, tels que l’authentification à un seul facteur, multifacteur ou par le biais du service Broker avec un fournisseur d’identité OAuth, des API sont disponibles pour atténuer les difficultés les plus courantes en matière d’authentification.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 fournit un nouveau système d’identification biométrique qui reconnaît l’utilisateur et décourage activement les tentatives de contournement des identifications.Windows Hello provides a new biometric sign-in system that recognizes the user and actively defeats efforts to circumvent proper identification. Il fournit également plusieurs couches de clés et de certificats qui ne peuvent jamais être révélés ni utilisés en dehors du module de plateforme sécurisée.It also delivers multiple layers of keys and certificates that can never be revealed or used outside the trusted platform module. Par ailleurs, une couche supplémentaire de sécurité est disponible par le biais de l’utilisation facultative de certificats et de clés d’identité d’attestation.Plus, a further layer of security is available through the optional use of attestation identity keys and certificates.

Pour sécuriser les données en transit, des API sont proposées pour communiquer avec les systèmes distants en toute sécurité sur SSL, tout en offrant la possibilité de valider l’authenticité du serveur avec l’épinglage 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. Le service Azure Gestion des API facilite la publication d’API de manière sécurisée et contrôlée en offrant de puissantes options de configuration pour l’exposition d’API sur le web au moyen d’un proxy assurant une obfuscation supplémentaire du point de terminaison des 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. L’accès à ces API est sécurisé par l’utilisation de clés API, et le nombre d’appels d’API peut être limité pour contrôler les performances.Access to these APIs is secured by using API keys and API calls can be throttled to control performance.

Lorsque les données arrivent sur l’appareil, le modèle d’application Windows offre un surcroît de contrôle sur le mode d’installation, de mise à jour et d’accès aux données de l’application, tout en empêchant cette dernière d’accéder aux données d’autres applications de manière inappropriée.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. Enfin, le système d’exploitation gère un Stockage sécurisé des informations d’identification des utilisateurs, et les autres données peuvent être protégées sur les appareils à l’aide des API de chiffrement et de hachage offertes par la plateforme Windows universelle.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 Ressources6 Resources

6.1 Articles sur les procédures6.1 How-to articles

6.2 Exemples de code6.2 Code samples

6.3 Informations de référence sur les API6.3 API reference