Get a Pentest and security assessment of your IT network.

Cyber Security

Secure Phone App Logins

TL;DR

Storing passwords directly on a phone is risky. Use the device’s secure storage (Keychain on iOS, KeyStore on Android) to store an encrypted token instead of usernames and passwords. Implement multi-factor authentication for extra security.

1. Why Not Store Passwords Directly?

Phone devices are vulnerable to:

  • Malware: Viruses can steal data directly from the phone’s storage.
  • Physical Theft: Someone could access the device and its contents.
  • Data Breaches: Although less common, apps themselves can be compromised.

Storing passwords in plain text or even weakly encrypted formats is a major security risk.

2. Using Secure Storage (Keychain/KeyStore)

Both iOS and Android provide secure storage mechanisms:

  • iOS Keychain: A highly secure system for storing small pieces of data like passwords, certificates, and API keys.
  • Android KeyStore: Similar to Keychain, it provides a hardware-backed security module (if available) for cryptographic key storage.

Instead of saving usernames and passwords directly, store an encrypted token.

3. Token Generation & Encryption

  1. User Registration/Login: When a user registers or logs in, verify their credentials against your server-side database.
  2. Generate a Token: If authentication is successful, generate a unique token (e.g., using UUIDs). This token should have an expiry time.
  3. Encrypt the Token: Use a strong encryption algorithm (AES) with a key derived from the user’s password or biometric data (if available). Never store the encryption key directly in your app code! The Keychain/KeyStore will manage this for you.
  4. Store Encrypted Token: Save the encrypted token to the device’s secure storage.

Example (Conceptual – specific implementation varies by platform):

// Pseudo-code - Encryption example

4. Authentication Flow

  1. App Launch: Check if an encrypted token exists in secure storage.
  2. Decrypt Token: If a token is found, attempt to decrypt it using the Keychain/KeyStore.
  3. Token Validation: Send the decrypted token to your server for validation. The server should:

    • Check if the token exists in its database.
    • Verify that the token hasn’t expired.
    • Ensure the token hasn’t been revoked (e.g., user logged out on another device).
  4. Grant Access: If the server validates the token, grant access to the app. Otherwise, prompt the user for login credentials.

5. Multi-Factor Authentication (MFA)

Add an extra layer of security with MFA:

  • SMS Verification: Send a code to the user’s phone number during login.
  • Email Verification: Send a code to the user’s email address.
  • Authenticator App (TOTP): Use apps like Google Authenticator or Authy.
  • Biometric Authentication: Integrate fingerprint or facial recognition for unlocking the token and/or MFA.

MFA significantly reduces the risk of unauthorized access, even if a token is compromised.

6. Important Considerations

  • Key Rotation: Regularly rotate encryption keys to minimize the impact of potential key compromises.
  • Secure Communication (HTTPS): Always use HTTPS for all communication between your app and server.
  • Token Expiration: Set reasonable token expiration times. Shorter expiry times are more secure but require more frequent re-authentication.
  • Revocation: Implement a mechanism to revoke tokens when users log out or change their passwords.
  • Regular Security Audits: Conduct regular security audits of your app and server infrastructure.
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