โ† Back to Demos
Start Training

Security Dojo

Master Bitcoin Self-Custody Security

Stop reading about security. Start practicing it.
Get your personalized security assessment, then train through hands-on scenarios, real attack simulations, and practical exercises used by security professionals.

โš ๏ธ Real Money, Real Risk

Over $4.5 billion in Bitcoin has been stolen from individuals in 2024 alone. 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 is lost forever
$5M Average wrench attack loss
73% Users fail basic OPSEC tests
0
F

Your Security Score

0 Critical Risks
0 High Priority
0 Medium Priority

Your Training Path

Complete these interactive stations to master Bitcoin security. Each includes hands-on exercises, real attack simulations, and practical tools.

`, hardware: ` `, opsec: ` `, attacks: ` `, inheritance: ` ` }; 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'); } }); });