確かに誰もがテレビやインターネットで人々の写真を見ました。特に顔を隠すためにぼやけています。 たとえば、ビル・ゲイツ:
ほとんどの場合、これは機能します。なぜなら、顔を認識するのに十分に詳細な写真にぼかしを反転させる便利な方法がないからです。 だから、顔で、すべてがうまくいきます。 ただし、多くは機密
番号と
テキストを曖昧にすることに頼ってい
ます 。 これが悪い考えである理由を示します。
誰かがなんらかの恐ろしい理由で小切手またはクレジットカードの写真をインターネットに投稿したとしましょう(フォーラムで、100万ドルを稼いだ、何かおかしいことを示した、または何かのサイズをクレジットカードと比較したなど)。 。)数字を隠すにはあまりにも一般的なモザイク効果を使用して画像をぼかす:
誰も数字を読まないので安全だと思われますか? 間違った答え。 このスキームには攻撃があります。
手順1.きれいなチェック画像を取得する
これを行うには2つの方法があります。 グラフィカルエディターで数字を削除するか、同じ銀行の口座を開いて同じ角度から自分のカードを撮影し、ホワイトバランスとコントラストを組み合わせます。 次に、グラフィカルエディターで数値を削除します(高解像度の写真では、これが簡単です)。
もちろん、この例では、これは簡単に実行できます。
ステップ2.反復
スクリプトを使用して、考えられるすべてのアカウント番号を反復処理し、番号のグループを区切ってそれぞれのチェックを作成します。 たとえば、VISAカードでは、番号は4でグループ化されているため、各セクションを個別に処理できます。 これには、4×10,000 = 40,000の画像のみが必要であり、スクリプトによって簡単に生成されます。
ステップ3.各画像をオリジナルと同じようにぼかします
元の画像のぼかしに使用するモザイクタイルの正確なサイズとピクセルオフセットを決定し(簡単)、ぼかした画像のそれぞれで同じことを行います。 この場合、ぼやけた画像は8x8ピクセルのモザイクで構成されており、オフセットは画像の上部の境界線からカウントして決定されます(図示せず)。
次に、すべての画像を並べ替え、元の画像と同じようにぼかして、次のような画像を取得します。
ステップ4.ぼやけた各画像のモザイク輝度ベクトルを決定します。
これはどういう意味ですか? さて、モザイクバージョン0000001(増加)を見てみましょう。
...モザイクの各領域の輝度レベル(0〜255)を決定し、一貫した方法で名前を付けます
a=[a1、a2...、an] :
この場合、アカウント番号0000001はモザイク輝度ベクトルを作成します
a(0000001)=[213,201,190、...] 。 スクリプトを使用して各画像をぼかし、明るさを読み取ることで、同じ方法で各アカウント番号のモザイクの明るさベクトルを見つけます。 させる
a(x) -アカウント番号機能
x 。 それから
a(x)i モザイク輝度ベクトルのi番目のベクトル値を示します
a アカウント番号から取得
x 。 上
a(0000001)1=213 。
ここで、インターネットまたは任意の場所で見つかった元のコントロールイメージに対して同じ操作を行い、ここで呼び出すベクトルを取得します
z=[z1、z2、...zn] :
ステップ5.元の画像に最も近いものを見つける
元の画像のモザイクの輝度ベクトルを定義し、それを呼び出しましょう
z=[z1、z2、...zn] そして、各口座番号からの距離を計算するだけで
x )モザイクの輝度ベクトル(正規化後):
d(x)= sqrt((a(x)0/N(a(x))−z0/N(z))2+(a(x)1/N(a(x))−z1/N(z))2+...)
ここで、
N(a(x))
および
N(z)
は与えられた正規化定数です。
N(a(x))=(a(x)20+a(x)21+...)2
N(z)=(z20+z21+...)2
今最小のものを見つける
d(x) 。 クレジットカードの場合、可能な数字のごく一部が仮想的に可能なクレジットカードの数字を確認するため、ここでも複雑なことは何もありません。
たとえば、この例では、計算します
N(z)= sqrt(2062+2112+...)=844.78459
N(a(0000001))=907.47837
N(a(0000002))=909.20647
次に、距離の計算に進みます。
d(0000001)=1.9363
d(0000002)=1.9373
...
d(1124587)=0.12566
d(1124588)=$0.0000
...
アカウント番号はモザイク1124588に対応しているのでしょうか?
「しかし、解読しやすい独自の画像を使用しました!」
実世界では、Photoshopで撮影された架空の例ではなく、実際の写真です。 カメラの角度、不完全な配置などによるテキストの歪みがあります。 しかし、これは、人が歪みのタイプを正確に判断し、適切なスクリプトを作成することを妨げるものではありません! いずれにせよ、いくつかの最小定義距離が候補と見なすことができます。特に、クレジットカードの世界では、数字が4つのグループに美しく分割されており、実際に有効な数字は10のうち1つだけです。候補者。
これを実際の写真で実現するには、距離アルゴリズムを改善する必要があります。 たとえば、上記の距離の式を書き換えて、平均に加えて標準偏差を正規化できます。 また、モザイクの各領域のRGB値またはHSV値を個別に処理したり、スクリプトを使用して各方向に数ピクセルずつテキストを歪めたり比較したりすることもできます(高速PCでの比較は完全に制限されたままです)。 既存の最近傍アルゴリズムに類似したアルゴリズムを使用して、実際の写真の作業の信頼性を高めることができます。
そう、私は自分のイメージを使用し、このケースに合わせて調整しました。 ただし、実際の使用に合わせてアルゴリズムを確実に改善できます。 しかし、私はあなたの情報を捜していないので、何も改善する時間も欲望もありません。 ただし、1つ確かなことがあります。これは非常に単純な状況です。 画像をぼかすために単純なモザイクを使用しないでください。 すべてを含む画像の情報量を減らすだけです
log(10N)/log(2) アカウントデータの有効ビット。 このような画像を配布するときは、視覚情報の量を減らして個人情報へのアクセスを妨げるのではなく、個人情報を
削除する必要があります。
100×100のグラフィックイメージを想像してください。 ピクセルを平均し、それぞれを平均値に置き換えたと仮定します(つまり、写真を単一ピクセルの「モザイク」に変えました)。 256個の^(10000)個のバリアントから最大256個のバリアントをハッシュする関数を作成しました。 明らかに、受信した8ビットでは、元のイメージを復元することはできません。 ただし、元の画像には合計で10のオプションがあることがわかっている場合、これらの8ビットによって、どれが使用されたかを簡単に判断できます。
辞書攻撃のアナロジー
ほとんどのUNIX / Linuxシステム管理者は、/ etc / passwdまたは/ etc / shadowのパスワードが、SaltやMD5などの一方向関数で暗号化されていることを知っています。 暗号化されたテキストを見て誰もパスワードを解読できないため、これは非常に安全です。 認証は、ログイン時にユーザーが入力したパスワードと同じ一方向暗号化を実行し、この結果を保存されたハッシュと比較することにより発生します。 一致する場合、ユーザーはテストに合格しています。
ユーザーが辞書の単語をパスワードとして選択すると、一方向暗号化方式が簡単に破られることはよく知られています。 攻撃者が行う必要があるのは、英語の辞書全体を暗号化し、各単語の暗号化されたテキストを/ etc / passwdに保存されている暗号化されたテキストと比較し、パスワードとして正しい単語を選択することだけです。 したがって、ユーザーは一般に、単語ではないより複雑なパスワードを選択することをお勧めします。 辞書攻撃は次のように説明できます。
同様に、画像のぼかしは一方向の暗号化スキームです。 所有している画像を、公開用の別の画像に変換します。 しかし、通常、口座番号は数百万を超えないため、可能な数字の「辞書」を編集できます。 たとえば、すべての数値は0000001〜9999999です。その後、自動処理を開始し、これらの各画像を空の背景の写真に配置して、各画像をぼかします。 次に、ぼやけたピクセルを比較し、元のオプションに最も近いオプションを確認するだけです。
解決策
解決策は簡単です。画像をぼかさないでください! 代わりに、単にそれらを塗りつぶします。
ぼやけた写真のように、情報を完全に削除することを忘れずに、その量を減らすことを忘れないでください。