Iron Dome - A secure CLI password manager with AES-256 encryption and zero-knowledge architecture
Project description
Fortified CLI Password Manager — AES-256 | Zero-Knowledge | Hardware-Bound
Quick Start • Features • Security • Developers • Contributing
Your passwords. Your machine. Your rules.
IronDome encrypts everything locally with AES-256, binds keys to your hardware, and operates on a zero-knowledge model — your master password is never stored. Nothing leaves your device. Ever.
Quick Start
pip install IronDome
bunker
On first launch, choose your security level:
- Biometric Only (Touch ID / Windows Hello / Fingerprint)
- Biometric + Master Password (two-factor)
- Master Password Only (traditional)
Two commands. You're protected.
Features
Security
|
Management
|
Biometric Authentication
IronDome integrates with the native biometric stack on each platform — no third-party biometric services, no data transmitted.
Supported Platforms
| Platform | Mechanism | Requirement |
|---|---|---|
| macOS | Touch ID (LocalAuthentication framework) | Touch ID sensor or Apple Watch |
| Windows | Windows Hello (PIN, fingerprint, face) | Windows Hello-compatible hardware |
| Linux | fprintd (fingerprint daemon) | Supported fingerprint reader + fprintd installed |
Biometric is optional. If hardware is unavailable, IronDome falls back to Master Password Only mode automatically.
Two Modes
Biometric Only — A cryptographically random vault key is generated at setup and stored in the OS credential store (Keychain on macOS, Windows Credential Manager, libsecret on Linux). Biometric proof unlocks the credential store; the vault key never touches disk unprotected.
Biometric + Master Password — Biometric is a gate, not the key. A successful biometric check permits password entry; PBKDF2 still derives the vault key from your master password. This is the higher-assurance mode — compromising biometrics alone is not sufficient to decrypt the vault.
Recovery Key
When you enroll biometrics, IronDome generates a one-time 24-word recovery phrase (BIP-39 format). Write it down and store it offline. It is the only way to recover the vault if biometric hardware fails or is replaced. IronDome does not store the recovery key.
Re-authentication
Session re-authentication for sensitive operations (delete, export, backup) uses the same method you enrolled with. If you enrolled with Biometric + Master Password, both factors are required for re-authentication.
How It Works
First Launch → Choose Security Level
├── Biometric Only → Touch ID / Face / Fingerprint
│ │
│ Random vault key generated
│ │
│ Stored in OS Keychain / Credential Store
│ │
│ Biometric proof unlocks key on each session
│
├── Biometric + Password → Biometric Gate (must pass)
│ │
│ Master Password entry
│ │
│ PBKDF2-HMAC-SHA256 (600k iterations)
│ │
│ Vault key derived — biometric alone is insufficient
│
└── Password Only → Username + Master Password
│
PBKDF2-HMAC-SHA256 (600k iterations)
│
Vault key derived (existing flow)
──────────────── common path ────────────────
┌─────────────────────────┐
│ Vault Key │
└───────────┬─────────────┘
│
┌──────────────┼──────────────┐
▼ ▼
┌────────────────────┐ ┌────────────────────┐
│ Machine-Specific │ │ User-Specific │
│ System Key │ │ Encryption Key │
│ (hardware-bound) │ │ (user+pass+salt) │
└────────┬───────────┘ └────────┬───────────┘
│ │
▼ ▼
┌────────────────────┐ ┌────────────────────┐
│ Encrypts master │ │ Encrypts password │
│ credentials │ │ database │
└────────────────────┘ └────────────────────┘
Usage
First-Time Setup
On first run, create your master account:
- Enter a master username (min 4 characters)
- Create a strong master password (min 8 characters)
- Confirm your master password
Main Menu
╔══════════════════════════════╗
║ === Password Manager === ║
║ Logged in as: nir ║
╠══════════════════════════════╣
║ 1. Generate a new password ║
║ 2. Save a password ║
║ 3. Find passwords ║
║ 4. List all websites ║
║ 5. Delete a password ║
║ 6. Create backup ║
║ 7. Show storage location ║
║ 8. Logout ║
║ 9. Exit ║
╚══════════════════════════════╝
Security Architecture
Encryption Layers
| Layer | Purpose | Scope |
|---|---|---|
| Machine-specific system key | Encrypts master credentials | Ties data to your hardware |
| User-specific encryption key | Encrypts password database | Requires both username + password |
Authentication Security
| Feature | Implementation |
|---|---|
| Brute force protection | Adaptive attempt limits with progressive lockout |
| Session management | Auto-timeout after 30 min inactivity |
| Sensitive operations | Require re-authentication |
| Device tracking | Per-device lockout with identifier tracking |
Cryptographic Stack
| Component | Implementation |
|---|---|
| Symmetric Encryption | AES-256-CBC + PKCS7 padding (Fernet) |
| Key Derivation | PBKDF2HMAC-SHA256, 600k iterations |
| Password Hashing | PBKDF2-HMAC-SHA256 + unique salt |
| Random Generation | Python secrets (CSPRNG) |
Data Storage
~/.password_manager/
├── password_manager.log # Non-sensitive log
├── backups/
│ └── .passwords_backup_*.enc # Encrypted backups
└── secrets/ # Restricted (0o700)
├── .passwords.enc # Encrypted password DB
├── salt.bin # Key derivation salt
├── .master_user.enc # Encrypted master user
├── .master_hash.enc # Encrypted master hash
└── .login_attempts.dat # Lockout tracking
Password Strength Scoring
Excellent ██████████████████████████████ 80+
Very Strong ████████████████████████░░░░░░ 60-79
Strong ██████████████████░░░░░░░░░░░░ 40-59
Medium ████████████░░░░░░░░░░░░░░░░░░ 25-39
Weak ██████░░░░░░░░░░░░░░░░░░░░░░░░ <25
For Developers
Clone & Run from Source
git clone https://github.com/TheKingHippopotamus/IronDome-Bunker.git
cd IronDome-Bunker
pip install -r requirements.txt
python -m password_manager
Project Structure
password_manager/
├── __init__.py # Package init + version
├── __main__.py # Entry point
├── manager.py # Main SecurePasswordManager class
├── auth.py # Authentication & master account
├── encryption.py # Encryption utilities
├── session.py # Session management & timeout
├── storage.py # File storage operations
├── generator.py # Password generation
├── utils.py # Utility functions
├── logger.py # Logging setup
└── constants.py # Constants & configuration
Contributing
We welcome contributions! Please read:
- CONTRIBUTING.md — development guidelines and PR process
- CODE_OF_CONDUCT.md — community standards
- SECURITY.md — vulnerability reporting
Requirements
- Python 3.8+
cryptographylibrarykeyringlibrary (biometric / OS credential store integration)- Windows, macOS, or Linux
Optional — platform biometric support:
- macOS:
pyobjc-framework-LocalAuthentication(Touch ID hardware required) - Windows: Windows Hello is accessed via the native WinRT API — no extra package
- Linux:
fprintdsystem daemon + a supported fingerprint reader
License
GNU General Public License v3.0
- Attribution — credit the original author
- Share Source — distribute source with binaries
- Same License — derivatives must use GPL-3.0
- State Changes — indicate modifications
Created & maintained by King Hippopotamus
Built with security in mind. No data leaves your machine. Ever.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file irondome-2.1.1.tar.gz.
File metadata
- Download URL: irondome-2.1.1.tar.gz
- Upload date:
- Size: 43.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63ff1047d0d54e880272489654cfdf890ed4549be5cc4e4bbbeb6fc38149cd07
|
|
| MD5 |
7fe3ceeeaa54320e39b986b4cf386e49
|
|
| BLAKE2b-256 |
a0fa93b9b120bb38dc2e186bffd71f80466eec0b83c0c67e4eafa555eabb2756
|
Provenance
The following attestation bundles were made for irondome-2.1.1.tar.gz:
Publisher:
publish.yml on TheKingHippopotamus/IronDome-Bunker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
irondome-2.1.1.tar.gz -
Subject digest:
63ff1047d0d54e880272489654cfdf890ed4549be5cc4e4bbbeb6fc38149cd07 - Sigstore transparency entry: 1202913637
- Sigstore integration time:
-
Permalink:
TheKingHippopotamus/IronDome-Bunker@df10d720dd50f0542e7156d197cfd0112dfc4a6f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/TheKingHippopotamus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@df10d720dd50f0542e7156d197cfd0112dfc4a6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file irondome-2.1.1-py3-none-any.whl.
File metadata
- Download URL: irondome-2.1.1-py3-none-any.whl
- Upload date:
- Size: 46.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efe05b374ed66dbdba90a0de653a3bb229e45a30555755ca6209e0e9452c64e2
|
|
| MD5 |
312959cc9799da6b54cfb39912794dc8
|
|
| BLAKE2b-256 |
037299617447f10fc0a44cde7dfc769efc05032652fdb250179d96c1272594e8
|
Provenance
The following attestation bundles were made for irondome-2.1.1-py3-none-any.whl:
Publisher:
publish.yml on TheKingHippopotamus/IronDome-Bunker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
irondome-2.1.1-py3-none-any.whl -
Subject digest:
efe05b374ed66dbdba90a0de653a3bb229e45a30555755ca6209e0e9452c64e2 - Sigstore transparency entry: 1202913668
- Sigstore integration time:
-
Permalink:
TheKingHippopotamus/IronDome-Bunker@df10d720dd50f0542e7156d197cfd0112dfc4a6f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/TheKingHippopotamus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@df10d720dd50f0542e7156d197cfd0112dfc4a6f -
Trigger Event:
push
-
Statement type: