Замъгляването на конфиденциалната информация в изображенията е твърде лоша идея

Автор на тази статия е Деера Венкатраман (Dheera Venkatraman), много известен в последно време програмист и математик, който показва, защо не бива да се използва обикновеното замъгляване в изображенията за скриване на информацията например, от банковите карти

17
3430

Може би сте виждали в телевизионните програми или в интернет снимки на хора, които са нарочно замъглени, за да се скрият техните лица. Ето как е скрит Бил Гейтс:

По принцип тази идея работи, понеже няма как размитият образ да бъде върнат в оригиналното си състояние – в оригиналната снимка с висока детайлност, на която да бъде разпознато лицето. Така че с лицата всичко е наред и тяхното размиване може спокойно да се използва. Само че твърде много хора използват размиването за скриване на конфиденциална информация, съставена от числа и текст. Сега ще покажа, че това е твърде лоша идея.

Да предположим, че някой е качил в интернет снимка на своя чек или кредитна карта по някаква важна причина – например, за да докаже във форума, че е спечелил един милиона долара, и е размил изображението с помощта на стандартния алгоритъм тип „мозайка“, като по този начин е скрил цифрите.

Всичко изглежда нормално и безопасно, нали никой не може да прочете цифрите? ГОЛЯМА ГРЕШКА! Този метод лесно може да бъде атакуван.

Първа стъпка: намерете ясно изображение на същия, но непопълнен чек

Има два начина да се направи това. Можете да махнете цифрите с помощта на графичен редактор. А когато става дума за кредитни карти е по-добре да си откриете сметка в същата банка и да направите снимка на собствената си банкова карта от приблизително същия ъгъл, като се постараете да постигнете подобен баланс на бялото и подобен контраст. След това може да се използва Photoshop за премахване на групите цифри.

Ето как би могло да изглежда това (тук всичко нарочно е опростено):

Втора стъпка: итерации

Използваме скрипт за генериране на всички възможни номера на сметки, като същото трябва да се направи и ако става дума за чек. Така например, във всички карти VISA цифрите са групирани по 4 и е възможно индивидуално да се обработи всеки един от тези раздели. За тази цел са необходими само 4×10000 = 40000 изображения, което лесно се генерира с помощта на скрипт.

Трета стъпка: Размиване на всяко от тези изображения

Първо трябва в пиксели точно да се измерят размера и отместването на елементите на мозаечния алгоритъм, използвани за замъгляване на оригиналното изображение (това е лесно). След това трябва да направим същото за всяко от замъглените изображения. В този случай виждаме, че в замъгленото изображение се използват 8х8 пикселни елементи на мозайката. Ясно е, че ако е използван друг алгоритъм за замъгляване, действията ще са малко по-други, но много подобни.

А сега с помощта на същия алгоритъм размиваме генерираните при предишната стъпка изображения. Ще се получи нещо подобно:

Четвърта стъпка: Определяме вектора на яркостта на мозайката за всяко едно размито изображение

Какво означава това? Нека да погледнем мозаечната версия на 0000001 (изображението е увеличено)“


И да определим нивото на яркост в диапазона от 0 до 255 за всяка област от мозайката, като дадем имена за всяка от тях във вид a=[a_1,a_2…,a_n]:

В този случай при номер на банкова сметка 0000001 ще се създаде вектор на яркостта на мозаечното размиване a(0000001)=[213,201,190,…]. По същия начин изчисляваме вектора на яркостта за всяко от генерираните по-горе изображения, като използваме елементарен скрипт за размиване на всяко изображение и за изчисляване на неговия вектор на яркостта.

След това правим същото за изображението, което намерихме в интернет или където и да била на друго място. Ще получим вектор, който ще наречем z=[z_1,z_2,…z_n]:

Пета стъпка: Намираме най-сходното изображение

Първо определяме вектора на яркостта на изображението от интернет, който получава името z=[z_1,z_2,…z_n], а след това просто изчисляваме разстоянието за всеки номер на банковата сметка (x) до вектора на яркостта на мозайката (след нормализацията):

