Your SlideShare is downloading. ×
0
1Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRA...
2Infrastructure à clés publiquesSauvegarder un certificatPartager un certificatUn scénario possible chez un clientAu menu
3Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRA...
4Fichier signé numériquement par une autoritéEquivalent à une carte d’identitéAuthentification sur le mode « je possède »C...
5Ce que je chiffre avec l’un…… je le déchiffre avec l’autreUne clé privée liée à une clé publique
6Objectif d’une PKI :Authentification mutuelle forteConfidentialitéNon-répudiationPour les mobiles :Gérer l’accès à un int...
7Comment sauver un certificat dans un espace sécurisé dutéléphone ?Comment résister au vol du téléphone ?Comment contrôler...
8Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRA...
9Approche traditionnelleSecure Element (SE)Chiffrement du disqueConteneur de certificats clients AndroidKeyChainKeystoreAp...
10Sauvegarder le certificat :Non chiffré sur disqueExploitable par analyse statique de disqueChiffré sur disqueMot de pass...
11SE : composant électronique communiquant via des tramesbinairesDisponible dans le terminal et/ou dans la carte SIMAvanta...
12Accessible via la couche NFC mais …… impossible d’installer des application dans le SE… impossible de communiquer avec p...
13Limité à l’identification VPN et Wifi (< sdk 14)Installation depuis la carte SDL’effacement du certificat n’est pas phys...
14Pour les version d’Android supérieur à 14Permet d’exploiter les certificats clients du terminalApproche officielle : Key...
15La callback retourne le nom du certificat etautorise l’application à l’utiliserKeyChain…KeyChain.getCertificateChain(thi...
16Installation via APIKeyChainIntent intent = KeyChain.createInstallIntent();// Controle le nom du certificatintent.putExt...
17KeyStoreProtégé par un mot de passe utilisateur(version antérieure à 3.x)Lié au verrouillage du téléphone (à partirde la...
18Récupérer la classe android.security.KeyStoreChanger le nom du packagePour le débloquer :Comment utiliser le KeyStoreput...
19Simulation des API du KeyChain pour les versions antérieures(sdk < 14)Sur GithubLes certificats ne peuvent être partagée...
20Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FR...
21Proposer un Account pour l’intranetIl porte et distribue la clé privée auxapplications de confianceLe besoin
22<serviceandroid:name=".CertificateAuthenticationService"android:exported="true" ><intent-filter><action android:name="an...
23<account-authenticatorxmlns:android="http://schemas.android.com/apk/res/android"android:accountType="fr.prados.android.a...
24Normalement utilisé pour du OAuth…… détourné pour communiquer le certificat par lamAccountManagerCallbackUtilisation…mAc...
25Dans getAuthPrivilège de l’appelantpublic static final String KEY_CALLER_UID =(VERSION.SDK_INT>=VERSION_CODES.HONEYCOMB)...
26Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FR...
27Enrôlement de quelques centaines de terminauxGestion des CDDGestion d’oubli des terminauxGrande facilité et souplesse de...
28Enregistrement des triplets dans le SIL’utilisateur saisi son identifiant sur leterminalC’est tout !Il récupère son cert...
29Requête vers le serveur avec l’identité de l’utilisateurLe serveur génère le certificat et le chiffre avec <IMEI> +<rand...
30Expérience utilisateur simpleSeulement 2 écrans
31La durée de vie du certificat peut être courte (CDD)Facilité de déploiementEn cas de vol, ajout du certificat client dan...
32Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FR...
33Technologies de sauvegardedes SecretsRemarquesSauvegarde dans le contexte delapplication.Les données ne sont pas chiffré...
Upcoming SlideShare
Loading in...5
×

OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un secret

1,995

Published on

Comment installer, gérer, sécuriser et utiliser une clef privée ? Comment partager une clef privée entres applications? Comment résister au vol du téléphone? Via des API cachées, des scénarios originaux et autres subtilités.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,995
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un secret"

  1. 1. 1Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEPhilippe PradosAurélien Rambaux17 Juin 2013Installer, gérer, sécuriser et utiliserune clef privée dans Android
  2. 2. 2Infrastructure à clés publiquesSauvegarder un certificatPartager un certificatUn scénario possible chez un clientAu menu
  3. 3. 3Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEQu’est-ce ?Infrastructure à clés publiques (PKI)
  4. 4. 4Fichier signé numériquement par une autoritéEquivalent à une carte d’identitéAuthentification sur le mode « je possède »Considéré comme plus sécurisé qu’un mot de passeSert de preuve juridiqueSignature basé sur du chiffrement asymétriqueQu’est-ce qu’un certificat numérique ?
  5. 5. 5Ce que je chiffre avec l’un…… je le déchiffre avec l’autreUne clé privée liée à une clé publique
  6. 6. 6Objectif d’une PKI :Authentification mutuelle forteConfidentialitéNon-répudiationPour les mobiles :Gérer l’accès à un intranetGérer le vol de mobileInfrastructure à clés publiques (PKI)
  7. 7. 7Comment sauver un certificat dans un espace sécurisé dutéléphone ?Comment résister au vol du téléphone ?Comment contrôler l’accès au certificat aux seules applicationsautorisées ?Comment distribuer le certificat aux terminauxDans cette session
  8. 8. 8Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEComment sauvegarder un secret dans unespace sécurisé du téléphone ?Sauver un secret
  9. 9. 9Approche traditionnelleSecure Element (SE)Chiffrement du disqueConteneur de certificats clients AndroidKeyChainKeystoreApproche mise en œuvre en missionComment sauvegarder un secret ?
  10. 10. 10Sauvegarder le certificat :Non chiffré sur disqueExploitable par analyse statique de disqueChiffré sur disqueMot de passe à demander encore et encoreUtiliser onSaveIntanceState() ou un extra de l’IntentGestion lourde« Accessible » sur le disqueChiffrer le disque du terminalPas garantiApproche traditionnelle
  11. 11. 11SE : composant électronique communiquant via des tramesbinairesDisponible dans le terminal et/ou dans la carte SIMAvantage d’un SE :Mémorise clefs privées, accès VPN, générateurs de mots de passeà usage unique…Résiste aux attaques physiquesImplémente matériellement les algorithmes standards decryptographie (DES, AES, RSA)Secure Element (SE) 1/2
  12. 12. 12Accessible via la couche NFC mais …… impossible d’installer des application dans le SE… impossible de communiquer avec par une application classiqueUtilisé par Google WalletSecure Element (SE) 2/2
  13. 13. 13Limité à l’identification VPN et Wifi (< sdk 14)Installation depuis la carte SDL’effacement du certificat n’est pas physique !Utilise le KeyStore AndroidConteneur de certificats clients
  14. 14. 14Pour les version d’Android supérieur à 14Permet d’exploiter les certificats clients du terminalApproche officielle : KeyChainKeyChain.choosePrivateKeyAlias(this,new KeyChainCallBack() {@Overridepublic void alias(String alias) {mAlias=alias;}},new String[] {"RSA"}, // List of acceptable key types. null for anynull, // issuer, null for any"internal.example.com", // host name of server requesting the cert443, // port of server requesting the cert, -1 if// unavailablenull); // alias to preselect, null if unavailable
  15. 15. 15La callback retourne le nom du certificat etautorise l’application à l’utiliserKeyChain…KeyChain.getCertificateChain(this, mAlias);KeyChain.getPrivateKey(this, mAlias);
  16. 16. 16Installation via APIKeyChainIntent intent = KeyChain.createInstallIntent();// Controle le nom du certificatintent.putExtra(KeyChain.EXTRA_NAME, CERT_NAME);intent.putExtra(KeyChain.EXTRA_PKCS12, out.toByteArray());startActivityForResult(intent, RESULT_CODE);
  17. 17. 17KeyStoreProtégé par un mot de passe utilisateur(version antérieure à 3.x)Lié au verrouillage du téléphone (à partirde la version 3.x)Mais pas d’API officielle !Ça n’empêche pas de jouer avec…
  18. 18. 18Récupérer la classe android.security.KeyStoreChanger le nom du packagePour le débloquer :Comment utiliser le KeyStoreput(), get(), byte[]if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {context.startActivity(new Intent("android.credentials.UNLOCK"));} else {context.startActivity(new Intent("com.android.credentials.UNLOCK"));}
  19. 19. 19Simulation des API du KeyChain pour les versions antérieures(sdk < 14)Sur GithubLes certificats ne peuvent être partagées entre applicationsExploite le KeyStore https://github.com/pprados/android-keychain-backporthttps://github.com/pprados/android-keychain-backport-androlibandroid-keychain-backport
  20. 20. 20Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEVia AccountAuthenticatorPartager un certificat
  21. 21. 21Proposer un Account pour l’intranetIl porte et distribue la clé privée auxapplications de confianceLe besoin
  22. 22. 22<serviceandroid:name=".CertificateAuthenticationService"android:exported="true" ><intent-filter><action android:name="android.accounts.AccountAuthenticator" /></intent-filter><meta-dataandroid:name="android.accounts.AccountAuthenticator"android:resource="@xml/certificate_authenticator" /></service>Le service…
  23. 23. 23<account-authenticatorxmlns:android="http://schemas.android.com/apk/res/android"android:accountType="fr.prados.android.account.certificate"android:icon="@drawable/ic_launcher"android:smallIcon="@drawable/ic_launcher"android:label="@string/authenticator_certificate_label“/>La description du compte…
  24. 24. 24Normalement utilisé pour du OAuth…… détourné pour communiquer le certificat par lamAccountManagerCallbackUtilisation…mAccountManager.invalidateAuthToken(mAccountType, mAuthToken);mAccountManager.getAuthToken(mAccount, // Account retrieved using getAccountsByType()mAuthTokenType, // Auth scopemOptions, // Authenticator-specific optionsthis, // Your activitymAccountManagerCallback, // CallbackmHandler); // Callback called if an error occursHttpsURLConnection.setDefaultSSLSocketFactory(mSocketFactory);
  25. 25. 25Dans getAuthPrivilège de l’appelantpublic static final String KEY_CALLER_UID =(VERSION.SDK_INT>=VERSION_CODES.HONEYCOMB) ?AccountManager.KEY_CALLER_UID : "callerUid";public static final String KEY_CALLER_PID =(VERSION.SDK_INT>=VERSION_CODES.HONEYCOMB) ?AccountManager.KEY_CALLER_PID : "callerPid";if (options == null)return errorDenied();int pid = options.getInt(KEY_CALLER_PID);int uid = options.getInt(KEY_CALLER_UID);if (mContext.checkPermission(PERMISSION, pid, uid) ==PackageManager.PERMISSION_DENIED)return errorDenied();}
  26. 26. 26Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEUn scénario possible
  27. 27. 27Enrôlement de quelques centaines de terminauxGestion des CDDGestion d’oubli des terminauxGrande facilité et souplesse de déploiement sans sacrifier lasécuritéL’expérience utilisateur doit être la plus simple possible !Contraintes de sécurité : un certificat pour un tripletEmployéTéléphone (IMEI)SIMObjectif de la mission
  28. 28. 28Enregistrement des triplets dans le SIL’utilisateur saisi son identifiant sur leterminalC’est tout !Il récupère son certificat (clés privée etpublique)Il est protégé et partagé dans le terminalNotre approche
  29. 29. 29Requête vers le serveur avec l’identité de l’utilisateurLe serveur génère le certificat et le chiffre avec <IMEI> +<random><random> est envoyé par SMSLe téléphone capable de déchiffrer prouve son identité (le tripletest résolu)Processus d’enrôlement
  30. 30. 30Expérience utilisateur simpleSeulement 2 écrans
  31. 31. 31La durée de vie du certificat peut être courte (CDD)Facilité de déploiementEn cas de vol, ajout du certificat client dans la CRLUn utilisateur peut avoir plusieurs devicesEn cas d’oubli, génération d’un certificat temporairePas chère !Adaptable à la dernière version de ChromeAvantages de la solution
  32. 32. 32Tél : +33 (0)1 58 56 10 00Fax : +33 (0)1 58 56 10 01www.octo.com© OCTO 201350, avenue des Champs-Elysées75008 Paris - FRANCEMerci ! Des question ?Philippe PradosAurélien RambauxG+ http://goo.gl/xljZSarambaux@octo.com
  33. 33. 33Technologies de sauvegardedes SecretsRemarquesSauvegarde dans le contexte delapplication.Les données ne sont pas chiffrées. Elles sontvulnérables au vol du téléphone.SE dans la carte à puce Inaccessible aux applicationsSE dans le terminal Inaccessible aux applicationsChiffrement du disque Non obligatoire. Ne protège pas de vulnérabilitésdes applications ou du téléphone allumé.KeyStore Conteneur sécurisé mais non officiel. Il peut êtremodifié dans les prochaines versions dAndroid.À ce jour, le meilleur endroit où sauver les secrets.KeyChain Gestion officielle de gestion des certificats clients.Non disponible avant lAPI 14. Nous proposonsune librairie de compatibilité pour les versionscomprise entre 7 et 14.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×