โ† Back to Demos
Start Training

Bitcoin Security Training Lab

Hands-On Practice for Real-World Bitcoin Security

Stop reading about security. Start practicing it.
Answer a few quick questions so we can match you with the right training stations, then work through hands-on scenarios, real attack simulations, and practical exercises.

โš ๏ธ Real Money, Real Risk

Each year, billions in crypto are lost or stolen (Chainalysis estimated about $2.2 billion in 2024). The most common cause? User error, not protocol failure. Poor key management, weak OPSEC, and lack of security knowledge.

$15B+ Lost to exchange hacks
20% Of all BTC may be lost forever (estimate)
Rising Physical coercion ("wrench") risk
Most Losses trace to user error
`, hardware: ` `, opsec: ` `, attacks: ` `, inheritance: `

Real-World Scenario

"John, 55, has 10 BTC. He's worried about sudden death leaving his wife and children unable to access his Bitcoin."

How a collaborative security model handles this:

Result: Zero Bitcoin lost. Zero confusion. Family prepared and empowered.

Professional Bitcoin Estate Planning

The Bitcoin Adviser

Complete inheritance solution: collaborative security + beneficiary education + ongoing support

Schedule Consultation

DIY Guide: Cryptoasset Inheritance Planning

Book by Pamela Morgan for those managing their own estate planning

Buy Book

๐Ÿ“‹ Questions Worth Asking About Any Setup

Whether you go DIY or use a collaborative security provider, ask:

If several answers are "no" or "only me," that is the gap to close, by documenting and testing a recovery process or by distributing keys to independent people.

Bottom Line: With The Bitcoin Adviser, you don't have to choose between security today and accessibility tomorrow. You get both - the firm reports $1B+ AUM and zero losses since 2016.

` }; return stations[stationId] || '

Station content not available yet.

'; } window.checkPhishing = function(questionNum, correct, element) { const feedback = document.getElementById('feedback-' + questionNum); const allOptions = element.parentElement.querySelectorAll('.scenario-option'); // Disable all buttons allOptions.forEach(btn => btn.style.pointerEvents = 'none'); if (correct) { element.classList.add('correct'); feedback.className = 'scenario-feedback correct show'; if (questionNum === 1) { feedback.innerHTML = 'โœ… Correct!
Red flags: Suspicious domain (not official MetaMask), urgency tactics, "account closure" threat. MetaMask is non-custodial - there\'s no "account" to close.'; } else { feedback.innerHTML = 'โœ… Correct!
Only www.ledger.com is the official site. Always verify URLs carefully before entering sensitive information.'; } // Update progress userProgress.stations.phishing = (userProgress.stations.phishing || 0) + 50; saveProgress(); } else { element.classList.add('incorrect'); feedback.className = 'scenario-feedback incorrect show'; if (questionNum === 1) { feedback.innerHTML = 'โŒ Incorrect.
This is a phishing attack! The domain is fake, and non-custodial wallets like MetaMask can\'t be "closed" by anyone.'; } else { feedback.innerHTML = 'โŒ Incorrect.
That\'s a fake site. Always double-check URLs. Attackers register similar domains to steal your funds.'; } } }; function updateBeltRank(score) { let belt = 'White Belt'; if (score >= 90) belt = 'Black Belt'; else if (score >= 80) belt = 'Brown Belt'; else if (score >= 70) belt = 'Blue Belt'; else if (score >= 60) belt = 'Green Belt'; else if (score >= 50) belt = 'Orange Belt'; else if (score >= 30) belt = 'Yellow Belt'; userProgress.beltRank = belt; document.getElementById('belt-rank').textContent = `๐Ÿฅ‹ ${belt}`; saveProgress(); } function saveProgress() { localStorage.setItem('securityDojoProgress', JSON.stringify(userProgress)); } // Close modal on escape document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeModal(); }); // Close modal on background click document.getElementById('station-modal').addEventListener('click', (e) => { if (e.target.id === 'station-modal') closeModal(); }); // ======================================== // Multi-Level Support // ======================================== // Detect level from URL parameter const urlParams = new URLSearchParams(window.location.search); const currentLevel = urlParams.get('level') || 'beginner'; const currentPath = urlParams.get('path') || 'curious'; // Apply level class to body document.body.classList.add(`level-${currentLevel}`); // Level switcher function function switchLevel(level) { const newUrl = new URL(window.location); newUrl.searchParams.set('level', level); window.location.href = newUrl.toString(); } // Highlight active level button on load document.addEventListener('DOMContentLoaded', () => { const buttons = document.querySelectorAll('.level-btn'); buttons.forEach(btn => { const btnText = btn.textContent.toLowerCase(); if (btnText.includes(currentLevel)) { btn.classList.add('active'); } }); });