Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
AnDevCon IVSecuring User  Data with SQLCipher    Copyright © 2012 CommonsWare, LLC
Workshop Overview●   Who Is At Risk?●   Offense and Defense●   SQLCipher Integration●   SQLCipher: Hands On!●   Encrypting...
Who Is At Risk?●   The Clumsy    –   Leaving phones lie around    –   Some percentage get personal data lifted●   The Trav...
Who Is At Risk?●   The Freedom Fighter    –   Devices used for communication, coordination    –   Devices confiscated upon...
Who Is At Risk?●   The Citizen (of Repressive Regimes)    –   Arrests ranging from freedom of expression        (protest r...
Who Is At Risk?●   The Developer    –   Press reports of “plaintext” stuff on internal        storage    –   Negative publ...
Offense and Defense●   Defense: Lock Screen Security    –   Swipe: um, not really    –   Face: well, better than nothing  ...
Offense and Defense●   Offense: Exploits    –   Example: USB Debugging         ●   Create app that dismisses keyguard     ...
Offense and Defense●   Defense: Internal Storage    –   Read-write for app, deny-all for everyone else    –   User has no ...
Offense and Defense●   Offense: Rooting    –   Most devices can be rooted    –   Can run apps as root, with access to all ...
Offense and Defense●   Defense: Full-Disk Encryption    –   Entire internal storage bulk encrypted    –   Reboot locks dow...
Offense and Defense●   Offense: Exploits    –   Ineffective against many temporary root attacks    –   Weak full-disk encr...
Offense and Defense●   Defense: Cloud    –   Keep data off the device    –   Many Web sites and apps have decent defenses ...
Offense and Defense xkcd comics reproduced under CC license from Randall Munroe, despite Hat Guys best efforts.           ...
General Strategy●   Use Base Defenses    –   Lockscreen    –   Internal Storage    –   Full-Disk Encryption               ...
General Strategy●   Per-App Crypto    –   More flexible authentication models         ●   Help to mitigate “always enterin...
Introducing SQLCipher●   SQLCipher    –   Modified version of SQLite    –   AES-256 encryption by default, of all data    ...
Introducing SQLCipher●   SQLCipher Security    –   Customizable encryption algorithm         ●   Based on OpenSSL libcrypt...
Introducing SQLCipher●   SQLCipher for Android    –   NDK-compiled binaries    –   Drop-in replacement classes for Android...
Introducing SQLCipher●   SQLCipher for Android Limitations    –   Adds ~3MB to APK size per CPU architecture    –   x86 bi...
Introducing SQLCipher●   SQLCipher and Third Party Code    –   Typically should work for open source via fork         ●   ...
Integrating SQLCipher●   Step #1: Add to Project    –   Download ZIP file from:        https://github.com/sqlcipher/androi...
Integrating SQLCipher●   Step #2: Replace Import Statements    –   Eclipse         ●   Delete all android.database.* and  ...
Integrating SQLCipher●   Step #2: Replace Import Statements    –   Outside of Eclipse         ●   Replace all occurrences ...
Integrating SQLCipher●   Step #3: Supply Passphrases    –   SQLiteDatabase openOrCreateDatabase(),        etc.    –   SQLi...
Integrating SQLCipher●   Step #4: Testing    –   Tests should work when starting with a clean        install         ●   N...
Integrating SQLCipher●   Upgrading to Encryption    –   Open unencrypted original    –   Create and ATTACH new encrypted d...
SQLCipher: Hands On!●   Option #1: Tutorial    –   Materials on USB thumb drive    –   Step-by-step instructions (PDF)    ...
SQLCipher: Hands On!●   Option #2: Upgrade Your Own App    –   Use instructions, walkthrough as guide for applying        ...
SQLCipher: Hands On!●   Option #3: Return at 11:25am for more    exciting slides!    –   ...though we will all miss you......
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
SQLCipher: Hands On!●   Step #1: Getting Your Starting Point●   Step #2: Adding SQLCipher for Android●   Step #3: Adding a...
Encrypted SharedPreferences●   How They Are Normally Stored    –   Unencrypted XML files    –   Internal storage in shared...
Encrypted SharedPreferences●   Introducing CWSharedPreferences    –   Strategy-based pluggable storage model         ●   S...
Encrypted SharedPreferences●   Creating a SQLCipherStrategy    –   Supply name of preferences, passphrase, LoadPolicy     ...
Encrypted SharedPreferences●   Limitation: No PreferenceActivity    –   Hard-wired to use stock SharedPreferences●   Alter...
Encrypted Files●   Option #1: javax.crypto    –   Standard solution for Java for years    –   Plenty of online recipes    ...
Encrypted Files●   Option #2: SpongyCastle    –   Refactored version of BouncyCastle, to avoid VM        collisions       ...
Encrypted Files●   Future Option: IOCipher    –   Uses SQLCipher as a backing store for virtual        filesystem         ...
Passphrases●   Passphrase Entry Pain    –   Users do not like typing long passwords    –   Result = weaker quality    –   ...
Passphrasesxkcd comics reproduced under CC license from Randall Munroe, even though Hat Guy owns a $5 wrench              ...
Passphrasesxkcd comics reproduced under CC license from Randall Munroe, but BYO talking horse                Copyright © 2...
Passphrases●   Multi-Factor Authentication    –   Passphrase generated in code from user-        supplied pieces    –   Or...
Passphrases●   Multi-Factor Authentication Objectives    –   Longer passphrase without as much user input    –   Help defe...
Passphrasesxkcd comics reproduced under CC license from Randall Munroe. Hat Guy is not amused.                 Copyright ©...
Passphrases●   Multi-Factor Authentication Sources    –   NFC tag    –   QR code    –   Paired Bluetooth device    –   Wea...
Passphrases●   Password Managers    –   Some offer APIs (e.g., OI Password Safe)    –   Benefit         ●   Easier: user d...
Passphrases●   Changing SQLCipher Password    –   PRAGMA rekey = new passphrase;    –   Requires access to database with e...
Encrypted Communications●   BackupManager    –   No control over exactly where this data is sent         ●   Could be repl...
Encrypted Communications●   GCM and C2DM    –   Data is encrypted during transmission    –   Data is not encrypted at Goog...
Encrypted Communications●   SSL: Basics    –   Use https:// URLs with URL or HttpClient    –   Use normally    –   Pray th...
Encrypted Communications●   SSL Attack: Hack the CA    –   Comodo, DigiNotar, etc.    –   Forged certificates claiming to ...
Encrypted Communications●   SSL Defense #1: Avoid CAs    –   CAs are needed for general-purpose clients (e.g.,        Web ...
Encrypted Communications●   SSL Defense #2: Pinning    –   Assumes that you need to use a CA for some        reason (e.g.,...
Encrypted Communications●   SSL Defense #3: User Validation    –   Assume that attacks are infrequent    –   Alert user wh...
Encrypted Communications●   OnionKit    –   StrongTrustManager         ●   Customized set of CAs based on Debian cacerts f...
Summary●   Consider Encryption    –   ...even if you dont think you need it●   SQLCipher: Easiest Option for Encrypted    ...
Upcoming SlideShare
Loading in …5
×

Securing User Data with SQLCipher

7,182 views

Published on

from AnDevCon IV conference

Published in: Technology

Securing User Data with SQLCipher

  1. 1. AnDevCon IVSecuring User Data with SQLCipher Copyright © 2012 CommonsWare, LLC
  2. 2. Workshop Overview● Who Is At Risk?● Offense and Defense● SQLCipher Integration● SQLCipher: Hands On!● Encrypting SharedPreferences & Files● Passphrases● Encrypted Communications Copyright © 2012 CommonsWare, LLC
  3. 3. Who Is At Risk?● The Clumsy – Leaving phones lie around – Some percentage get personal data lifted● The Traveler – Spear-fishing attack on a specific business – Corporate espionage or just garden-variety theft Copyright © 2012 CommonsWare, LLC
  4. 4. Who Is At Risk?● The Freedom Fighter – Devices used for communication, coordination – Devices confiscated upon arrest● The Terrorist – Devices used for communication, coordination – Devices confiscated upon arrest Copyright © 2012 CommonsWare, LLC
  5. 5. Who Is At Risk?● The Citizen (of Repressive Regimes) – Arrests ranging from freedom of expression (protest rallies) to “just because” (race, religion, etc.)● The User – May fall into any of the above categories – Even for apps not normally thought of as requiring such security Copyright © 2012 CommonsWare, LLC
  6. 6. Who Is At Risk?● The Developer – Press reports of “plaintext” stuff on internal storage – Negative publicity leads to negative reputation Copyright © 2012 CommonsWare, LLC
  7. 7. Offense and Defense● Defense: Lock Screen Security – Swipe: um, not really – Face: well, better than nothing – PIN: were getting somewhere – Password: secure! ● Right? Copyright © 2012 CommonsWare, LLC
  8. 8. Offense and Defense● Offense: Exploits – Example: USB Debugging ● Create app that dismisses keyguard ● Run via USB cable and adb shell am ● Net: bypass lock screen regardless of security settings ● (according to Google: not a bug) Copyright © 2012 CommonsWare, LLC
  9. 9. Offense and Defense● Defense: Internal Storage – Read-write for app, deny-all for everyone else – User has no direct access via USB cable – Net: only way to get at the data is via the app! ● Right? Copyright © 2012 CommonsWare, LLC
  10. 10. Offense and Defense● Offense: Rooting – Most devices can be rooted – Can run apps as root, with access to all parts of internal storage – Run a file manager, copy off whatever is desired ● Or write an app that bulk-copies entire internal storage for later analysis Copyright © 2012 CommonsWare, LLC
  11. 11. Offense and Defense● Defense: Full-Disk Encryption – Entire internal storage bulk encrypted – Reboot locks down device, requiring manual entry of password – Many root attacks require a reboot – Net: only way to get at data is via encryption password! ● Right? Copyright © 2012 CommonsWare, LLC
  12. 12. Offense and Defense● Offense: Exploits – Ineffective against many temporary root attacks – Weak full-disk encryption passwords ● Same as lock screen for most devices ● Can be brute-forced – Assumes users know of, apply full-disk encryption ● Not offered during initial setup Copyright © 2012 CommonsWare, LLC
  13. 13. Offense and Defense● Defense: Cloud – Keep data off the device – Many Web sites and apps have decent defenses against brute-forcing attacks – So long as user is willing to enter password every time, the data is secure! ● Right? Copyright © 2012 CommonsWare, LLC
  14. 14. Offense and Defense xkcd comics reproduced under CC license from Randall Munroe, despite Hat Guys best efforts. Copyright © 2012 CommonsWare, LLC
  15. 15. General Strategy● Use Base Defenses – Lockscreen – Internal Storage – Full-Disk Encryption Copyright © 2012 CommonsWare, LLC
  16. 16. General Strategy● Per-App Crypto – More flexible authentication models ● Help to mitigate “always entering password” problem – Containers with better brute-force resistance – Storage Models ● Database ● SharedPreferences ● General files Copyright © 2012 CommonsWare, LLC
  17. 17. Introducing SQLCipher● SQLCipher – Modified version of SQLite – AES-256 encryption by default, of all data – Relatively low overhead – Cross-platform – BSD license Copyright © 2012 CommonsWare, LLC
  18. 18. Introducing SQLCipher● SQLCipher Security – Customizable encryption algorithm ● Based on OpenSSL libcrypto – Individual pages encrypted, with own initialization vector – Message authentication code (MAC) per page, to detect tampering – Hashed passphrase (PBKDF2) for key Xkcd comics reproduced under CC license from Randall Munroe. Hat guy is not impressed. Copyright © 2012 CommonsWare, LLC
  19. 19. Introducing SQLCipher● SQLCipher for Android – NDK-compiled binaries – Drop-in replacement classes for Androids SQLite classes ● SQLiteDatabase ● SQLiteOpenHelper ● Etc. Copyright © 2012 CommonsWare, LLC
  20. 20. Introducing SQLCipher● SQLCipher for Android Limitations – Adds ~3MB to APK size per CPU architecture – x86 binaries not available for public download right now ● Must build them yourself, versus downloading ARM binaries ● Available for this workshop! Copyright © 2012 CommonsWare, LLC
  21. 21. Introducing SQLCipher● SQLCipher and Third Party Code – Typically should work for open source via fork ● Replace their references to SQLite classes the same way you would replace your references ● Find way to pass in passphrase ● Either package as separate JAR or blend their source into your project as needed ● Examples: ORMLite, SQLiteAssetHelper Copyright © 2012 CommonsWare, LLC
  22. 22. Integrating SQLCipher● Step #1: Add to Project – Download ZIP file from: https://github.com/sqlcipher/android-database-sqlcipher – Copy ZIPs assets/ into projects assets/ – Copy ZIPs libs/ into projects libs/ Copyright © 2012 CommonsWare, LLC
  23. 23. Integrating SQLCipher● Step #2: Replace Import Statements – Eclipse ● Delete all android.database.* and android.database.sqlite.* imports ● Use Ctrl-Shift-O and choose the net.sqlcipher equivalents Copyright © 2012 CommonsWare, LLC
  24. 24. Integrating SQLCipher● Step #2: Replace Import Statements – Outside of Eclipse ● Replace all occurrences of android.database with net.sqlcipher, revert back as needed ● Replace all occurrences of android.database.sqlite with net.sqlcipher.database Copyright © 2012 CommonsWare, LLC
  25. 25. Integrating SQLCipher● Step #3: Supply Passphrases – SQLiteDatabase openOrCreateDatabase(), etc. – SQLiteOpenHelper getReadableDatabase() and getWritableDatabase() – Collect passphrase from user via your own UI Copyright © 2012 CommonsWare, LLC
  26. 26. Integrating SQLCipher● Step #4: Testing – Tests should work when starting with a clean install ● No existing unencrypted database● Step #5: Beer! – Hooray, beer! Copyright © 2012 CommonsWare, LLC
  27. 27. Integrating SQLCipher● Upgrading to Encryption – Open unencrypted original – Create and ATTACH new encrypted database – sqlcipher_export() – Save schema version from old database – DETACH and close databases – Open encrypted database and set schema version Copyright © 2012 CommonsWare, LLC
  28. 28. SQLCipher: Hands On!● Option #1: Tutorial – Materials on USB thumb drive – Step-by-step instructions (PDF) – Live walkthrough of all steps ● Designed to supplement instructions – Goal: add SQLCipher to an existing Android app, including handling the database upgrade Copyright © 2012 CommonsWare, LLC
  29. 29. SQLCipher: Hands On!● Option #2: Upgrade Your Own App – Use instructions, walkthrough as guide for applying similar changes to your own code ● Warning: tutorial probably smaller than your app!● Support – Ask questions of presenter, who will be up front or wandering around aimlessly between walkthrough sections Copyright © 2012 CommonsWare, LLC
  30. 30. SQLCipher: Hands On!● Option #3: Return at 11:25am for more exciting slides! – ...though we will all miss you... Copyright © 2012 CommonsWare, LLC
  31. 31. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  32. 32. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  33. 33. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  34. 34. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  35. 35. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  36. 36. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  37. 37. SQLCipher: Hands On!● Step #1: Getting Your Starting Point● Step #2: Adding SQLCipher for Android● Step #3: Adding a New Launcher Activity● Step #4: Collect Passphrase For New Encryption● Step #5: Create or Encrypt the Database● Step #6: Collect Passphrase For Decryption Copyright © 2012 CommonsWare, LLC
  38. 38. Encrypted SharedPreferences● How They Are Normally Stored – Unencrypted XML files – Internal storage in shared_prefs/ directory ● Peer to your databases/, files/ directories ● Precise root path may vary, especially on Android 4.2 with multiple accounts Copyright © 2012 CommonsWare, LLC
  39. 39. Encrypted SharedPreferences● Introducing CWSharedPreferences – Strategy-based pluggable storage model ● SQLite ● SQLCipher ● Others as you wish via interfaces – Implements SharedPreferences ● Manual preference-using code requires no changes once you have your SharedPreferences object Copyright © 2012 CommonsWare, LLC
  40. 40. Encrypted SharedPreferences● Creating a SQLCipherStrategy – Supply name of preferences, passphrase, LoadPolicy ● LoadPolicy.SYNC: loads on main application thread ● LoadPolicy.ASYNC_BLOCK: loads in background thread, blocks if you try using them before loaded ● LoadPolicy.ASYNC_EXCEPTION: loads in background thread, raises exception if you try using them before loaded● Test Case Walkthrough Copyright © 2012 CommonsWare, LLC
  41. 41. Encrypted SharedPreferences● Limitation: No PreferenceActivity – Hard-wired to use stock SharedPreferences● Alternative: Encrypt at GUI Level – Custom Preference classes with encryption, decryption logic, also available for use outside of preference UI – Requires more manual fussing with encryption – Encrypts values, perhaps not keys Copyright © 2012 CommonsWare, LLC
  42. 42. Encrypted Files● Option #1: javax.crypto – Standard solution for Java for years – Plenty of online recipes – Search StackOverflow for Android-specific idiosyncrasies Copyright © 2012 CommonsWare, LLC
  43. 43. Encrypted Files● Option #2: SpongyCastle – Refactored version of BouncyCastle, to avoid VM collisions ● Androids javax.crypto based on BouncyCastle, but with somewhat hacked version – Fairly popular, probably less likely to run into Android-specific headaches Copyright © 2012 CommonsWare, LLC
  44. 44. Encrypted Files● Future Option: IOCipher – Uses SQLCipher as a backing store for virtual filesystem ● You work with drop-in replacement File class that stores, reads “files” as BLOBs from database – Benefits: less work, benefits of SQLCipher container – Pre-alpha Copyright © 2012 CommonsWare, LLC
  45. 45. Passphrases● Passphrase Entry Pain – Users do not like typing long passwords – Result = weaker quality – Option: “diceware” ● Choose ~5 words from stock list ● Can offer scrolling lists, auto-complete to help speed data entry ● Downside: more annoying for accessibility Copyright © 2012 CommonsWare, LLC
  46. 46. Passphrasesxkcd comics reproduced under CC license from Randall Munroe, even though Hat Guy owns a $5 wrench Copyright © 2012 CommonsWare, LLC
  47. 47. Passphrasesxkcd comics reproduced under CC license from Randall Munroe, but BYO talking horse Copyright © 2012 CommonsWare, LLC
  48. 48. Passphrases● Multi-Factor Authentication – Passphrase generated in code from user- supplied pieces – Organization options ● Simple concatenation ● Concatenation with factor prefix, un-typeable divider characters Copyright © 2012 CommonsWare, LLC
  49. 49. Passphrases● Multi-Factor Authentication Objectives – Longer passphrase without as much user input – Help defeat casual attacks ● Need all factors to access via your UI ● Otherwise, need to brute-force Copyright © 2012 CommonsWare, LLC
  50. 50. Passphrasesxkcd comics reproduced under CC license from Randall Munroe. Hat Guy is not amused. Copyright © 2012 CommonsWare, LLC
  51. 51. Passphrases● Multi-Factor Authentication Sources – NFC tag – QR code – Paired Bluetooth device – Wearable app – Gesture (e.g., pattern lock) – Biometrics (e.g., fingerprint scanner) Copyright © 2012 CommonsWare, LLC
  52. 52. Passphrases● Password Managers – Some offer APIs (e.g., OI Password Safe) – Benefit ● Easier: user does not have to remember as many passphrases – Downside ● Reliant upon third-party app and its security Copyright © 2012 CommonsWare, LLC
  53. 53. Passphrases● Changing SQLCipher Password – PRAGMA rekey = new passphrase; – Requires access to database with existing key – Execution time proportional to database size ● Background thread, please! Copyright © 2012 CommonsWare, LLC
  54. 54. Encrypted Communications● BackupManager – No control over exactly where this data is sent ● Could be replaced by device manufacturers, carriers – Ideally, all data backed up should be encrypted with user passphrase ● Either because that data is always encrypted, or encrypt especially for backup/restore ● No sense in using static passphrase, as can be reverse-engineered Copyright © 2012 CommonsWare, LLC
  55. 55. Encrypted Communications● GCM and C2DM – Data is encrypted during transmission – Data is not encrypted at Googles servers – Options ● Encrypt the message payloads ● Message payloads are pointers to encrypted data held elsewhere Copyright © 2012 CommonsWare, LLC
  56. 56. Encrypted Communications● SSL: Basics – Use https:// URLs with URL or HttpClient – Use normally – Pray that your certificates are installed ● Self-signed certs ● Unusual certificate authorities ● Varying certificate authorities – http://goo.gl/8anF9 Copyright © 2012 CommonsWare, LLC
  57. 57. Encrypted Communications● SSL Attack: Hack the CA – Comodo, DigiNotar, etc. – Forged certificates claiming to be Google, Mozilla, Microsoft, etc. – “When an attacker obtains a fraudulent certificate, he can use it to eavesdrop on the traffic between a user and a website even while the user believes that the connection is secure.” Copyright © 2012 CommonsWare, LLC
  58. 58. Encrypted Communications● SSL Defense #1: Avoid CAs – CAs are needed for general-purpose clients (e.g., Web browsers) – If you control front end (app) and back end (Web service), use private SSL certificates that can be verified by the app itself – Moxie Marlinspike Implementation ● http://goo.gl/DYTrb ● See Option 1 Copyright © 2012 CommonsWare, LLC
  59. 59. Encrypted Communications● SSL Defense #2: Pinning – Assumes that you need to use a CA for some reason (e.g., Web site + Web service) – Validates issuing CA ● Rather than the certificate itself ● Limits attacks to ones where your CA gets hacked – Moxie Marlinspike Implementation ● http://goo.gl/DYTrb ● See Option 2 Copyright © 2012 CommonsWare, LLC
  60. 60. Encrypted Communications● SSL Defense #3: User Validation – Assume that attacks are infrequent – Alert user when you see a different certificate than used before ● May indicate a MITM attack – https://github.com/ge0rg/MemorizingTrustManager/wiki ● Implementation of trust store and UI Copyright © 2012 CommonsWare, LLC
  61. 61. Encrypted Communications● OnionKit – StrongTrustManager ● Customized set of CAs based on Debian cacerts file ● Full chain verification ● Limited pinning – Proxying through Orbot ● Tor implementation for Android – https://github.com/guardianproject/OnionKit Copyright © 2012 CommonsWare, LLC
  62. 62. Summary● Consider Encryption – ...even if you dont think you need it● SQLCipher: Easiest Option for Encrypted Database – ...if you can live with the APK footprint● Think About Encrypting Other Data Stores, Means of Collecting Passphrases● Q&A Copyright © 2012 CommonsWare, LLC

×