A secure, offline mobile application for storing Ethereum private keys and signing transactions. This app is designed to work completely offline with no network access, ensuring maximum security for your private keys.
You can use the Ethereum Transaction Tools repo to generate and read transactions in QR code format.
- 🔐 Secure Key Storage: Uses device keystore/keychain for maximum security
- 📱 Cross-Platform: Supports Android 9+ and iOS
- 🔒 Completely Offline: No network access required or allowed
- 🚫 No Tracking: Zero analytics, logging, or data collection
- 📷 QR Code Support: Scan QR codes for private keys and transactions
- ✅ Transaction Signing: Sign Ethereum transactions with RLP encoding
- 📱 Modern UI: Clean and intuitive mobile interface
- Hardware-backed key storage (when available)
- Encrypted secure storage using platform APIs
- No debug logging or crash reporting
- Memory cleared after sensitive operations
- Input validation and sanitization
- Secure random number generation
- Flutter SDK (latest stable version)
- Android Studio / Xcode for mobile development
- A physical device (recommended for security testing)
- Clone the repository:
git clone <repository-url>
cd air-gapped-mobile-vault- Install dependencies:
flutter pub get- Run the app:
flutter run- Manual Entry: Navigate to Key Management → Import Private Key
- QR Code: Use the QR scanner to import keys from QR codes
- Scan a QR code containing an unsigned RLP-encoded Ethereum transaction
- Review the transaction details carefully
- Select the private key to use for signing
- Confirm and sign the transaction
- Generate a QR code with the signed transaction for broadcasting
- Always verify transaction details before signing
- Keep your device secure with PIN/biometric authentication
- Never share your private keys or QR codes
- Use this app on a dedicated offline device when possible
- Regularly backup your private keys securely
The app follows clean architecture principles with:
- Services: Core business logic and external integrations
- Models: Data structures for Ethereum transactions
- Screens: UI components and user interaction
- Widgets: Reusable UI components
- Theme: Consistent styling throughout the app
Key libraries used:
flutter_secure_storage: Secure key storageweb3dart: Ethereum transaction handlingqr_code_scanner: QR code scanningqr_flutter: QR code generationpointycastle: Cryptographic operationspermission_handler: Camera permissions
The app supports all Ethereum networks including:
- Ethereum Mainnet
- Testnets (Goerli, Sepolia)
- Layer 2 networks (Polygon, BSC)
- Custom networks (via chain ID)
This app:
- ❌ Does NOT collect any personal data
- ❌ Does NOT use analytics or tracking
- ❌ Does NOT connect to the internet
- ❌ Does NOT store data in the cloud
- ✅ Stores all data locally in encrypted format
- ✅ Uses hardware security features when available
- This app is designed for offline use on secure devices
- Private keys are stored in the device's secure enclave/keystore
- Always verify you're running an authentic version of the app
- Consider using on a dedicated offline device for maximum security
- Keep your device updated with latest security patches
# Android
flutter build apk --release
# iOS
flutter build ios --releaseflutter testThis project prioritizes security and privacy. When contributing:
- Follow security best practices
- No network-related dependencies
- Maintain offline-only functionality
- Add tests for security-critical code
- Document security implications
This project is licensed under the MIT License - see the LICENSE file for details.
This software is provided "as is" without warranty. Users are responsible for:
- Securing their devices and private keys
- Verifying transaction details before signing
- Maintaining backups of their private keys
- Understanding the risks of cryptocurrency transactions
Always test with small amounts first and never invest more than you can afford to lose.