Skip to content

DialSafe Simulator: Interactive 4-disk safe dial (fixed-conversion) visualizer for learning legitimate opening. Educational only.

License

Notifications You must be signed in to change notification settings

ipusiron/dialsafe-simulator

Repository files navigation

DialSafe Simulator - 金庫ダイヤルシミュレーター

GitHub Repo stars GitHub forks GitHub last commit GitHub license GitHub Pages

Day050 - 生成AIで作るセキュリティツール100

👉 English version is available here: README.en.md

DialSafe Simulatorは、ダイヤル式金庫の正規の開錠手順内部構造の動きを、ブラウザ上で学べる可視化ツールです。

ダイヤルを回すと 「ドライビングディスク → ツク連動 → 各ディスクの回転 → ゲート位置合わせ → フェンス」 の一連の動作がリアルタイムで可視化され、正しい4ステップ手順で操作したときのみ開錠します。

本ツールは教育(正規操作の理解)を目的とし、攻撃・バイパス手法は扱いません。


🌐 デモページ

👉 https://ipusiron.github.io/dialsafe-simulator/

ブラウザーで直接お試しいただけます。


📸 スクリーンショット

ゲートが揃って開錠した様子

ゲートが揃って開錠した様子

各ディスクのツクがぶつかり合い、ドライビングディスクの動きが第1ディスクまで伝搬している

各ディスクのツクがぶつかり合い、ドライビングディスクの動きが第1ディスクまで伝搬している


⚠️ 注意事項(対象とするダイヤル錠)

金庫のダイヤル錠には多様な方式があります。本ツールは、**日本で広く普及する家庭用の「4枚座の固定ダイヤル錠(固定変換ダイヤル錠)」**を簡易モデル化して可視化しています。

固定ダイヤル錠の外観

実機仕様・メーカー差によって構造や操作手順は異なる場合があります。

本ツールは教育用の簡略化モデルです。

  • 対象:4枚座の固定ダイヤル錠(固定変換ダイヤル錠)
  • 想定:目盛「0–99」、4番号の正規解錠、国産機で一般的な「最初は右回し」手順
  • 非対象:可変変換型/別規格・商用大型金庫の特殊機構/電子錠など

研究・教育以外の目的(不正アクセス・器物損壊等)での利用を禁止します。


✨ 主な機能

  • インタラクティブなダイヤル(ドラッグ/±1ボタン/キーボード操作)
  • 内部可視化:各ディスクのゲート位置・ツク(突起)連動・フェンスの状態
  • 正規開錠シミュレーター:回転方向・通過回数の追跡、4ステップ手順の確認
  • 学習モード(LEARN):固定ダイヤル錠の構造・原理・操作手順の詳細解説
  • シミュレーターモード(SIMULATOR):実際の手順での開錠操作練習
  • 多言語対応:日本語/英語のUI切り替え(ローカルストレージで設定保持)
  • ダークモード:明暗テーマの切り替え対応
  • 高速操作:±1ボタン長押しでの連続回転(30ms間隔の高速化)

🔩 固定ダイヤル錠の基礎(4枚座・固定変換)

以下は『ハッカーの学校 鍵開けの教科書』 P451よりの抜粋・要約です。

耐火金庫の固定ダイヤル錠の基本構造

主要部品と特徴:

  • 目盛盤(つまみ):0-99の目盛りが印字された操作部。直径が大きいほど高級品
  • 表座(指標つき台座):赤い指標または切り込み線付きの台座
  • 第1〜第3ディスク:各ディスクにゲート1個とツク2個を配置
  • ドライビングディスク(駆動座):他より大きく、ツク1個、目盛盤と芯棒で直結
  • 芯棒:パイプ内を通る中心軸、ドライビングディスクのみと接続
  • テンションスプリング:各ディスクを密着させ、ツク同士の接触を保つ
  • L寸法:表座からドライビングディスクまでの距離、扉厚より大きく必要

断面概略(要素名称)