d(x)=sqrt((a(x)_0/N(a(x)) – z_0/N(z))^2 + (a(x)_1/N(a(x)) – z_1/N(z))^2 + …)

Където N(a(x)) and N(z) са константите на нормализацията, зададени като:

N(a(x)) = (a(x)_0^2 + a(x)_1 ^2 + …)^2
N(z) = (z_0^2 + z_1 ^2 + …)^2

Сега просто намираме най-малкия d(x). При кредитните карти само малка част от комбинацията от цифри е валидна и възможните номера на банковата карта се разкриват по-лесно. Наистина няма нищо сложно в това.

В нашия случай получаваме:

N(z) = sqrt(206^2+211^2+…) = 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.00000

И така, номерът на вашата банкова сметка не е ли 1124588?

„Но ти използва някакво собствено изображение, което лесно се разгадава!“

В реалния свят истинските снимки, а не фиктивните примери, са направени с Photoshop. Има изкривявания на текста заради по-различния ъгъл на заснемане, поради неправилно подравняване и т.н. Но това не пречи да се види какъв точно е типът на изкривяването, което да се коригира с допълнителен скрипт. Но така или иначе няколкото специфични разстояния могат да се измерят, особено в света на кредитните карти, където цифрите са красиво разделени на групи по 4, а само 1 от 10 номера са валидни. По този начин много по-лесно се отсяват невалидните кандидати.

За да се използва този подход и при реални снимки, е необходимо да се подобри алгоритъмът за разстоянията. Възможно е да се обработват RGB или HSV значенията за всяка област от мозайката и да се използват скриптове за изкривяване на текста с няколко пиксела. Има редица други подобни методи, силно улесняващи разпознаването на размитите изображения.

Да, аз използвах собствено изображение, което е специално приспособено за този случай. Но е ясно, че накратко описаният алгоритъм може да бъде сериозно подобрен. Аз нямам нито време, нито желание да подобрявам каквото и да било, понеже не искам чужда конфиденциална информация. Но със сигурност може да се каже, че това е съвсем лесна ситуация и цифрите лесно могат да се видят. Не използвайте съвсем опростени мозайки, за да размивате изображенията. Всичко, което правите по този начин, е че намалявате количеството информация в изображението, което съдържа едва log(10^N)/log(2) ефективни бита. Когато разпространявате подобни изображения, идеята е да премахнете личната информация, а не просто да затрудните достъпа до нея, като намалите количеството визуална информация.

Представете си изображение с резолюция 100х100 пиксела. Да предположим, че аз просто съм усреднил пикселите и съм заменил всеки от тях с неговото средно значение – тоест, превърнал съм изображението в мозайка с размер на елемента 1 пиксел. Това е функция, която от 256^(10000) варианта се хешира до 256 варианта. Очевидно е, че с получените 8 бита няма как да се възстанови оригиналното изображение. Но ако знаете, че има едва 10 варианта на това изображение, то по тези 8 бита съвсем лесно може да се разпознае оригинала.

Аналогия с речниковата атака

Повечето системни администратори на UNIX/Linux системи знаят, че паролите в /etc/passwd и /etc/shadow се криптират с помощта на едностранна функция, като например Salt или се хешират чрез MD5 алгоритъма. Това е достатъчно безопасно, понеже никой не може да разбере паролата по криптирания текст. Проверката се извършва, като се използва същото едностранно криптиране и/или хеширане на въведената от потребителя парола при логване в системата. Полученото се сравнява с хеша на вярната парола и ако съвпадат, потребителят успешно е преминал проверката.

Добре е известно, че този метод на криптиране не е надежден, ако е използвана дума от речник. Всичко което трябва да направи хакерът е да криптира по същия начин всичките английски думи (които не са чак толкова много) и да сравни получените комбинации с криптирания текст, записан в /etc/passwd, и да подбере вярната парола. Ето защо се препоръчва да се избират сложни съчетания от цифри и букви, които не са думи. Речниковата атака може да бъде илюстрирана по следния начин:

Аналогично, размитите изображения са едностранна система за криптиране. Вие преобразувате вашето изображение в друго изображение, подходящо за публикуване. Но понеже номерата на банковите сметки обикновено не превишават милиони, ние по съвсем същия начин изграждаме „речник“ на възможните комбинации. В нашия случай на всички номера от 0000001 до 9999999. След това стартираме автоматичната обработка, която помества всяко от тези изображения върху съответното място на изчистената снимка и размиваме. Остава само да сравним размитите пиксели и да видим, кои точно варианти са най-близки до оригинала.

Решението:

Решението не е сложно: не размивайте изображенията! Вместо това просто запълнете полетата с черен цвят:

Добре е да помним, че всъщност идеята е напълно да се премахне информацията, а не да се намали нейното количество, както става при размиването на изображенията.

17
ДОБАВИ КОМЕНТАР

avatar
8 Коментари
9 Отговори на коментарите
11 Последователи
 
Коментарът с най-много реакции
Най-горещият коментар
  Абонирай се  
нови стари оценка
Извести ме за
assa
assa

Защо са ми алгоритми за замъгляване и прочие, когато си имам paint?

bure_s_barut
bure_s_barut

Цензурирам с Paint. Един черен правоъгълник и онези с алгоритмите и ИИ да се гръмнат! 😀

Капитализъм
Капитализъм

Същото важи и за хартиените документи, ако се нарязват с шредер и след това някой сканира цялата купчина, може да се ползва ИИ алгоритъм и да се сглоби цялото съдържание на документа, след което ИИ OCR ще го превърне дори и в текст без артефактите. Поради тази причина следващото поколение за изискване за сигурност на нарязани документи ще включва и изгаряне и стриване на изгореното.

saentist
saentist

Кофа с боя / киселина 😉
по ефективно 😉

assa
assa

Тенджера с вода и миксер

115
115

фантазьор :)))

bure_s_barut
bure_s_barut

Преди няколко месеца унищожих една чанта с документи в леген пълен с няколко литра разтвор за отпушване на канали(със сода каустик). Всичко стана на каша и после отиде в тоалетната.

П.П.: За съжаление нямах възможност да ги изгоря, но с изгаряне в печка щеше да стане по-лесно.

115
115

Само си мислиш, че си ги унищожил. Сега @Капитализъм ще пусне изкуствения интелект да сканира тоалетната или печката и ще възстанови всичко…

Капитализъм
Капитализъм

Не е никаква фантазия, а реално демонстрирана случка. Имаш ли си на идея какво може да става с боклука пред посолства и агенции? Поразрови се за статията, че ме мързи.

Който разбира тук се спира
Който разбира тук се спира

Аз 89-та година си бърсах задника с в-к Дума и виж кво стана… бедна ми е фантазията, ако си направя фунийки от Форбс… или заспя с Плейбой….

RB3301
RB3301

Най-после хубава статия.

Кока кола
Кока кола

Добър превод бих казал аз.

асsasas
асsasas

Защо в статията няма „разчастване“?

115
115

Нека разчастването да започне сега!

A.com
A.com

Преди години няколко педофила бяха хванат, чрез използване на техни снимки, на които си „замазали“ лицата с някои от филтрите на Фотошоп. Е, оказа се, че не е особено трудно да се направи обратното на това „замазване“, след като се знае алгоритъма на работа на самия замазващ филтър. Изгоряха педофилите и отидоха в затвора.

Биткойн = Балон = Пирамида
Биткойн = Балон = Пирамида

Автора на оригиналната статия се е опитал да покаже и докаже колко е лесно да се прочетат пикселизирани цифри и букви, но всъщност е направил точно обратното – показал е колко трудно и практически невъзможно е това за 99.999999% от населението на планетата.

hokun
hokun

А дали авторът на статията знае що е то salt и има ли той почва у нас?

Лично аз залагам на НЕ.