Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Seguridad y encriptación: En el mundo de Android

Seguridad y encriptación: En el mundo de Android

Dinorah Tovar

January 31, 2020
Tweet

More Decks by Dinorah Tovar

Other Decks in Technology

Transcript

  1. Seguridad y encriptación En el mundo de Android Dinorah Tovar

    Lead Mobile Engineer @ddinorahtovar @ddinorahtovar @dinorahto @dinorahto Doing code @ Konfio
  2. Seguridad en Android • En el 2018 Android obtuvo 0

    critical security vulnerabilities • El 84% de los dispositivos tuvieron updates de parches de seguridad, asegurándonos que nuestros dispositivos están libres de posibles bugs • En el futuro, deberíamos buscar Privacidad, Actualizaciones y Endurecimiento
  3. Encriptación y Android Es el proceso de codificación de la

    información de un usuario en un dispositivo Android, usando llaves simétricas
  4. Llaves, paddings, modos…? •Existen muchos tipos de estándares como:
 Advanced

    Encryption Standard (AES)
 Rivest–Shamir–Adleman (RSA) •Modos de operación para llaves simétricas y no simétricas •Paddings para encriptar data larga y corta
  5. Pero mi data esta encriptada? •Hardware acceleration •Android Version <application

    android:name=".YourApp" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:hardwareAccelerated="true"/>
  6. Jetpack Security • Mejores practicas, relacionadas a la escritura y

    lectura de data segura, al igual que manejo de llaves dependencies { implementation “androidx.security:security-crypto:1.0.0-beta01" }
  7. Jetpack Security • Mejores practicas, relacionadas a la escritura y

    lectura de data segura, al igual que manejo de llaves dependencies { implementation “androidx.security:security-crypto:1.0.0-beta01" }
  8. Key Management val spec = KeyGenParameterSpec.Builder( KEY_NAME, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT

    ).apply { setBlockModes(KeyProperties.BLOCK_MODE_CBC) setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) setUserAuthenticationRequired(true) setUserAuthenticationValidityDurationSeconds(TIMEOUT_SECONDS) setRandomizedEncryptionRequired(false) }.build()
  9. Key Management val spec = KeyGenParameterSpec.Builder( KEY_NAME, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT

    ).apply { setBlockModes(KeyProperties.BLOCK_MODE_CBC) setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) setUserAuthenticationRequired(true) setUserAuthenticationValidityDurationSeconds(TIMEOUT_SECONDS) setRandomizedEncryptionRequired(false) }.build()
  10. Key Management //Out of the box, without magic tricks val

    masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
  11. Key Management val spec = KeyGenParameterSpec.Builder( KEY_NAME, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT

    ).apply { setBlockModes(KeyProperties.BLOCK_MODE_CBC) setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) setUserAuthenticationRequired(true) setUserAuthenticationValidityDurationSeconds(TIMEOUT_SECONDS) setRandomizedEncryptionRequired(false) }.build()
  12. Key Management //Out of the box, without magic tricks val

    masterKeyAlias = MasterKeys.getOrCreate(spec)
  13. Biometric Prompt • Necesitamos un método de autenticación para usar

    MasterKey por ejemplo, biometric prompt dependencies { implementation “androidx.biometric:biometric:1.0.0-alpha03" }
  14. Biometric Prompt • Necesitamos un método de autenticación para usar

    MasterKey por ejemplo, biometric prompt dependencies { implementation “androidx.biometric:biometric:1.0.0-alpha03" }
  15. Biometric Prompt val promptInfo = BiometricPrompt.PromptInfo .Builder().apply { setTitle(“Titulo bonito")

    setDescription(“Descripción bonita”) setDeviceCredentialAllowed(true) }.build()
  16. Biometric Prompt BiometricPrompt(activity, executor, object : BiometricPrompt.AuthenticationCallback() { override fun

    onAuthenticationError(errorCode: Int, errString: CharSequence) { super.onAuthenticationError(errorCode, errString) } override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { super.onAuthenticationSucceeded(result) } override fun onAuthenticationFailed() { super.onAuthenticationFailed() } })
  17. Shared-preferences encriptados • Encriptando las keys y los values, por

    que a veces guardamos las cosas como: val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putString("Llave del servidor de mi empresa", superUltraPrivateKey) commit() }
  18. En camino al futuro • Support para Kit Kat •Rotation

    Keys •ALPHA, necesitamos un Release Candidate
  19. Seguridad y encriptación En el mundo de Android Dinorah Tovar

    Mobile Engineer @ddinorahtovar @ddinorahtovar @dinorahto @dinorahto Doing code @ Konfio