Tentunya semua orang melihat di TV dan di Internet foto-foto orang, terutama buram untuk menyembunyikan wajah mereka. Misalnya, Bill Gates:
Sebagian besar, ini berfungsi karena tidak ada cara yang nyaman untuk membalikkan blur menjadi foto yang cukup rinci untuk mengenali wajah. Jadi dengan wajah semuanya baik-baik saja. Namun, banyak yang menggunakan cara untuk mengaburkan
nomor dan
teks rahasia. Saya akan menunjukkan mengapa ini adalah ide yang buruk.
Misalkan seseorang memposting foto cek atau kartu kreditnya di Internet karena alasan yang mengerikan (membuktikan di forum bahwa ia menghasilkan jutaan dolar atau menunjukkan sesuatu yang lucu, atau membandingkan ukuran sesuatu dengan kartu kredit, dll. .), mengaburkan gambar menggunakan efek mosaik yang terlalu umum untuk menyembunyikan angka:
Tampaknya aman karena tidak ada yang akan membaca angka-angkanya? JAWABAN SALAH. Ada serangan pada skema ini:
Langkah 1. Dapatkan gambar cek bersih
Ada dua cara untuk melakukan ini. Anda dapat menghapus angka-angka dalam editor grafis, atau membuka akun di bank yang sama dan memotret kartu Anda sendiri dari sudut yang sama, menggabungkan white balance dan kontras. Kemudian hapus angka-angka dari itu di editor grafis (dalam foto resolusi tinggi, ini lebih mudah dilakukan).
Dalam contoh kita, tentu saja, ini mudah dilakukan:
Langkah 2. Iterasi
Gunakan skrip untuk beralih ke semua nomor akun yang mungkin dan buat cek untuk masing-masing kelompok yang terpisah. Misalnya, pada kartu VISA, angka dikelompokkan berdasarkan 4, sehingga Anda dapat memproses masing-masing bagian secara individual. Ini hanya membutuhkan 4 Γ 10.000 = 40.000 gambar, yang mudah dihasilkan oleh skrip.
Langkah 3. Mengaburkan setiap gambar secara identik dengan aslinya
Tentukan ukuran dan piksel yang tepat offset ubin mosaik yang digunakan untuk mengaburkan gambar asli (mudah), dan kemudian lakukan hal yang sama dengan masing-masing gambar buram Anda. Dalam kasus ini, kita melihat bahwa gambar buram terdiri dari mosaik 8x8 piksel, dan offset ditentukan dengan menghitung dari batas atas gambar (tidak ditampilkan):
Sekarang kita memilah-milah semua gambar, mengaburkannya dengan cara yang sama seperti yang asli, dan kita mendapatkan sesuatu seperti ini:
Langkah 4. Tentukan vektor kecerahan mosaik dari setiap gambar buram.
Apa artinya ini? Baiklah, mari kita ambil versi mosaik 0000001 (meningkat):
... dan tentukan tingkat kecerahan (0-255) dari setiap area mosaik, beri nama dengan cara yang konsisten
:
Dalam hal ini, nomor akun 0000001 menciptakan vektor kecerahan mosaik
. Kami menemukan vektor kecerahan mosaik untuk setiap nomor akun dengan cara yang sama, menggunakan skrip untuk mengaburkan setiap gambar dan membaca kecerahan. Biarkan
- fungsi nomor akun
. Lalu
menunjukkan nilai vektor ke-i dari vektor kecerahan mosaik
diperoleh dari nomor akun
. Di atas
.
Sekarang kita melakukan hal yang sama untuk gambar referensi asli yang kita temukan di Internet atau di mana saja, mendapatkan vektor yang akan kita panggil di sini
:
Langkah 5. Temukan yang paling dekat dengan gambar aslinya.
Tentukan vektor kecerahan dari mosaik gambar asli, sebut saja
dan kemudian hanya menghitung jarak dari setiap nomor akun (ditunjukkan oleh
) ke vektor kecerahan mosaik (setelah normalisasi):
di mana
N(a(x))
dan
N(z)
adalah konstanta normalisasi yang diberikan
Sekarang temukan yang terkecil
. Untuk kartu kredit, hanya sebagian kecil dari jumlah yang memungkinkan yang mengkonfirmasi jumlah kartu kredit yang mungkin secara hipotetis, jadi tidak ada yang rumit di sini.
Misalnya, dalam kasus kami, kami menghitung
dan kemudian lanjutkan untuk menghitung jarak:
Mungkin nomor akun sesuai dengan mosaik 1124588?
"Tapi kamu menggunakan gambarmu sendiri, yang mudah diuraikan!"
Di dunia nyata, foto nyata, bukan contoh fiktif yang diambil di Photoshop. Kami memiliki distorsi teks karena sudut kamera, penyelarasan tidak sempurna dan sebagainya. Tetapi ini tidak mencegah seseorang untuk secara akurat menentukan jenis distorsi dan membuat skrip yang sesuai! Bagaimanapun, beberapa jarak minimum yang ditetapkan dapat dianggap sebagai kandidat, dan khususnya dalam dunia kartu kredit, di mana angka-angka dibagi dengan indah menjadi kelompok-kelompok 4, dan hanya 1 dari 10 angka yang sebenarnya merupakan angka yang valid, yang membuatnya mudah untuk dipilih dari beberapa kemungkinan besar. kandidat.
Untuk mewujudkan ini dalam foto nyata, algoritma jarak harus ditingkatkan. Misalnya, Anda dapat menulis ulang rumus jarak di atas untuk menormalkan deviasi standar selain rata-rata. Anda juga dapat secara mandiri memproses nilai-nilai RGB atau HSV untuk setiap area mosaik, serta menggunakan skrip untuk mendistorsi teks dengan beberapa piksel di setiap arah dan membandingkan (yang masih membuat Anda memiliki jumlah perbandingan yang sangat terbatas pada PC cepat). Anda dapat menggunakan algoritme yang mirip dengan algoritme tetangga terdekat yang ada untuk meningkatkan keandalan kerja dalam foto nyata.
Jadi ya, saya menggunakan gambar saya dan mengadaptasinya untuk kasus ini. Tetapi algoritme pasti dapat ditingkatkan untuk penggunaan di dunia nyata. Tetapi saya tidak punya waktu atau keinginan untuk meningkatkan apa pun, karena saya tidak mencari informasi Anda. Tetapi satu hal yang pasti: ini adalah situasi yang sangat sederhana. Jangan gunakan mosaik sederhana untuk mengaburkan gambar. Yang Anda lakukan adalah mengurangi jumlah informasi dalam gambar yang berisi segalanya
bit data akun yang efektif. Saat Anda mendistribusikan gambar semacam itu, Anda ingin
menghilangkan informasi pribadi daripada menghalangi akses ke sana dengan mengurangi jumlah informasi visual.
Bayangkan gambar grafis 100 Γ 100. Misalkan saya hanya membuat rata-rata piksel dan mengganti masing-masingnya dengan nilai rata-rata (yaitu, saya mengubah gambar menjadi βmosaikβ piksel tunggal). Anda baru saja membuat fungsi yang, dari 256 ^ (10.000) varian, di-hash hingga 256 varian. Jelas, dengan 8 bit yang diterima, Anda tidak akan dapat mengembalikan gambar asli. Tetapi jika Anda tahu bahwa secara total ada 10 opsi untuk gambar asli, maka menggunakan 8 bit ini Anda dapat dengan mudah menentukan mana yang digunakan.
Analogi Serangan Kamus
Sebagian besar administrator sistem UNIX / Linux tahu bahwa kata sandi di / etc / passwd atau / etc / shadow dienkripsi dengan fungsi satu arah, seperti Salt atau MD5. Ini cukup aman, karena tidak ada yang bisa mendekripsi kata sandi dengan melihat teks yang dienkripsi. Otentikasi terjadi dengan melakukan enkripsi satu arah yang sama dengan kata sandi yang dimasukkan oleh pengguna ketika memasuki sistem, dan membandingkan hasil ini dengan hash yang disimpan. Jika cocok, pengguna telah berhasil lulus tes.
Diketahui bahwa skema enkripsi satu arah dengan mudah rusak ketika pengguna memilih kata kamus sebagai kata sandi. Yang perlu dilakukan penyerang adalah mengenkripsi seluruh kamus bahasa Inggris, membandingkan teks terenkripsi dari setiap kata dengan teks terenkripsi yang disimpan di / etc / passwd, dan memilih kata yang tepat sebagai kata sandi. Oleh karena itu, pengguna biasanya disarankan untuk memilih kata sandi yang lebih rumit dan bukan kata-kata. Serangan kamus dapat diilustrasikan sebagai berikut:

Demikian pula, gambar blur adalah skema enkripsi satu arah. Anda akan mengonversi gambar yang Anda miliki menjadi gambar lain yang dimaksudkan untuk publikasi. Tetapi karena nomor akun biasanya tidak melebihi jutaan, kami dapat menyusun "kamus" dari angka-angka yang mungkin. Misalnya, semua angka berasal dari 0000001 hingga 9999999. Kemudian mulailah pemrosesan otomatis, yang menempatkan setiap gambar ini pada foto latar belakang kosong - dan mengaburkan setiap gambar. Kemudian tetap hanya untuk membandingkan piksel buram dan melihat opsi mana yang paling cocok dengan aslinya.
Solusi
Solusinya sederhana: jangan mengaburkan gambar! Sebaliknya, cukup lukis di atasnya:
Ingatlah bahwa Anda ingin sepenuhnya menghapus informasi, dan tidak mengurangi jumlahnya, seperti dalam foto buram.