Encore une conférence à laquelle nous avons assisté à OXiane lors de ce droidcon 2014.
L’enjeu ici : parler de sa stratégie d’authentification au sein d’une application mobile. Pas de notion précise de sécurité applicative mais surtout un talk autour de trois notions :
- Approche de sécurité développeur / utilisateur
- Expérience utilisateur (UX le mot à la mode depuis 2 ans)
- Différences entre authentification et autorisations
Sécurité
Tout d’abord, quelques réflexions générales de sécurité : 91% des gens ont un des 1000 mots de passe les plus répandus.
Ce qui ouvre pas mal de possibilités aux hackers, avec en tête les derniers piratages de masses de comptes consultables sur le site https://haveibeenpwned.com/. Quel type de mot de passe choisir, le mieux serait un mélange de mots aléatoire, en évitant les remplacements évidents, comme un 3 pour un E.
Ajoutons un autre site : heartbleed
Expérience utilisateur
De ce côté, une pratique répandue, en particulier quand on saisit une clé wi-fi, laisser l’utilisateur voir le mot qu’il tape, particulièrement utile pour de longs mots de passe. En commun, savoir afficher le niveau de sécurité approximatif est un plus.
En fonction de la popularité de son application, il peut être bon de donner accès à celle-ci avant de restreindre l’accès par login, il sera décevant de ne rien voir d’une appli inconnue, surtout si le seul login proposé est lié à un compte social type facebook.
Le développement
Que faire des informations reçues ? Le stockage est essentiel pour assurer une connexion aux services transparente, mais quelle stratégie adopter ?
Stocker le mot de passe sur le device : utiliser sqlcypher pour Android, un moyen simple. On peut citer également l’utilisation d’un librairie pour sécuriser les Préférences, ainsi que l’utilisation encore assez peu répandue de l’API Android KeyChain.
Les alternatives aux passwords
Que faire pour offrir une authentification simple dans son app :
- Le combo email/password, un lien généré et un token de sécurité valable « un certain temps » !
- La techno oAuth2, qui apporte un confort de développement important par rapport à la version 1, et que l’on peut utiliser avec une librairie comme Scribe, qui simplifie beaucoup les appels et la gestion des requêtes.
- La stratégie de plus en plus répandue : un ou plusieurs réseaux sociaux. Après la mort de OpenID en 2012 suite à un hack, il n’y a pas vraiment aujourd’hui de standard, mais les plus grand réseaux offrent leurs API simplement : Google+, Facebook, Twitter, Yahoo et autres.
Note :
Pour l’authentification au sein de son application, la génération des clés est l’étape la plus simple. En revanche, être capable de réaliser les requêtes correctement peut vite devenir un casse tête, surtout si on veut offrir le choix de 3 ou 4 réseaux sociaux. Pour simplifier ces appels, nous utilisons, aussi bien en natif qu’en hybride, les librairies FireBase pour Android. Pour assurer un accès sécurisé aux données qu’ils hébergent dans le cloud et exposent en REST, ils ont inclut tout le nécessaire pour faciliter l’authentification sur ces grands réseaux.
Au final un talk intéressant de Tim Messerschmidt sur un sujet qui continuera à prendre de l’importance avec la montée en puissance des services « cloud ».