Skip to content
CLASSIFIED — ZERO KNOWLEDGE ARCHITECTURE — AES-128-CBC

MISSION-GRADE PASSWORD SECURITY.
ZERO TRUST. ZERO CLOUD.

Your vault lives on your machine. AES-128-CBC encrypted. Biometric-locked. No servers. No sync. No breach surface.

pip install IronDome
PyPI v3.1.0 AES-128-CBC 100% Local
macOS Windows Linux Touch ID Windows Hello Fingerprint
600,000 PBKDF2 Iterations
AES-128 Encryption (Fernet)
3 Biometric Platforms
ZERO Network Calls

SECURITY DOCTRINE

Why IronDome

Built on three unbreakable principles. Every design decision traces back to them.

Zero Knowledge

Your master password never touches disk. Only a salted PBKDF2 hash — 600,000 rounds — is derived in memory and immediately discarded. Even if someone dumps your filesystem, there is nothing to find.

Machine Specific

Encryption keys are derived from your machine’s unique identifiers. Steal the vault file, copy it anywhere — it’s encrypted to a machine identity it will never be on. No matching identity, no access. Full stop.

Biometric Shield

Touch ID on macOS. Windows Hello on Win11. Fingerprint auth on Linux via PAM. Your body IS the second factor. Three failed attempts locks the vault for 60 minutes.


DEPLOYMENT PROTOCOL

How It Works

Three steps. No accounts. No server configuration. No cloud dependency.

STEP 01

Create Your Bunker

$ irondome create bunker

Bootstrap your vault: set master password, configure auth mode, generate machine-specific keys.

STEP 02

Open Airspace

$ irondome open airspace

Authenticate via biometric or password. Opens a 30-minute session. All vault commands unlocked.

STEP 03

Manage Secrets

$ bunker create

Add, retrieve, search, backup. Full encrypted vault operations from your terminal.


TACTICAL CAPABILITIES

Full Feature Set

Four defence layers. Ten battle-tested capabilities. Zero compromises.

TOP SECRET // CRYPTO 01

AES-128-CBC ENCRYPTION

Fernet symmetric encryption backed by PBKDF2-HMAC-SHA256 at 600,000 iterations. Every credential encrypted with a unique key. Brute-force cost: thermodynamically hostile.

CIPHER ACTIVE AES-128-CBC + HMAC-SHA256
CLASSIFIED // NETWORK 02

OFFLINE. ALWAYS.

Zero network stack. Zero cloud. Zero attack surface. If it cannot phone home, it cannot be breached remotely.

AIRGAPPED
CLASSIFIED // PRIVACY 03

ZERO KNOWLEDGE

No telemetry. No accounts. No servers. We cannot see your vault because there is no "we" between you and your data.

LOCAL ONLY
TOP SECRET // AUTH 04

BIOMETRIC AUTHENTICATION

Touch ID, Windows Hello, and fprintd. Hardware-attested biometric gate before every vault session. Your face and your fingerprint are your credentials.

IRONDOME v2.0 MULTI-PLATFORM
RESTRICTED // HW 05

MACHINE-SPECIFIC KEYS

Keys derived from CPU serial, motherboard UUID, and hostname. Copy the vault file — it is useless without the exact hardware that created it.

HW-BOUND
RESTRICTED // SESSION 06

SESSION INTEGRITY

Configurable inactivity timeout with hard-lock on expiry. Session token chmod 0600. No session survives a reboot.

30 MIN DEFAULT
RESTRICTED // CLIPBOARD 07

CLIPBOARD AUTO-CLEAR

Copied credentials self-destruct from clipboard after 30 seconds. No lingering plaintext. No accidental paste into the wrong window.

TTL: 30s
TOP SECRET // INTERFACE 08

FULL TERMINAL COMMAND CENTER

A 12-screen TUI built on Rich. Vault list, credential inspector, audit log, settings panel, backup manager — all keyboard-driven, all without leaving your terminal.

12 SCREENS RICH TUI KEYBOARD NATIVE
CLASSIFIED // UX 09

Ctrl+P COMMAND PALETTE

Every action, one keypress away. Fuzzy search across all commands. No menu navigation, no mouse required.

PALETTE READY
CLASSIFIED // PLATFORM 10

CROSS-PLATFORM

macOS, Windows, Linux. One codebase, three deployment targets, zero platform-specific compromises.

3 / 3 PLATFORMS ACTIVE

The TUI, Unfiltered

This is the actual interface. No marketing renders.

Four-frame walkthrough of the IronDome TUI: the boot splash with ASCII dome art, the biometric login screen, the main dashboard with vault stats, and a credential detail view with password reveal and auto-hide countdown.

