⚠ 教育目的のみ — すべての攻撃デモはブラウザ内サンドボックスで動作します。実際のシステムへの適用は違法です。
White Hat
Learning Platform
VAULT自体を「教材」として使い、本物の暗号・攻撃・防御を体験する。
WebCrypto APIで実際に動く — シミュレーションではなく実行。
⚡
Attack Simulator
SQLi / XSS / Hash Cracking / CSRF を体験。攻撃者の視点を理解する。
🔐
Crypto Playground
AES-256-GCM / PBKDF2 / ECDH をライブ実行。VAULTの暗号エンジンを解剖。
🏴
CTF Challenge
Base64・ROT13・Hash解析・暗号判定。フラグを取得してバッジを獲得。
🎖
Skill Passport
習熟度レーダー・XPシステム・バッジコレクション。成長を可視化。
🎯
Threat Model
STRIDE脅威分析・攻撃ツリー・Vaultへの攻撃経路を可視化。
📡
Packet Analyzer
JWT解析・HTTPヘッダー解剖・Cookie属性・リクエスト改ざん体験。
📊
Security Score
Vaultのセキュリティ設定を評価。改善推奨とリスクを可視化。
$ 全処理はブラウザ内で完結。外部サーバーへのデータ送信なし。
$ WebCrypto APIを直接呼び出し — 本物の暗号結果が出力されます。
$ CTFフラグを取得すると自動でXPとバッジが付与されます。
$ 学習後にClaude Codeで残りモジュールを拡張予定。
⚠ 教育目的のみ。ブラウザ内サンドボックスで動作。実際のシステムへの適用は違法です。
脆弱なログインフォーム。ユーザー名に特殊な文字列を入力するとSQLクエリを操作できます。
試してみる: admin' -- または ' OR '1'='1
SELECT * FROM users WHERE
username = 'admin'
AND password = '*****'
// ログイン試行を待っています...
🏴
FLAG-SQLI-001
SQL インジェクション基礎を習得
+20 XP
⬇ 防御版: プリペアドステートメント
// ❌ 脆弱なコード
query = "SELECT * FROM users WHERE username = '" + input + "'"
// ✅ 安全なコード (プリペアドステートメント)
stmt = db.prepare("SELECT * FROM users WHERE username = ?")
stmt.execute([input]) // inputはデータとして扱われる
コメント欄にHTMLタグやJavaScriptを入力してみましょう。
試してみる: <script>alert('XSS')</script> または <img src=x onerror="alert(1)">
❌ 脆弱 (innerHTML)
レンダリング結果:
✅ 安全 (textContent)
← 同じ入力を使用
レンダリング結果:
// 入力を待っています...
🏴
FLAG-XSS-001
XSS攻撃と防御の違いを理解
+20 XP
// ❌ 脆弱: ユーザー入力をそのままHTMLに挿入
element.innerHTML = userInput
// ✅ 安全: テキストとして扱う
element.textContent = userInput
// ✅ または DOMPurify でサニタイズ
element.innerHTML = DOMPurify.sanitize(userInput)
同じパスワードを異なるアルゴリズムでハッシュ化。攻撃者が解析するのにかかる時間を比較します。
// 「ハッシュを生成」をクリック...
🏴
FLAG-HASH-001
ハッシュアルゴリズムの強度を理解
+20 XP
CSRFトークンなし: 悪意あるサイトからのリクエストがそのまま処理される。
CSRFトークンあり: 正規のリクエストのみを受け付ける。
⚡ 攻撃者サイト (evil.com)
あなたを騙して送金させようとする
<form action="vault.app/transfer"
method="POST">
<input name="amount" value="99999">
<!-- 自動送信スクリプト -->
</form>
// アクションを待っています...
🏴
FLAG-CSRF-001
CSRF攻撃と防御メカニズムを理解
+20 XP
GCM (Galois/Counter Mode) は暗号化と同時に認証タグを生成します。
暗号文の1ビットでも変わると、タグが一致しなくなり復号が失敗します。
これにより機密性と完全性を同時に保証します。
反復回数を増やすと処理時間が線形に増加。ブルートフォース攻撃のコストも同様に増加します。
// 反復回数を選択して実行...
攻撃者のGPU(RTX 4090換算)での解析時間推定
// 実行後に表示
アリスとボブがそれぞれ鍵ペアを生成し、公開鍵を交換するだけで同じ共有秘密を得られます。
// 「鍵ペア生成」から開始...
Math.random()は予測可能な疑似乱数。パスワード生成には絶対に使ってはいけません。
✅ crypto.getRandomValues()
分布スコア: —
// ボタンをクリックして比較...
上のAES/PBKDF2/ECDH/乱数品質が「実際に動くAPI」を見るデモなら、こちらは「なぜそう動くのか」を手を動かして体で理解するための別ページ集です。
⚠ 教育目的。実際のVaultはこれらの脅威に対して対策済みです。
MicrosoftのSTRIDEモデルでVaultの各コンポーネントを分析。
各カードをクリックすると詳細と対策が表示されます。
// 上のカードをクリックして詳細を表示...
攻撃者がVaultのマスターパスワードを入手しようとする場合の経路ツリー。
ノードをクリックすると対策と難易度が表示されます。
// ノードをクリックして攻撃手法の詳細を確認...
各設定をON/OFFすることで、防御できる攻撃ベクターが変化します。
防御されている攻撃ベクター
JWTをペーストまたはサンプルを使用
// JWTを入力してデコード...
⚠ JWTは暗号化されていない — Base64エンコードのみ。
誰でもペイロードを読める。秘密情報はペイロードに入れてはいけない。
保護されているのは改ざん検知のみ(正しい署名鍵があれば)。
Cookie属性のON/OFFが防ぐ攻撃・通す攻撃を対話的に確認します。
// フラグを切り替えて攻撃への影響を確認...
擬似的なAPIリクエストを編集して、サーバーがどう反応するか体験します。
ATTACK VECTORS DETECTED
リクエストを解析中...
SERVER RESPONSE (simulated)
→ 送信ボタンで擬似レスポンスを表示