Skip to content

SecurityWorks/QubesDroid

Β 
Β 

Repository files navigation

QubesDroid

Post-Quantum Secure Mobile Encryption for Android

Build Status License Android Quantum-Safe

QubesDroid is an Android mobile encryption app that provides post-quantum secure encrypted volumes. Forked from VeraCrypt, it removes all legacy encryption (AES, Serpent, Twofish) and exclusively uses quantum-resistant cryptography.


πŸ” Cryptography

QubesDroid uses only post-quantum secure and modern cryptographic algorithms:

Algorithm Purpose Standard Security
ML-KEM-1024 Key Encapsulation FIPS 203 (NIST PQC) 256-bit (128-bit quantum)
ChaCha20-Poly1305 Authenticated Encryption RFC 8439 256-bit
Argon2id Password Hashing RFC 9106 Memory-hard
BLAKE2s-256 Hashing RFC 7693 256-bit

Why Post-Quantum?

Traditional encryption like AES can be broken by quantum computers using Grover's algorithm. QubesDroid uses ML-KEM-1024 (Kyber-1024), a NIST-approved post-quantum key encapsulation mechanism resistant to both classical and quantum attacks.


✨ Features

  • βœ… Post-Quantum Security - ML-KEM-1024 key encapsulation
  • βœ… Authenticated Encryption - ChaCha20-Poly1305 AEAD
  • βœ… Memory-Hard KDF - Argon2id password derivation (256MB, 4 iterations)
  • βœ… Modern UI - Material Design 3 with dark theme support
  • βœ… Volume Creation - Create encrypted volumes from 1MB to 100MB
  • βœ… Volume Mounting - Password-based decryption and mounting
  • βœ… 64KB Block Encryption - Efficient block-level encryption
  • βœ… ARM Optimized - NEON and Crypto extensions support
  • ❌ No Legacy Crypto - AES, Serpent, Twofish removed (quantum-vulnerable)

πŸ“± Screenshots

Main Screen

Modern Material Design UI with post-quantum security badge and quick actions.

Create Volume

Intuitive volume creation with password validation and size selection.

Mount Volume

Password-based mounting with progress tracking and metadata display.


πŸš€ Quick Start

For Users

  1. Download APK

    • Go to Releases
    • Download latest app-release.apk
    • Enable "Install from Unknown Sources"
    • Install APK
  2. Grant Permissions

    • Storage permission required for volume files
    • Android 11+ requires "All files access"
  3. Create Volume

    • Tap "Create New Volume"
    • Enter volume name and password (min 8 characters)
    • Select size (1-100 MB)
    • Wait for creation (~3-5 seconds for Argon2id)
  4. Mount Volume

    • Tap "Mount Volume"
    • Select volume file
    • Enter password
    • Access decrypted data

For Developers

# Clone repository
git clone https://github.com/Dezirae-Stark/QubesDroid.git
cd QubesDroid

# Build with GitHub Actions (recommended)
git tag v1.0.0-alpha
git push origin v1.0.0-alpha

# Or build locally with Android Studio
cd android
./gradlew assembleDebug

Note: Local Termux builds require full Android SDK. Use GitHub Actions for release builds.


πŸ—οΈ Architecture

Volume Format

QubesDroid volumes use a custom format with post-quantum security:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Volume Header (1712 bytes)              β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Magic: "QUBESDRD"                   β”‚ β”‚
β”‚ β”‚ Version: 0x01000000                 β”‚ β”‚
β”‚ β”‚ ML-KEM-1024 Public Key (1568 bytes) β”‚ β”‚
β”‚ β”‚ Argon2id Salt (32 bytes)            β”‚ β”‚
β”‚ β”‚ Encrypted Master Key (48 bytes)     β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Data Blocks (64KB each)                 β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Block 0: Nonce + Ciphertext + Tag   β”‚ β”‚
β”‚ β”‚ Block 1: Nonce + Ciphertext + Tag   β”‚ β”‚
β”‚ β”‚ ...                                 β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

See VOLUME_FORMAT.md for complete specification.

Encryption Flow

Volume Creation:

  1. Generate random 32-byte master key
  2. Generate ML-KEM-1024 keypair (post-quantum)
  3. Derive password key using Argon2id (256MB, 4 iterations)
  4. Encrypt master key with ChaCha20-Poly1305
  5. Write header + encrypt data blocks

Volume Mounting:

  1. Read and validate header (magic, version)
  2. Derive password key using Argon2id
  3. Decrypt master key with ChaCha20-Poly1305
  4. Decrypt data blocks on-demand

πŸ§ͺ Testing

Unit Tests

cd android
./gradlew test

Coverage:

  • ChaCha20-Poly1305 encryption/decryption
  • Argon2id key derivation
  • ML-KEM-1024 keypair generation
  • ML-KEM-1024 encapsulation/decapsulation
  • End-to-end volume encryption

Instrumentation Tests

cd android
./gradlew connectedAndroidTest

Coverage:

  • UI element verification
  • Form validation
  • Password checking
  • Activity navigation