╔═══╦═════════════════════════════════════════════════════╦═══╗
║ ★ ║ · · · · · · · · · · · · · · · · · · · · · · · · · · ║ ★ ║
║   ║                                                         ║   ║
║ ★ ║                                        ★  THREAT ▲  ║ ★ ║
║   ║     ╭──────────────────────────────╮   ╲  INBOUND   ║   ║
║   ║   ╭─╯    I R O N D O M E           ╰─╮  ╲           ║   ║
║ ★ ║ ╭─╯       DOME : ACTIVE          ▲    ╰─╮          ║ ★ ║
║   ║╭─╯                                ║ ✸✸✸   ╰─╮       ║   ║
║   ║╯                             ▲    ╳  ✸ ✸      ╰─    ║   ║
║   ║              ▲               ║     ✸✸✸  KILL        ║   ║
║ ★ ║              ║               ●    NEUTRALIZED       ║ ★ ║
║   ║╔══╗        ║▲      ┌─┐ ┌──┐ ┌───┐ ┌──┐ ┌─┐        ║   ║
║   ║║◎ ║╔═════╗ ║║      │█│ │██│ │███│ │██│ │█│        ║   ║
║   ║╚══╝╚═════╝▄╨╨▄▄▄▄▄███▄████▄█████▄████▄███▄▄▄▄▄  ║   ║
║ ★ ║██████████████████████████████████████████████████   ║ ★ ║
║   ║                                                         ║   ║
║   ║ ═════════════════════════════════════════════════════ ║   ║
║ ★ ║    ★  SECURE VAULT  ·  FORTIFIED  ·  ZERO KNOWLEDGE  ★  ║ ★ ║
╚═══╩═════════════════════════════════════════════════════╩═══╝
SECURE VAULT v2.1.1
Initializing IronDome...

One command. No cloud. No compromise.

pip install IronDome
Try It Now → Read the Docs

ARCHITECTURE OVERVIEW

The Full Security Stack

Every component of IronDome's security model, from user input to encrypted vault. No gaps. No shortcuts.

irondome-arch.diagram LIVE
┌───────────────────────────────────────────────────────────┐
│                    USER INPUT                            │
│          ┌──────────┐    ┌──────────────┐               │
│          │BIOMETRIC │───▶│MASTER        │               │
│          │GATE      │    │PASSWORD      │               │
│          └──────────┘    └──────┬───────┘               │
│                                │                         │
│                    ┌───────────▼──────────┐              │
│                    │PBKDF2-HMAC-SHA-256   │              │
│                    │× 600,000 iterations  │              │
│                    └───────────┬──────────┘              │
│                                │                         │
│   ┌────────────┐    ┌─────────▼─────────┐               │
│   │HARDWARE    │───▶│DERIVED KEY        │               │
│   │IDENTITY    │    │                   │               │
│   │            │    │    Fernet         │               │
│   │ system key │    │ AES-128-CBC      │               │
│   └────────────┘    │ + HMAC-SHA256    │               │
│                     └─────────┬─────────┘               │
│                               │                          │
│                    ┌──────────▼──────────┐               │
│                    │  ENCRYPTED VAULT    │               │
│                    └────────────────────┘                │
│                                                          │
│   .airspace.session (chmod 0600) — 30min TTL            │
└───────────────────────────────────────────────────────────┘
CRYPTOGRAPHIC PRIMITIVES

Encryption Deep Dive

Every algorithm chosen for a documented reason. No obscure crypto. No roll-your-own primitives.

KEY DERIVATION

PBKDF2-HMAC-SHA256

600,000

Password-Based Key Derivation Function 2. Transforms your master password into a 256-bit cryptographic key by running it through HMAC-SHA256 in a tight loop — 600,000 times. Each iteration depends on the last. You cannot skip iterations. There is no shortcut.

WHY 600,000 ITERATIONS?

OWASP 2023 recommends a minimum of 600,000 iterations for PBKDF2-HMAC-SHA256. This reflects the current cost of GPU-based brute-force attacks. At 600k iterations on modern hardware, a single password trial takes approximately 0.3–0.8 seconds. An attacker testing 1 billion passwords would need over 9 years on a single GPU.

python
key = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=600_000,
).derive(master_password.encode())
SYMMETRIC ENCRYPTION

Fernet — AES-128-CBC + HMAC-SHA256

Fernet provides authenticated encryption. An attacker who modifies ciphertext cannot decrypt it — the HMAC will fail first. This prevents tampering, padding oracle attacks, and bitflip attacks simultaneously.

Algorithm AES-128-CBC
Authentication HMAC-SHA256
Key material 128-bit AES + 128-bit HMAC
IV Random 128-bit per op
Format Self-describing token
Tamper detection Yes — always
HARDWARE BINDING

