概要
- favicon にHTMLデータを格納するという 実験的手法 の紹介
- 画像の RGB値 に直接データを書き込むことで、 小規模なWebサイト を埋め込み
- Canvas API を使って、faviconからデータを復元
- 実用性は低いが、 データ隠蔽やストレージの発想拡張 として面白い
- 代替手法や応用例 も簡単に紹介
faviconにWebサイトを隠す試み
- DPIレジスタや他デバイス にデータを隠す発想から発展した実験
- faviconは 画像(主にPNG) であり、 各ピクセルはRGB値=バイト列 として扱える
- ステガノグラフィ (画像へのデータ隠蔽)の応用
- 画像としてはノイズに見えるが、実際は HTMLデータ を格納
- UTF-8バイト列 をそのままRGBチャンネルにマッピング
- 4バイトのヘッダ でデータ長を記録し、余分なピクセルの切り分けを実現
実装手順
- HTMLを TextEncoder でバイト配列に変換
- 4バイト長ヘッダ を先頭に付加
- 1ピクセル=3バイト (R,G,B)として順番に埋め込む
- 9x9ピクセル (81ピクセル)で、 208バイトのHTML+4バイトヘッダ=212バイト を格納
- 容量:239バイト、使用率:87%
- faviconとしては 極小サイズ でも簡易Webサイトを格納可能
faviconからWebサイトを復元する方法
- favicon画像を Canvas API で読み込み
- 各ピクセルの RGB値を抽出しバイト配列を再構築
- 先頭4バイトで データ長 を確認し、HTML部分を抽出
- UTF-8デコード で元のHTMLを復元
- サイト上では「 Render Website」ボタンで復元処理を実装
制約と実用性
- favicon自体は Webサイト全体ではなく、コンテンツのみ を持つ
- JavaScriptのローダー が必須
- 容量は非常に小さい
- 他の配布手段のほうが実用的
- 目的は 技術的限界の探求や遊び心 の発露
代替アプローチ
- SVG favicon に直接マークアップを埋め込み、読み出す手法
- PNGのコメントチャンク (tEXt, zTXt, iTXt)を利用
- ico形式 は複数解像度アイコンを格納可能で応用範囲拡大