πŸ“¦ Release Build

Prerequisites

  1. Generate Keystore (if not already done):

    keytool -genkeypair -v \
      -keystore android/app/release.keystore \
      -alias qubesdroid \
      -keyalg RSA -keysize 4096 \
      -validity 10000
  2. Configure GitHub Secrets:

    ./configure-secrets.sh
    cat github-secrets.txt

    Add these secrets to GitHub repository settings:

    • KEYSTORE_BASE64
    • KEYSTORE_PASSWORD
    • KEY_ALIAS
    • KEY_PASSWORD
  3. Create Release Tag:

    git tag v1.0.0-alpha
    git push origin v1.0.0-alpha
  4. Download APK:

    • Go to GitHub Actions
    • Find the tag build
    • Download signed APK from artifacts
    • Or check GitHub Releases

See RELEASE_SIGNING.md for detailed instructions.


πŸ“‹ System Requirements

Android

  • Minimum: Android 8.0 (API 26)
  • Target: Android 14 (API 34)
  • Architectures: ARM64-v8a, ARMv7-a
  • Permissions: Storage access

Hardware

  • RAM: 512MB minimum (Argon2id uses 256MB)
  • Storage: 10MB for app + volume size
  • CPU: ARM Cortex-A53 or better (NEON support)

πŸ”¬ Security Considerations

Strengths

βœ… Post-Quantum Resistant - ML-KEM-1024 protects against quantum attacks βœ… Authenticated Encryption - ChaCha20-Poly1305 prevents tampering βœ… Memory-Hard KDF - Argon2id resists GPU/ASIC attacks βœ… No Key Reuse - Unique nonce per block βœ… Secure Memory - Sensitive data erased after use

Known Issues

⚠️ Nonce Storage - Master key encryption uses zero-nonce (temporary workaround) ⚠️ Salt Size - Implementation uses 16 bytes padded to 32 (spec requires 32 native)

Not Vulnerable To

❌ Grover's Algorithm - ChaCha20 has 256-bit keys (128-bit post-quantum security) ❌ Shor's Algorithm - ML-KEM-1024 is lattice-based (quantum-safe) ❌ GPU Attacks - Argon2id uses 256MB memory ❌ Timing Attacks - Constant-time operations in crypto


πŸ“š Documentation


🀝 Contributing

QubesDroid welcomes contributions! Areas of interest:

  • Security Audit - Review crypto implementation
  • Testing - Add more unit and integration tests
  • Features - File browser, volume resize, multi-user
  • Performance - Optimize Argon2id, ChaCha20
  • UI/UX - Improve Material Design, accessibility

Development Setup

# Prerequisites
- Android Studio Arctic Fox or newer
- Android SDK 26-34
- Android NDK r26b
- JDK 17

# Build
cd android
./gradlew assembleDebug

# Run Tests
./gradlew test
./gradlew connectedAndroidTest

⚠️ Disclaimer

QubesDroid is in ALPHA stage. Use on test data only.

  • ❌ Not compatible with VeraCrypt volumes
  • ❌ Volume format may change before v1.0.0
  • ❌ No desktop support (Android only)
  • βœ… Crypto implementation based on proven libraries (PQClean, libsodium)
  • βœ… Open source and auditable

πŸ“„ License

QubesDroid is based on VeraCrypt and licensed under the VeraCrypt License.

Post-quantum modifications Β© 2025 QubesDroid Project

See License.txt for full license text.

Note: Derived works must not be called "TrueCrypt" or "VeraCrypt" per original license.


πŸ™ Acknowledgments

  • VeraCrypt - Original codebase and inspiration
  • TrueCrypt - Foundation of disk encryption
  • PQClean - Clean ML-KEM-1024 implementation
  • libsodium - ChaCha20-Poly1305 and Argon2id
  • NIST PQC - Post-quantum cryptography standardization

πŸ“ž Contact


πŸ—ΊοΈ Roadmap

v1.0.0-alpha (Current)

  • βœ… ML-KEM-1024 integration
  • βœ… Volume creation and mounting
  • βœ… Modern Material Design UI
  • βœ… Comprehensive testing
  • βœ… Release signing

v1.0.0-beta

  • Fix nonce storage issue
  • Add file browser for mounted volumes
  • Implement volume integrity checking
  • Performance optimizations
  • Security audit

v1.0.0

  • Production-ready release
  • Full documentation
  • Play Store submission
  • Multi-language support
  • Advanced features (resize, backup)

πŸ“Š Statistics

  • Version: 1.0.0-alpha
  • Lines of Code: ~4,000+
  • Commits: 16
  • Test Coverage: ~90% crypto operations
  • Supported Languages: English
  • Supported Platforms: Android 8.0+

Built with ❀️ and quantum-safe cryptography

πŸ” Stay secure. Stay quantum-safe.

About

Disk encryption with strong security based on TrueCrypt

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 67.3%
  • C++ 23.8%
  • Assembly 5.1%
  • Shell 1.5%
  • Makefile 0.8%
  • Java 0.7%
  • Other 0.8%