System Key — Machine-Specific Second Layer

The vault is encrypted twice. The derived key (from your password) is one layer. The system key is the second — derived from hardware identifiers unique to your machine.

python
hardware_id = sha256(cpu_serial + motherboard_uuid + hostname + os_user)
system_key = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=hardware_salt,
    iterations=600_000,
).derive(hardware_id)

■ ZERO-KNOWLEDGE ARCHITECTURE

Nothing Leaves the Device

Master Password
256-bit AES Key
.passwords.enc
NO CDN
NO API
NO CLOUD

THREAT STATUS BOARD
ACTIVE MONITORING: ENABLED
2 HIGH
3 MEDIUM
1 LOW
2 NEUTRALIZED
THREAT MODEL

What IronDome Defends Against

Security without a threat model is theater. These are the real attack vectors.

T-001 HIGH

VAULT FILE STOLEN

SCENARIO

Attacker gains filesystem access and copies .passwords.enc from disk.

DEFENSE

Machine-specific encryption key derived from machine identity. The vault is machine-specific. On any other hardware, decryption produces garbage.

T-002 HIGH

BRUTE FORCE ATTACK

SCENARIO

Attacker runs a password cracking tool against the vault file offline.

DEFENSE

600,000 PBKDF2 iterations makes each guess ~0.3–0.8s. Adaptive lockout. Hardware binding means cracking requires your specific machine.

T-003 MEDIUM

MEMORY DUMP

SCENARIO

Malicious process dumps RAM to extract decrypted passwords.

DEFENSE

Memory locking (mlock) prevents swapping. Signal handlers zero-fill sensitive buffers before exit.

T-004 MEDIUM

CLIPBOARD SNIFFING

SCENARIO

Malicious background app reads clipboard after you copy a password.

DEFENSE

Automatic clipboard clearing after 30 seconds. Overwritten with random bytes, not just emptied.

T-005 MEDIUM

SESSION HIJACKING

SCENARIO

Attacker gains access to a live terminal session.

DEFENSE

Session file chmod 0600. Hard 30-minute timeout. Token randomly generated per login, never reused.

T-006 NONE

MAN-IN-THE-MIDDLE

SCENARIO

Attacker intercepts traffic between the app and a backend.

DEFENSE

There is no backend. Zero network calls. No traffic to intercept. Attack surface is zero.

T-007 LOW

SHOULDER SURFING

SCENARIO

Someone observes the screen during authentication.

DEFENSE

Biometric gate authenticates before password. TUI masks all output. Secure terminal echo suppression.

T-008 NONE

SERVER BREACH

SCENARIO

Attacker compromises a cloud server and dumps stored passwords.

DEFENSE

There is no database. There is no server. There is no cloud. Everything exists only on your local filesystem.


FILE SYSTEM SECURITY

Vault Structure on Disk

Every file has a reason to exist and a permission level that matches its sensitivity.

~/.password_manager/ ls -la
~/.password_manager/
├── password_manager.log         # non-sensitive audit trail
├── settings.json                # user preferences, no secrets
├── backups/
│   └── .passwords_backup_*.enc  # AES-128-CBC encrypted backups
└── secrets/                      # chmod 0700 — owner only
    ├── .passwords.enc            # vault — Fernet AES-128-CBC
    ├── salt.bin                  # PBKDF2 salt (16 bytes)
    ├── .master_user.enc          # encrypted master username
    ├── .master_hash.enc          # encrypted PBKDF2 hash
    ├── .login_attempts.dat       # lockout counter
    └── .airspace.session         # chmod 0600 — session token
File Mode Permissions Access Level
secrets/ 0700 (rwx------) RESTRICTED Inaccessible to all other users
.passwords.enc 0600 (rw-------) RESTRICTED Only owning user can read/write
.airspace.session 0600 (rw-------) RESTRICTED Owner-only. Expires in 30 minutes
salt.bin 0600 (rw-------) PROTECTED Protected to prevent modification
settings.json 0644 (rw-r--r--) PUBLIC No sensitive data, UI preferences only
password_manager.log 0644 (rw-r--r--) PUBLIC Passwords never written to logs

INTELLIGENCE BRIEFING

IronDome vs. Cloud Managers

Side-by-side comparison. Local-first architecture eliminates entire attack surface categories.

Capability IronDome Cloud Managers
Data Location Your machine only Their servers
Network Required Never Always
Zero Knowledge True (no server exists) "Trust us"
Hardware Binding Yes — key tied to device No
Open Source GPL-3.0 (fully auditable) Rarely
Cost Free forever $3–5/month
Biometric Auth OS-native (Secure Enclave) Browser plugin
Breach Exposure None (no server target) Full vault at risk
Offline Access Always available Requires internet
LOCAL-FIRST ARCHITECTURE ELIMINATES ENTIRE ATTACK SURFACE CATEGORIES

