Day079 - 生成AIで作るセキュリティツール100
LeetForge は、通常のテキストを 1337(リート表記) に変換する教育用ツールです。
文字ごとに複数の置換候補を割り当て、ランダム/循環で出力を生成できます。
セキュリティ文脈では「偽造(forge)」と「鍛冶場(forge)」のダブルミーニングを持たせ、「文字を鍛えて偽造する工房」として遊び心を込めています。
👉 https://ipusiron.github.io/leetforge/
ブラウザーで直接お試しいただけます。
リート(Leet) または 1337 speak は、英数字や記号を使って通常の文字を置き換える表記法です。
リートの起源は 1980年代のBBS(電子掲示板)時代 にさかのぼります:
- 1980年代: ハッカーやプログラマーが、システム管理者の検閲やフィルタリングを回避するために開発
- 1990年代: オンラインゲームコミュニティで流行し、「エリート(Elite)」を「3l337」→「leet」と略して表現
- 2000年代: インターネット文化の一部として定着、ミーム化
- パスワード強化:
password
→p4ssw0rd
で複雑性向上 - 辞書攻撃対策: 一般的な単語を変換して予測困難に
- フィッシング対策: 正規ドメインの模倣検出
- 暗号化の理解: 換字式暗号の基本概念を学習
- 文字エンコーディング: 異なる表記体系の理解
- プログラミング教育: 文字列操作の実践
- オンラインゲーム: プレイヤー名やメッセージの個性化
- SNS: ユニークなユーザー名作成
- アート表現: ASCIIアートや装飾的テキスト
文字 | リート表記 | 理由・形状 |
---|---|---|
A | 4, @ | 形状の類似性 |
E | 3 | 数字の3が横向きのEに類似 |
I | 1, ! | 縦線の形状 |
O | 0 | 円形の類似性 |
S | 5, $ | 曲線の形状 |
T | 7, + | 十字形の構造 |
- 可読性の低下: 過度な使用は理解を困難にする
- セキュリティの限界: 現代の攻撃手法には限定的な効果
- 文脈の重要性: 使用場面を適切に判断することが必要
- 入力テキストをリート表記に変換(最大50,000文字)
- リアルタイム変換/ボタン実行の切替
- 複数候補の選択方式:一様ランダム/ラウンドロビン
- シード固定で再現性あるランダム変換
- 出力コピー機能
- 比較ビュー(変更箇所をハイライト表示)
- 文字・単語ごとの対応表を一覧表示
- キー単位での有効/無効切替
- 候補レベルでの個別制御:各文字の候補を個別に有効/無効化可能
- 7つのプリセット:基本・標準・上級・エリート・単語変換・コンボ・逆変換
- プリセット適用時の詳細確認ダイアログ
- localStorageで設定を保存
- JSON形式でインポート/エクスポート(ファイルサイズ制限: 1MB)
- 初期化機能でデフォルト設定に復元
- リートの歴史的背景をタイムライン形式で学習
- 基本的な変換ルールと理由を視覚的に解説
- セキュリティ・教育・コミュニケーション分野での活用場面を紹介
- 注意点とベストプラクティスを整理
{
"version": 1,
"map": {
"a": {
"enabled": true,
"alts": [
{ "value": "4", "enabled": true },
{ "value": "@", "enabled": true },
{ "value": "/\\", "enabled": false }
]
},
"b": {
"enabled": true,
"alts": [
{ "value": "8", "enabled": true },
{ "value": "|3", "enabled": false }
]
},
"and": {
"enabled": true,
"alts": [
{ "value": "&", "enabled": true },
{ "value": "n", "enabled": false }
]
}
}
}
状況: 企業のセキュリティエンジニアが、従業員のパスワード作成支援を行う
使用手順:
- 基本プリセットを適用して、まず基本的な文字変換(a→4, e→3, i→1, o→0, s→5, t→7, l→1)を有効化
- 従業員の既存パスワード候補「company2024」を入力
- 出力結果「c0mp4ny2024」を確認し、さらに強化が必要と判断
- マッピングタブで追加文字(y→
/
)を有効化し、「c0mp4n`/2024」に強化 - シード固定機能を使用して、同じ変換ルールで複数のパスワードを一貫して生成
効果: 辞書攻撃に対する耐性が向上し、覚えやすさも維持
状況: ゲーム配信者が新しいMMORPGで目立つプレイヤー名を作成したい
使用手順:
- 希望する名前「DragonSlayer」を入力
- 上級プリセットを適用して、幅広い文字変換を有効化
- 出力「|)r490n5l4`/3r」を確認
- マッピングタブで候補レベルでの個別調整:
- 「D」の候補リストで「|)」のチェックボックスのみを有効化
- 「a」の候補リストで「4」と「@」のチェックボックスを有効化
- 「y」の候補リストで「`/」のチェックボックスを無効化
- ラウンドロビン方式で複数パターンを生成し、最適な組み合わせを選択
効果: 他のプレイヤーと重複しにくい、記憶に残るユニークな名前を作成
状況: 情報セキュリティの講師が、置換暗号の概念を学生に教える教材を作成
使用手順:
- 座学タブでリートの歴史と文化的背景を学習
- 学習用サンプル「HELLO WORLD」を入力
- 基本プリセットから開始し、「#3110 W0R1|)」の変換結果を示す
- マッピングタブで段階的に文字を追加:
- 第1段階:母音のみ(A,E,I,O)→「H3LL0 W0RLD」
- 第2段階:子音追加(L,R,D)→「#3110 W021|)」
- 第3段階:全文字適用→「#3110 //0r1|)」
- 単語変換プリセットで「and」→「&」などの単語レベル変換も実演
- 各段階での変換結果をエクスポートして、授業資料に組み込み
効果: 学生が置換暗号の基本原理を視覚的・実践的に理解し、セキュリティ意識が向上
LeetForgeは設定をブラウザのlocalStorageに保存しています。新しいキーやプリセットが反映されない場合は、以下をお試しください:
- マッピングタブを開く
- 「初期化」ボタンをクリック
- 確認ダイアログで「OK」を選択
- Windows/Linux:
Ctrl + F5
またはCtrl + Shift + R
- Mac:
Cmd + Shift + R
- F12で開発者ツールを開く
- Application(Chrome)またはStorage(Firefox)タブを選択
- Local Storage → このサイトのURLを選択
- 削除またはClear Allをクリック
- ページをリロード
- 単語変換が効かない: 古いマッピングデータが残っている可能性
- プリセット適用後に効果がない: localStorageの古いデータが優先されている
- 新しく追加したキーが表示されない: 設定の同期が必要
leetforge/
├── assets/
│ └── screenshot.png # スクリーンショット画像
├── .gitignore # Gitで無視するファイルの設定
├── .nojekyll # GitHub Pages設定
├── index.html # メインHTML(25KB)
├── script.js # JavaScript機能(36KB)
├── style.css # スタイルシート(26KB)
├── LICENSE # MITライセンス
└── README.md # プロジェクト説明(本ファイル)
主要ファイル:
- index.html: 3タブ構成のメインUI(コンバート・マッピング・座学)
- script.js: リート変換エンジン、マッピング管理、候補レベル制御
- style.css: ダーク/ライトテーマ対応、レスポンシブデザイン
- 『ハッキング・ラボで遊ぶために辞書ファイルを鍛える本』
- 「5.3 cuppで辞書ファイルを生成する」>「5.3.3 リートモードを有効にする」(P.71-73)
- 付録B「リート符号表」(P.136-137)
MIT License – 詳細は LICENSE を参照してください。
本ツールは、「生成AIで作るセキュリティツール100」プロジェクトの一環として開発されました。 このプロジェクトでは、AIの支援を活用しながら、セキュリティに関連するさまざまなツールを100日間にわたり制作・公開していく取り組みを行っています。
プロジェクトの詳細や他のツールについては、以下のページをご覧ください。