Get a Pentest and security assessment of your IT network.

Cyber Security

App Data Encryption Without Passwords

TL;DR

Yes, an iOS/Android app can encrypt data without requiring a user-entered password, but it’s not as secure. It relies on device security features like biometrics (fingerprint, face ID) or the device’s keychain/keystore. This protects data if the device is lost or stolen, but doesn’t protect against someone with access to the device itself.

How it Works

  1. Key Generation & Storage: The app generates a strong encryption key when the user first installs/uses the app. This key isn’t stored in plain text.
    • iOS (Keychain): Use the Keychain to securely store the encryption key. The Keychain is managed by iOS and protected by device passcode, Touch ID or Face ID.
    • Android (Keystore System): Use the Android Keystore system. This stores cryptographic keys in hardware-backed storage if available, also protected by the user’s screen lock (PIN, pattern, password, fingerprint).
  2. Encryption: When data needs to be saved, the app uses the key retrieved from Keychain/Keystore to encrypt it. Common encryption algorithms include AES (Advanced Encryption Standard).
    // Example - Simplified AES Encryption in Java (Android)
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encryptedBytes = cipher.doFinal(dataToEncrypt);
    
  3. Decryption: When data needs to be read, the app retrieves the same key from Keychain/Keystore and uses it to decrypt the data.
    // Example - Simplified AES Decryption in Java (Android)
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] decryptedBytes = cipher.doFinal(encryptedData);
    
  4. Access Control: The Keychain/Keystore automatically handles access control based on device security settings.
    • If the user unlocks their device (using passcode, fingerprint etc.), the key can be accessed.
    • If the device is locked, the key remains inaccessible.

Step-by-Step Implementation

  1. Choose an Encryption Library: Select a well-vetted encryption library for your platform (e.g., CryptoSwift for iOS, Tink for Android). These libraries handle the complexities of key generation and algorithm implementation.
  2. Generate a Unique Key: Generate a strong, random encryption key when the app is first launched or during initial setup.
  3. Store the Key Securely:
    • iOS: Use the Keychain API to store the key with appropriate access control settings. Consider using tags and attributes for easy retrieval.
      // Example (Swift) - Storing in Keychain
      let keychainItem = SecKeyItem(keyData: key, label: "MyAppEncryptionKey", accessibility: .whenUnlocked)
      SecItemAdd(keychainItem, nil)
      
    • Android: Use the KeyStore API to generate and store a cryptographic key. Specify hardware-backed storage if available.
      // Example (Java) - Storing in Keystore
      KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder("MyAppEncryptionKey", KeyProperties.KEY_ALGORITHM_AES, KeyProperties.BLOCK_MODE_CBC, KeyProperties.ENCRYPTION_PADDING_PKCS7, KeyProperties.PURPOSE_ENCRYPT_DECRYPT) .build();
      keyStore.generateKey(spec);
      
  4. Encrypt Data Before Storage: Encrypt all sensitive data before saving it to local storage (e.g., files, databases).
  5. Decrypt Data After Retrieval: Decrypt the data immediately after retrieving it from storage.
  6. Handle Key Access Errors: Implement robust error handling for situations where the key cannot be accessed (e.g., device locked, incorrect passcode). Display a user-friendly message and prevent access to sensitive data.

Important Considerations

  • Security Limitations: This method is only as secure as the device itself. If an attacker gains physical access to the unlocked device, they may be able to bypass encryption.
  • Key Backup: Consider whether key backup is necessary (e.g., iCloud Keychain for iOS). Backups can improve data recovery but also introduce security risks if compromised.
  • Regular Key Rotation: Periodically rotate the encryption key to minimize the impact of potential compromises.
  • Data Wiping: Implement a secure data wiping mechanism that removes all sensitive data when the app is uninstalled or the user logs out.
Related posts
Cyber Security

Zip Codes & PII: Are They Personal Data?

Cyber Security

Zero-Day Vulnerabilities: User Defence Guide

Cyber Security

Zero Knowledge Voting with Trusted Server

Cyber Security

ZeroNet: 51% Attack Risks & Mitigation