GPL-3.0

Don't trust claims. Read the code.

View on GitHub →

Every cryptographic decision documented. Every line auditable. No black boxes.


DESIGN PHILOSOPHY

Security Principles

Not marketing claims. Each principle is enforced architecturally.

Defense in Depth

Multiple independent security layers. Password worthless without system key. System key worthless without salt. Compromise one layer — you still have nothing.

Least Privilege

Every file has minimum permissions. secrets/ is 0700. Session file is 0600. No process runs elevated. Minimized blast radius.

Zero Trust

Does not trust the network, cloud services, or external auth providers. Only trust boundary is your local machine.

Open Source GPL-3.0

Every line of crypto code is public. Any researcher can audit. Claims mean nothing without verifiable source code.

OWASP Compliant

600,000 PBKDF2 iterations. 256-bit keys. Authenticated encryption. No MD5. No SHA1. No ECB mode.

No Secrets in Logs

Audit log records operations, not values. "Password retrieved for github.com" is logged. The actual password never appears in any log.


FIELD MANUAL

Quick Start & Commands

Everything you need to deploy IronDome.

1

Install

pip install IronDome

Requires Python 3.8–3.13

2

Create bunker

irondome create bunker

Set master password, choose auth mode, get recovery code

3

Start using

irondome open airspace bunker create

Session persists 30 minutes

System Commands

Command Description
irondome create bunker First-time vault setup
irondome open airspace Authenticate, start 30-min session
irondome close airspace Lock immediately
irondome status Display vault health

Vault Commands

Command Description
bunker create Add new password entry
bunker open List all entries
bunker open [name] Search entries
bunker fortify Create encrypted backup
bunker settings Open preferences

Authentication Modes

MODE 01

Biometric Only

Fastest login, key in OS keychain

MODE 03

Password Only

Traditional, works everywhere


OPERATOR PROFILE

About IronDome

“IronDome exists because your passwords shouldn’t live on someone else’s server. Every cloud-based password manager asks you to trust their infrastructure, their employees, their security practices. IronDome asks you to trust math.”

— Design Principle #1
King Hippopotamus avatar

King Hippopotamus

CREATOR / ACTIVE

Security-focused developer. Built IronDome because every cloud password manager is a liability waiting to happen.

Version 3.0.3
License GPL-3.0
Python 3.8–3.13
Encryption AES-128-CBC
Key Derivation PBKDF2 × 600,000
Platforms macOS · Windows · Linux
Dependencies cryptography + keyring + textual
Network Calls Zero. Ever.

TROUBLESHOOTING

Common Issues

Biometric not detected

macOS

Ensure Touch ID is enrolled in System Settings.

Windows

Enable Windows Hello in Settings > Accounts.

Linux

$ sudo apt install fprintd && sudo fprintd-enroll

macOS (Python binding)

$ pip install pyobjc-framework-LocalAuthentication

Fallback

Switch to Mode 3 via bunker settings.

Session expired / Permission denied

Sessions expire after 30 minutes of inactivity.

Re-authenticate

$ irondome open airspace

Increase timeout

$ session_timeout in settings.json
Forgot master password

CRITICAL: Zero-knowledge architecture means no server-side recovery.

Use your 24-character recovery code to regain access.

Recovery steps

$ irondome create bunker

Select "Recover from code", enter your 24-character recovery code, then set a new master password.

irondome command not found

The pip scripts directory may not be in your PATH.

Verify installation

$ python -m pip show IronDome

Run directly via module

$ python -m irondome create bunker

Add to PATH permanently

$ export PATH="$HOME/.local/bin:$PATH"

VULNERABILITY REPORTING

Found a Security Issue?

IronDome is open source. Every security report is treated as high priority.

01

Do NOT open a public GitHub issue

Public disclosure before a fix puts every user at risk.

02

Read SECURITY.md on GitHub

Full disclosure policy, PGP key, scope definitions.

03

Submit via GitHub Security Advisories

Private reporting. Acknowledged within 48 hours.

04

Coordinated disclosure — 90-day window

Patch within 30 days. Full disclosure and researcher credit.

Response SLA

Milestone SLA
Initial acknowledgment 48 hours
Triage & severity 5 business days
Critical patch 7–14 days
High patch 30 days
Medium/Low patch 90 days
Public disclosure 30 days after fix

DEPLOYMENT READY

Your passwords. Your machine. Deploy IronDome.

Every cryptographic claim on this page is backed by real code. GPL-3.0. No obfuscation. Read the source — then decide if you trust it.

v3.1.0
pip install IronDome
macOS Windows Linux