動作メカニズム: 芯棒を介してドライビングディスクのみが目盛盤と直結し、まずドライブされます。他ディスクはテンションスプリングで密着しており、各ディスクの**ツク(突起)**同士が当たりながら順次回転を伝達します。

バネが弱くなるとツクが空回りして故障の原因となります。故障診断:目盛盤を回しても負荷が変わらない場合はバネ故障。応急処置として金庫を寝かせると重力でディスクが密着します。

横から見ると4枚のディスクの存在がわかる 裏から見たところ 写真手前(ダイヤルから一番奥)がドライビングディスク

固定ダイヤル錠機構と鍵機構の関連性

 固定ダイヤル錠と鍵の錠前の連動部を上から見ると、次のようになります。

固定ダイヤル錠と鍵の錠前の連動

ダイヤル錠の施解錠の状態

ダイヤル錠は内部に複数のディスク(円板)を持ちます。4枚のディスクなら、解錠には4つの数字を用います。

まず理解のために1枚の円板だけを考えます。

円板には 1つの切り欠き(ゲート) があり、 鍵側が施錠 のままなら閂は出たままで扉は開きません(図1)。

図1:鍵側が施錠で閂が出ている(扉は開かない)

鍵側を解錠 しても、 ダイヤル側のゲートが解錠位置 でなければ閂を 完全に引き込めず 、扉は開きません(図2)。

図2:鍵側のみ解錠だが、ダイヤル側ゲートが合わず閂を引き込めない

鍵側が解錠 かつ ダイヤル側のゲートが解錠位置 にあると、 閂を完全に引き込める ため扉が開きます(図3)。

図3:鍵側解錠かつダイヤル側ゲート位置が合致 → 閂を引き込み開扉

4枚ディスクでも同様で、 4つのゲートが閂側に一直線に揃い 、加えて 鍵側が解錠 されてはじめて扉が開きます。

ダイヤル錠の正規の解錠法(4枚座・国産固定ダイヤル)

固定変換ダイヤル錠のダイヤル目盛り

ダイヤル合わせで4番号を順に入力します。ここでの「○回まわす」は、解錠の数値が指標を○回通過する意味です(「0」ではありません)。 回し過ぎたらやり直しです。

  1. 4回以上まわしてから、1番目の数値で停止
  2. 3回まわして、2番目の数値で停止
  3. 2回まわして、3番目の数値で停止
  4. 1回まわして、4番目の数値で停止
  • ①完了で第1ディスクのゲートが解錠位置
  • ②完了で第2ディスク
  • ③完了で第3ディスク
  • ④完了でドライビングディスク
    4枚すべてのゲートが揃う状態になります。

構造上、左始動でも最終的にゲートを揃えることは可能ですが、番号列は右始動前提で設計されています(ツク厚み分の誤差が出るため)。国産は右始動が一般的、欧米は左始動が多い点にも注意。

最後に鍵を挿入して時計回りに回転し、解錠します。鍵の解錠位置のまま引くことで扉を開けます(鍵がつまみの役割)。


⌨ 操作方法

  • ダイヤル回転 / キー、または A / D キー
  • ±1ボタン:マウスクリック(単発)、長押し(連続高速回転)
  • ドラッグ操作:ダイヤル上でのマウスドラッグ
  • リセットR キー、またはリセットボタン
  • UI切替
    • 言語切替:右上の🇺🇸ボタン(日本語⇔English)
    • ダークモード:右上の🌙ボタン(明⇔暗テーマ)

📁 ディレクトリー構造

