基礎知識
視覚暗号(Visual Cryptography)は、画像を2枚のノイズのようなシェアに分割する技術です。単独のシェアからは何も読み取れませんが、2枚を重ね合わせると秘密の画像が浮かび上がります。
- 純粋に視覚的な復号 — 計算処理は不要です
- ピクセル拡張(例:2×2)により、シェアは元画像より大きくなります
- デモ、教育、紙ベースの認証に最適です
暗号化(シェア生成)
画像を2枚のランダムなシェアに分割します。
シェア A
シェア B
復号(重ね合わせ)
2枚のシェアを重ねて秘密を復元します。
乱数のわな(予測できる乱数は危険)
視覚暗号の「単独のシェアからは何もわからない」は、パターンを予測不能な乱数で選ぶことが前提です。ここでは、わざと予測できる擬似乱数(線形合同法、シード固定)でシェアを作り、片方のシェア(B)とシードだけから秘密が復元できてしまう様子を見せます。
秘密画像
シェア B(単独ではノイズ)
復元された秘密(攻撃の結果)
このツールの「暗号化」タブは crypto.getRandomValues(予測不能)を使うので、攻撃者はシードを知りようがなく、この復元はできません。予測できる乱数(Math.random やシード固定の擬似乱数)を秘密分散に使ってはいけない、という教訓です。
理論(研究)
視覚暗号(Visual Cryptography)は、1994年に Moni Naor と Adi Shamir によって提案された暗号方式です。
通常の暗号は「暗号文+鍵→復号アルゴリズム→平文」という流れを取りますが、視覚暗号では 復号に計算処理を必要とせず、人間の目そのものが復号器 となります。
基本的な仕組み(このツールは2×2に拡張)
秘密画像の1ピクセルを、2×2の4サブピクセル(うち2つが黒)のブロックに置き換えます。黒2つの置き方は6通りあり、ピクセルごとに乱数で1つ選びます。
白いピクセルの場合(両シェアに同じブロック):
黒いピクセルの場合(シェアBは反転):
👉 白は「黒2つ(灰)」、黒は「黒4つ(濃い黒)」になります。この濃さの差が、重ねたときに秘密として見えます。
- 人間の目で復号
PCやアルゴリズム不要。シェアを重ねるだけで秘密が復元できる。 - 単独シェアは情報を持たない
各シェアのブロックは、白でも黒でも6パターンに一様に散らばる。予測不能な乱数(crypto.getRandomValues)でパターンを選ぶので、1枚だけでは元が白か黒か手がかりが残らない。逆にMath.randomのように予測できる乱数だと、片方のシェアと乱数列から秘密を復元できてしまう。 - ピクセル拡張
秘密画像の1ピクセルを複数のサブピクセルに置き換えるため、シェアが大きくなる。 - 白黒画像向け
基本は2値画像。グレースケールやカラー対応は拡張手法が必要。
VSSS = Visual Secret Sharing Scheme(視覚復号型秘密分散法)
(2,2) スキーム → (k,n) スキーム
2枚で復元する方式から、n枚のうちk枚以上で復元できる方式へ一般化。
秘密分散共有との融合
暗号理論の秘密分散法と同様、複数人がシェアを持ち寄らないと復元できない。
拡張スキーム
- グレースケール・カラー対応(ビットプレーン分解、EVCS)
- 効率的な非拡張型スキーム
- 誤り訂正機能付きスキーム
認証・アクセス制御
2要素認証や入場確認に利用可能。シェアを重ねると認証マークが現れる。
偽造防止・透かし
チケット、商品ラベル、証明書に仕込み、真偽判定に活用。
セキュア情報配布
新聞・雑誌に片方のシェアを印刷、会員カードを重ねると秘密が見える。
QRコードとの融合
複数シェアを重ねると有効なQRコードが読める仕組み。BEC防止やユーザー認証に応用。
教育用途
「複数人で秘密を守る」仕組みを直感的に体験でき、暗号教育に適する。
本ツールは、「生成AIで作るセキュリティツール100」プロジェクトの一環として開発されました。
このプロジェクトでは、AIの支援を活用しながら、セキュリティに関連するさまざまなツールを100日間にわたり制作・公開していく取り組みを行っています。
本ツールの構成
- 基礎知識 — 視覚暗号の基本概念と特徴を解説
- 暗号化 — アップロードした画像を2枚のシェアに分離
- 復号 — 2枚のシェアを重ね合わせ、目視で秘密を確認
- 理論 — グレースケールやカラー拡張、(k,n) スキーム、応用例を紹介
プロジェクトの詳細については、こちらのページをご覧ください。