dialsafe-simulator/
├── index.html                           # メインHTMLファイル(学習・シミュレーター・チャレンジの3タブ)
├── script.js                            # コアロジック(ダイヤル操作、ディスク連動、i18n、チャレンジモード)
├── style.css                            # 全スタイル定義(CSS Grid/Flexbox、アニメーション)
├── README.md                            # プロジェクト説明(日本語)
├── README.en.md                         # プロジェクト説明(英語)
├── CLAUDE.md                            # Claude Code用プロジェクト指示書
├── AUTO_UNLOCK_IMPLEMENTATION_NOTES.md  # 自動開錠機能実装の検討記録
├── LICENSE                              # MIT License
└── assets/                              # 教育用画像・図表
    ├── screenshot.png                   # メインスクリーンショット
    ├── disks_movement.png               # ディスク連動の様子
    ├── DialLock.jpg                     # 実際のダイヤル錠外観
    ├── DialLock1.jpg                    # 側面から見た4枚ディスク
    ├── DialLock2.jpg                    # 裏面から見た構造
    ├── DialLock3.jpg                    # ドライビングディスク
    ├── DialLock5.jpg                    # ダイヤル目盛り
    ├── AntiFire_DialLock_Component.png  # 断面概略図(構成要素名称)
    ├── DialLock_Lock1.png               # 図1:施錠状態
    ├── DialLock_Lock2.png               # 図2:一部解錠状態
    ├── DialLock_Lock3.png               # 図3:完全解錠状態
    └── dial_lock.png                    # ダイヤル錠と鍵機構の連動図

ファイル説明

  • HTML/CSS/JS: 単一ページアプリケーション、依存関係なし
  • assets/: 固定ダイヤル錠の教育用実写写真と図解
  • 多言語対応: i18nシステム、data-i18n属性使用
  • GitHub Pages: 静的サイトとして直接デプロイ可能

現在の設定値

  • 正解番号: 94 - 30 - 84 - 13 (ダイヤル表示)
  • 内部ディスク番号: 7 - 27 - 61 - 6 (Disc1-Disc2-Disc3-Driving)
  • 開錠手順: 右4回転→左3回転→右2回転→左1回転

🛠 技術スタック

  • HTML / CSS / Vanilla JavaScript(依存なし・GitHub Pages向け)
  • i18n(data-i18n 属性+ローカルストレージで言語保持)

🚀 将来の改善予定

多言語対応の完全化

現在、英語切り替え機能がありますが、一部のイラスト画像に日本語の説明が含まれています。完全な英語対応のためには、以下の画像の英語版作成が必要です:

  • assets/AntiFire_DialLock_Component.png:耐火金庫の固定ダイヤル錠の各要素名称図
  • assets/DialLock_Lock1.png:図1(施錠状態)の説明
  • assets/DialLock_Lock2.png:図2(一部解錠)の説明
  • assets/DialLock_Lock3.png:図3(完全解錠)の説明
  • assets/dial_lock.png:固定ダイヤル錠と鍵の錠前の連動図

自動開錠機能の実装

現在、手動操作による正規開錠は完全に動作していますが、自動開錠機能の実装には複数の技術的課題があり、実装を見送りました。

詳細な検討記録と課題については、以下のドキュメントをご覧ください: 👉 自動開錠機能の実装検討記録

主な課題:

  • ±10操作の困難さ: 細かいダイヤル調整のアニメーション実装
  • 通過カウント機能: 指定番号を正確に指定回数通過させる動作の実装
  • アニメーション制御: 手動操作と同じ動きをトレースする自動ダイヤル操作
  • ディスク連動の再現: 各ステップでの適切なツク連動タイミング

その他の改善案

  • より詳細な物理シミュレーション(摩擦、バネの弾性など)
  • 音響効果(実際のダイヤル操作音)
  • 3Dビジュアライゼーション
  • 異なるタイプのダイヤル錠対応(可変変換型など)

📄 ライセンス

MIT License - 詳細は LICENSE をご覧ください。


🛠 このツールについて

本ツールは、「生成AIで作るセキュリティツール100」プロジェクトの一環として開発されました。
このプロジェクトでは、AIの支援を活用しながら、セキュリティに関連するさまざまなツールを
100日間にわたり制作・公開していく取り組みを行っています。

プロジェクトの詳細や他のツールについては、以下のページをご覧ください。

🔗 https://akademeia.info/?page_id=42163

About

DialSafe Simulator: Interactive 4-disk safe dial (fixed-conversion) visualizer for learning legitimate opening. Educational only.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published