Привет, Хабр.
Вы не задумывались о таком обстоятельстве, что век пользовательской криптографии безвозвратно уходит. Нет, я не о том, что шифрование мессенджеров и криптовалюты сегодня в опале. Я о старом добром ДБО, проще говоря о системах банк-клиент. Еще каких-то 10 лет назад любой уважающий себя банк-клиент состоял из софта и токена с цифровой подписью. А сегодня это уже практически раритет, все повсеместно переходят на смс-подтверждения, что безусловно на порядок удобнее чем возня с настройками крипто-провайдеров и установками сертификатов ЦП.
В чем же дело, неужели удобство перевесило безопасность в такой сфере как финансы? А вот и нет, оказывается, что безопасность обоих вариантов одинаково низкая. Как же так, ну понятно смс аутентификация – далеко не идеал безопасности с возможностью перехвата и подмены смсок, но крипта да еще и в аппаратном носителе! Всё дело в том, что любая система безопасности оценивается по её самому слабому звену.
Опишу проблему на примере Алисы и Боба. Представьте, что в одной руке у Алисы смартфон, на экране которого выведен какой-либо платежный документ. А в другой руке беспроводной токен с цифровой подписью. Алисе предстоит подписать электронную платежку, для этого достаточно сопрячь токен и смартфон и кликнуть «подписать».
Как будто все достаточно просто и безопасно – оба устройства принадлежат Алисе и оба в её руках. Но допустим есть Боб, который решает в этот момент перехватить Алисин документ и направить в её токен другой документ – например платежку, в которой со счета Алисы уйдет крупная сумма на неизвестный счет.
![image](https://habrastorage.org/r/w780q1/webt/zm/vb/gv/zmvbgvukuzt6cjqnr-bl7om1rte.jpeg)
Здесь мы не будем рассматривать различные сценарии как это сделать, достаточно перечислить те потенциально небезопасные участки, где Боб может осуществить задуманную подмену. Итак, потенциальная площадь атаки включает в себя: операционную систему смартфона, процессор, видеопроцессор, ОЗУ, беспроводный канал связи. Дистанционный перехват управления смартфоном позволяет на любом из перечисленных участков организовать Бобу атаку примерно по следующему алгоритму: отследить что шлюз токена открыт для приема данных, перехватить документ Алисы по пути от ОЗУ до беспроводного передатчика, направить в шлюз токена свой документ, принять с беспроводного приемника смартфона подписанный документ и направить его на определенный хост. При этом вывести на экран смартфона информацию об успешно подписанном документе Алисы. Атаку можно провести и через беспроводной канал связи, но в целом алгоритм атаки будет аналогичным.
У кого-то может возникнуть вопрос – а как же криптография, неужели нельзя применить шифрование для защиты от Боба. Шифрование применить конечно можно, но вот спрятать ключи от Боба, перехватившего управление смартфоном, на самом смартфоне увы невозможно. Но даже если ключи шифрования вывести за пределы устройства это не спасет ситуацию, т.к. шифровать электронный документ имеет смысл лишь перед его отправкой в токен для защиты беспроводного канала. Все остальные операции с документом в самом смартфоне осуществляются исключительно в открытом виде. В этой ситуации пользователю остается лишь уповать на обновленный антивирус и банковский антифрод.
Хотелось бы сказать пару слов об этой противоречивой технологии. Если кто сталкивался с этим меня поймут. Любой подозрительный с точки зрения банка платеж мгновенно блокируется, а с ним и блокируется счет, после чего следует многодневный марафон по сбору документов и доказыванию банку что ты добропорядочный гражданин хотел перевести денег другому добропорядочному гражданину. Ну это так, навеяло недавними событиями из собственного опыта.
Таким образом мы имеем разновидность угрозы человек посередине — «Man In The Middle» (MITM). В данном случае посередине между экраном смартфона и токеном с цифровой подписью. Но в отличие от классической атаки «человек посередине» нейтрализовать её криптографическими методами невозможно. Не знаю имеет ли данный вид атаки свой специфический термин, мы назвали её человек в устройстве — «Man In Device» (MID). Далее по тексту буду именно так называть данную атаку.
Растущие возможности злоумышленников по удаленному перехвату управления чужим компьютером или смартфоном открывают перспективы для проведения различных хакерских атак. Причем наибольший ущерб могут нанести атаки, связанные с электронной подписью – подменой документов при подписании так и с подменой документов при их просмотре. Например, вам демонстрируют на смартфоне электронный паспорт, электронную доверенность, электронное удостоверение, электронный билет и т.д. Подлинность документа подтверждена электронной подписью – но как вам быстро и гарантированно проверить что электронный документ действительно подписан электронной подписью, и она соответствует стандарту? Надеюсь все понимают, что штампик с надписью «подписано квалифицированной электронной подписью» к электронной подписи ни какого отношения не имеет, и в фотошопе его можно приклеить к любому электронному документу.
Одно дело, если вам по долгу службы требуется постоянно проверять подлинность таких электронных документов – в этом случае у вас на руках должно быть сертифицированное средство для приема, просмотра и проверки электронных документов. Например QR сканер и подключенный к нему компьютер с предустановленным сертифицированным ПО.
Но если вы простой пользователь или в вашей организации нет потребности регулярно выполнять данные операции и у вас в наличии обычный смартфон для проверки электронного документа — то вы рискуете стать жертвой атаки с подменой документа на экране вашего девайса.
Существуют ли сегодня способы и устройства для нейтрализации атаки «Man In Device»? Да такие устройства существуют, это пользовательские терминалы класса Trust Screen.
![](https://habrastorage.org/r/w1560/webt/od/dz/q1/oddzq1vn2u_acjzi3mft1p8lghu.png)
Принцип их действия – физически не допустить злоумышленника в само устройство. По сути это тот же смартфон, но с предустановленным и сертифицированным ПО, с интегрированным ПО для работы с цифровой подписью и отрезанным от внешнего мира. И у него есть только две функции – принять электронный документ определенного формата, вывести на экран, подписать и с подписью вернуть обратно. Либо принять подписанный документ, вывести на экран сам документ и сообщение о валидности цифровой подписи. В целом удобно, безопасно и надежно, но хотелось бы иметь для таких случаев что-то более компактное, в идеале не нуждающееся в зарядке и такое, что всегда под рукой.
С такой установкой 1,5 года назад мы начали мозговой штурм в поисках нового решения угрозы «Man In Device».
Для наглядности найденного решения еще раз возвратимся к модели угрозы с Алисой и Бобом. Итак, Алиса по прежнему держит в одной руке смартфон, неважно какой марки и модели и неважно с какой операционной системой. Назовем его не доверенным устройством. В другой руке Алиса держит некое устройство с цифровой подписью, будем считать, что это сертифицированное доверенное устройство, произведенное по всем канонам информационной безопасности и Бобу не под силу взломать данное устройство Алисы. Но Боб без труда проник в смартфон Алисы и готов реализовать на нем атаку «Man In Device».
Вы можете заметить, что пока ситуация ничем не отличается от той, что была описана выше, в которой Боб с легкостью проворачивает мошенничество с подменой документа. Где же решение?
Найденное решение, названное нами «эффектом доверенного просмотра» не обезвреживает данные атаки, но позволяет гарантированно подтвердить, что на экране смартфона демонстрируется правильный документ. Этот принцип схож с идеей квантовой криптографии в которой канал связи не защищается, но стороны гарантированно могут определить попытку перехвата ключа. Так и в нашей технологии – мы не беремся объять необъятное в попытке защитить каналы связи, операционную систему, процессор и т.д., но наше решение способно гарантированно определить факт подмены или изменения электронного документа на любых не доверенных устройствах, будь то смартфон или персональный компьютер.
Чтобы понять, как работает наша технология еще раз представим, что для подписания документа – файл с документом пересылается из смартфона в доверенное устройство. Но по пути движения документа у злоумышленника есть масса способов заменить документ или данные в нем. И здесь возникает главный вопрос. Как убедиться, что миниатюрное доверенное устройство, не имеющее экрана для отображения принятого документа — получило правильный документ? В нашем решении мы обратно пересылаем из доверенного устройства документ и заново выводим его изображение на экран смартфона, но снабдив изображение документа в доверенном устройстве определенными защитными метками, сгенерированными особым образом. Разработанная технология создает «эффект доверенного просмотра» за счет принципов визуальной криптографии – экзотического направления в области современной криптографии.
Один из самых известных методов принадлежит Мони Наору и Ади Шамиру, разработавшим его в 1994 году. Они продемонстрировали графическую схему с разделением секрета, согласно которой изображение было разделено на n частей так, что только человек, имеющий все n частей мог расшифровать изображение, в то время как остальные n-1 части не показали никакой информации об оригинальном изображении.
![image](https://habrastorage.org/r/w1560/webt/mv/p0/4p/mvp04pefaj967hkbcubynyq5onu.png)
Соединение разделенных секретов позволяет увидеть скрытую информацию
В нашей технологии работает обратный механизм – три секрета объединяются в единое целое, которое не позволяет вычленить каждый из секретов за строго ограниченное время. И лишь разделение целого на три исходные части позволяет увидеть скрытую в них информацию.
здесь спрятано 3 секрета
![](https://habrastorage.org/r/w1560/webt/er/3p/zi/er3pzimtmhkeye7x4shrxnl3dos.png)
Исходный текст состоит из трех черно-белых изображений, каждый пиксель либо 0 – прозрачный, либо 1 – черный.
При наложении изображений друг на друга пиксели сливаются по следующему принципу:
1) 0 + 0 + 0 = 0
2) 1 + 0 + 0 = 1 или 0 + 1 + 0 = 1 или 0 + 0 + 1 = 1
3) 1 + 1 + 0 = 1 или 1 + 0 + 1 = 1 или 0 + 1 + 1 = 1
4) 1 + 1 + 1 = 1
Таким образом слияние изображений приводит к утрате части информации (строки 2 и 3) что не позволит без ключа восстановить каждое из изображений по отдельности. Так происходит этап шифрования.
Теперь покажу, как сформировать ключ для дешифрования, то есть для обратного разложения картинки на исходные составляющие.
Например, перед нами три фрагмента исходных изображений, накладываемых друг на друга:
Зашифрованный фрагмент изображения содержит пиксели черного и прозрачного цвета и имеет меньший объем информации по сравнению с тремя исходными изображениями.
Чтобы создать ключ дешифрования нужно пробежаться по пикселям черного цвета в каждом фрагменте исходных изображений и сопоставить их в соответствии с координатами.
Полученный ключ будет содержать координаты черных пикселей в зашифрованном изображении и их исходное содержание.
В приведенном примере получится следующий ключ:
a1:110,c2:011,d2:111,b4:010,a5:110,c5:111
где a1 – координаты черного пикселя в зашифрованном изображении, а 110 – это цвета пикселей с теми же координатами в исходных изображениях.
Данный крипто алгоритм по сути является односторонней функцией с ключом.
Давайте посчитаем крипто стойкость данного алгоритма. Каждый пиксель черного цвета является результатом слияния пикселей трех слоев. При этом как было показано выше – существует 7 вариантов такого слияния, приведу их еще раз:
![](https://habrastorage.org/r/w1560/webt/s8/vx/ph/s8vxphxe4pjhjoj8rxr-y_uiew4.png)
Таким образом в небольшом фрагменте изображения, приведенном в примере, состоящем из 6 пикселей черного цвета существует 7 в 6-й степени или 117 649 вариантов разложения на исходные картинки.
Несложно прикинуть, что если на полноформатном изображении таких пикселей окажется, например, 1000, то количество вариантов составит 7 в 1000-й степени что составит 125325663996571831810755483238273420616498507508098617146349500752097059631738116432448839054351520763198615919551594076685828989467263022761790838270854579830015111246661203984624358929832571615718014704096305668097507613273663023226895250541385927158426088684494082416768617708189592286936039922311125683719215046689156738352590137241554510185855964549927575493247391132548534378497978806084951085874202011836362315727420109554782988791530088289711844550500230485638413189947132142243947334199259300735622492937419453650061490302105127920314430401636855677549136337481321811349678427076091437345045399337348611261168055929355402992823192491190360027036112283180935872775214517464013178274657100736321564606838252739601156414628445543663144696050650160812621814327062666195172701780200286645023823083185928061371310300829284071141207731280600001 комбинаций.
Понятно, что при данной крипто стойкости прямой метод взлома невозможен. Но у потенциального взломщика есть другие методы криптоанализа.
С учетом того, что в последнее время системы распознавания изображений на основе нейросетей сильно шагнули вперед – потенциальный злоумышленник вполне мог бы использовать их для распознавания изображения кода подлинности на едином изображении. Однако данный инструмент в данном случае окажется бессильным по трем причинам.
Во-первых, код подлинности выводится в деформированном виде в форме капчи. Причем расположение капчи и угол наклона также имеют случайный характер.
Во-вторых, капча смешана с изображением защитной сетки, имеющей случайный узор и текстом документа.
И в-третьих, времени на попытку распознавания у злоумышленника крайне мало, 1-2 секунды. Именно столько времени должно пройти с момента нажатия кнопки пользователем на доверенном устройстве и появлением изображения на экране не доверенного устройства.
![](https://habrastorage.org/r/w1560/webt/uz/6g/pv/uz6gpv6orji86zabe91bsw81kty.png)
Попробуйте распознать кодовое слово, смешанное с защитной сеткой и частью текста документа
Этот же фрагмент после того, как слой с защитной сеткой частично обесцвечен – кодовое слово распознается без труда
Однако обзор представленной технологии был бы неполным, если не упомянуть о потенциальной лазейке, которую мог бы использовать хакер. Дело в том, что один из трех слоев на едином изображении заранее известен злоумышленнику Бобу – это изображение с текстом документа. Естественно, что у Боба также есть изображение и своего документа, которым он собирается подменить документ Алисы. И далее задача Боба может быть значительно упрощена. Зная один из трех секретов в виде слоя с изображением текста можно из единого изображения вычесть маску с изображением данного секрета. В итоге останется изображение, включающее в себя 2 слоя – с защитной сеткой и кодом подлинности. После чего полученное изображение смешивается с изображением текста оригинального документа. И все – задача взлома решена.
Правда здесь все не так просто: на тех участках, где пиксели текста перемешаны с пикселями защитной сетки и/или кода подлинности после вычитания маски останутся видимые разрывы. Но если оригинальный текст отличается от фальшивого небольшим количеством символов на локальном фрагменте, то после наложения остаточного изображения защитной сетки с кодом подлинности на оригинальный текст – данные разрывы на большинстве участков исчезнут и останутся лишь на небольшом фрагменте, где осуществлена подмена. Так что Алиса может и не заметить подмену документа.
Чтобы не допустить возможность взлома по приведенному сценарию предлагается достаточно простое решение. В доверенном устройстве изображение текста документа предварительно подвергается незначительной деформации с использованием случайных значений. Самый простой способ деформации – изменение ширины каждого из 4-х полей каждой страницы документа.
Причем, ширина каждого поля изменятся на свое случайное значение либо в сторону увеличения, либо уменьшения. Достаточно изменить ширину полей на несколько пикселей и проведение данной атаки будет видно невооруженным взглядом в форме остаточных артефактов из частей оборванных символов после вычитания маски. В случае, если текст документа содержит линии, как на примере ниже, то при деформации текста — изображения линий не затрагиваются.
![](https://habrastorage.org/webt/yy/vr/0l/yyvr0lebzdgsmb-ebjohsbomjng.gif)
плавное обесцвечивание защитной сетки позволяет убедиться, что текст документа при этом не меняется
Для простоты понимания приведен пример с черно-белыми изображениями. Но при определенной модификации алгоритма его можно применить и к цветным изображениям.
Теперь пару слов о роли пользователя в данной технологии. Использование в технологии методов визуальной криптографии подразумевает использование зрения пользователя в качестве основной метрики для оценки отсутствия или наличия атаки «Man In Device». По сути речь идет о визуальной валидации, которая выражается в двух последовательных операциях, совершаемых пользователем:
1. сравнении кода подлинности на индикаторе доверенного устройства с кодом подлинности в капче на изображении документа
![](https://habrastorage.org/r/w780q1/webt/3y/t_/qp/3yt_qprrcw7c58mdibr6ywt0uwy.jpeg)
в качестве доверенного устройства предлагается создать специальную пластиковую карту
с индикатором кода подлинности и кнопками «подтвердить» и «отменить»
2. сравнении текста, проявляемого при постепенном уменьшении контрастности слоев с защитной сеткой и кодами подлинности с оригинальным текстом документа
Последняя операция основана на способности человека замечать малейшие изменения на общей картине. Как охотник способен в лесу сквозь ветви деревьев заметить движущуюся дичь по малейшим её очертаниям, так же и здесь пользователь может ясно увидеть, что постепенно проявляющийся текст документа при уменьшении контрастности двух других слоев изображения — не меняется и по контексту соответствует оригиналу.
Именно визуальная валидация создает конечный эффект доверенного просмотра.
P.S. В следующей части я постараюсь рассказать о том, с какими проблемами пришлось столкнуться при разработке прототипа, как можно перенести часть сложных вычислений из доверенного устройства на доверенный сервер без ущерба для безопасности и удалось ли нам найти инвестора в проект.
Вы не задумывались о таком обстоятельстве, что век пользовательской криптографии безвозвратно уходит. Нет, я не о том, что шифрование мессенджеров и криптовалюты сегодня в опале. Я о старом добром ДБО, проще говоря о системах банк-клиент. Еще каких-то 10 лет назад любой уважающий себя банк-клиент состоял из софта и токена с цифровой подписью. А сегодня это уже практически раритет, все повсеместно переходят на смс-подтверждения, что безусловно на порядок удобнее чем возня с настройками крипто-провайдеров и установками сертификатов ЦП.
В чем же дело, неужели удобство перевесило безопасность в такой сфере как финансы? А вот и нет, оказывается, что безопасность обоих вариантов одинаково низкая. Как же так, ну понятно смс аутентификация – далеко не идеал безопасности с возможностью перехвата и подмены смсок, но крипта да еще и в аппаратном носителе! Всё дело в том, что любая система безопасности оценивается по её самому слабому звену.
Алиса и Боб
Опишу проблему на примере Алисы и Боба. Представьте, что в одной руке у Алисы смартфон, на экране которого выведен какой-либо платежный документ. А в другой руке беспроводной токен с цифровой подписью. Алисе предстоит подписать электронную платежку, для этого достаточно сопрячь токен и смартфон и кликнуть «подписать».
Как будто все достаточно просто и безопасно – оба устройства принадлежат Алисе и оба в её руках. Но допустим есть Боб, который решает в этот момент перехватить Алисин документ и направить в её токен другой документ – например платежку, в которой со счета Алисы уйдет крупная сумма на неизвестный счет.
![image](https://habrastorage.org/webt/zm/vb/gv/zmvbgvukuzt6cjqnr-bl7om1rte.jpeg)
Здесь мы не будем рассматривать различные сценарии как это сделать, достаточно перечислить те потенциально небезопасные участки, где Боб может осуществить задуманную подмену. Итак, потенциальная площадь атаки включает в себя: операционную систему смартфона, процессор, видеопроцессор, ОЗУ, беспроводный канал связи. Дистанционный перехват управления смартфоном позволяет на любом из перечисленных участков организовать Бобу атаку примерно по следующему алгоритму: отследить что шлюз токена открыт для приема данных, перехватить документ Алисы по пути от ОЗУ до беспроводного передатчика, направить в шлюз токена свой документ, принять с беспроводного приемника смартфона подписанный документ и направить его на определенный хост. При этом вывести на экран смартфона информацию об успешно подписанном документе Алисы. Атаку можно провести и через беспроводной канал связи, но в целом алгоритм атаки будет аналогичным.
У кого-то может возникнуть вопрос – а как же криптография, неужели нельзя применить шифрование для защиты от Боба. Шифрование применить конечно можно, но вот спрятать ключи от Боба, перехватившего управление смартфоном, на самом смартфоне увы невозможно. Но даже если ключи шифрования вывести за пределы устройства это не спасет ситуацию, т.к. шифровать электронный документ имеет смысл лишь перед его отправкой в токен для защиты беспроводного канала. Все остальные операции с документом в самом смартфоне осуществляются исключительно в открытом виде. В этой ситуации пользователю остается лишь уповать на обновленный антивирус и банковский антифрод.
Об антифроде
Хотелось бы сказать пару слов об этой противоречивой технологии. Если кто сталкивался с этим меня поймут. Любой подозрительный с точки зрения банка платеж мгновенно блокируется, а с ним и блокируется счет, после чего следует многодневный марафон по сбору документов и доказыванию банку что ты добропорядочный гражданин хотел перевести денег другому добропорядочному гражданину. Ну это так, навеяло недавними событиями из собственного опыта.
MITM, точнее MID
Таким образом мы имеем разновидность угрозы человек посередине — «Man In The Middle» (MITM). В данном случае посередине между экраном смартфона и токеном с цифровой подписью. Но в отличие от классической атаки «человек посередине» нейтрализовать её криптографическими методами невозможно. Не знаю имеет ли данный вид атаки свой специфический термин, мы назвали её человек в устройстве — «Man In Device» (MID). Далее по тексту буду именно так называть данную атаку.
Растущие возможности злоумышленников по удаленному перехвату управления чужим компьютером или смартфоном открывают перспективы для проведения различных хакерских атак. Причем наибольший ущерб могут нанести атаки, связанные с электронной подписью – подменой документов при подписании так и с подменой документов при их просмотре. Например, вам демонстрируют на смартфоне электронный паспорт, электронную доверенность, электронное удостоверение, электронный билет и т.д. Подлинность документа подтверждена электронной подписью – но как вам быстро и гарантированно проверить что электронный документ действительно подписан электронной подписью, и она соответствует стандарту? Надеюсь все понимают, что штампик с надписью «подписано квалифицированной электронной подписью» к электронной подписи ни какого отношения не имеет, и в фотошопе его можно приклеить к любому электронному документу.
Одно дело, если вам по долгу службы требуется постоянно проверять подлинность таких электронных документов – в этом случае у вас на руках должно быть сертифицированное средство для приема, просмотра и проверки электронных документов. Например QR сканер и подключенный к нему компьютер с предустановленным сертифицированным ПО.
Но если вы простой пользователь или в вашей организации нет потребности регулярно выполнять данные операции и у вас в наличии обычный смартфон для проверки электронного документа — то вы рискуете стать жертвой атаки с подменой документа на экране вашего девайса.
Что есть на рынке?
Существуют ли сегодня способы и устройства для нейтрализации атаки «Man In Device»? Да такие устройства существуют, это пользовательские терминалы класса Trust Screen.
![](https://habrastorage.org/webt/od/dz/q1/oddzq1vn2u_acjzi3mft1p8lghu.png)
Принцип их действия – физически не допустить злоумышленника в само устройство. По сути это тот же смартфон, но с предустановленным и сертифицированным ПО, с интегрированным ПО для работы с цифровой подписью и отрезанным от внешнего мира. И у него есть только две функции – принять электронный документ определенного формата, вывести на экран, подписать и с подписью вернуть обратно. Либо принять подписанный документ, вывести на экран сам документ и сообщение о валидности цифровой подписи. В целом удобно, безопасно и надежно, но хотелось бы иметь для таких случаев что-то более компактное, в идеале не нуждающееся в зарядке и такое, что всегда под рукой.
С такой установкой 1,5 года назад мы начали мозговой штурм в поисках нового решения угрозы «Man In Device».
Вернемся к Алисе и Бобу
Для наглядности найденного решения еще раз возвратимся к модели угрозы с Алисой и Бобом. Итак, Алиса по прежнему держит в одной руке смартфон, неважно какой марки и модели и неважно с какой операционной системой. Назовем его не доверенным устройством. В другой руке Алиса держит некое устройство с цифровой подписью, будем считать, что это сертифицированное доверенное устройство, произведенное по всем канонам информационной безопасности и Бобу не под силу взломать данное устройство Алисы. Но Боб без труда проник в смартфон Алисы и готов реализовать на нем атаку «Man In Device».
Вы можете заметить, что пока ситуация ничем не отличается от той, что была описана выше, в которой Боб с легкостью проворачивает мошенничество с подменой документа. Где же решение?
Найденное решение, названное нами «эффектом доверенного просмотра» не обезвреживает данные атаки, но позволяет гарантированно подтвердить, что на экране смартфона демонстрируется правильный документ. Этот принцип схож с идеей квантовой криптографии в которой канал связи не защищается, но стороны гарантированно могут определить попытку перехвата ключа. Так и в нашей технологии – мы не беремся объять необъятное в попытке защитить каналы связи, операционную систему, процессор и т.д., но наше решение способно гарантированно определить факт подмены или изменения электронного документа на любых не доверенных устройствах, будь то смартфон или персональный компьютер.
Чтобы понять, как работает наша технология еще раз представим, что для подписания документа – файл с документом пересылается из смартфона в доверенное устройство. Но по пути движения документа у злоумышленника есть масса способов заменить документ или данные в нем. И здесь возникает главный вопрос. Как убедиться, что миниатюрное доверенное устройство, не имеющее экрана для отображения принятого документа — получило правильный документ? В нашем решении мы обратно пересылаем из доверенного устройства документ и заново выводим его изображение на экран смартфона, но снабдив изображение документа в доверенном устройстве определенными защитными метками, сгенерированными особым образом. Разработанная технология создает «эффект доверенного просмотра» за счет принципов визуальной криптографии – экзотического направления в области современной криптографии.
О визуальной криптографии
Один из самых известных методов принадлежит Мони Наору и Ади Шамиру, разработавшим его в 1994 году. Они продемонстрировали графическую схему с разделением секрета, согласно которой изображение было разделено на n частей так, что только человек, имеющий все n частей мог расшифровать изображение, в то время как остальные n-1 части не показали никакой информации об оригинальном изображении.
![image](https://habrastorage.org/webt/mv/p0/4p/mvp04pefaj967hkbcubynyq5onu.png)
Соединение разделенных секретов позволяет увидеть скрытую информацию
В нашей технологии работает обратный механизм – три секрета объединяются в единое целое, которое не позволяет вычленить каждый из секретов за строго ограниченное время. И лишь разделение целого на три исходные части позволяет увидеть скрытую в них информацию.
здесь спрятано 3 секрета
![](https://habrastorage.org/webt/er/3p/zi/er3pzimtmhkeye7x4shrxnl3dos.png)
секретны разделены
![](https://habrastorage.org/r/w1560/webt/ck/ba/gy/ckbagykbv13gu5oujsoedpdydee.png)
![](https://habrastorage.org/webt/ck/ba/gy/ckbagykbv13gu5oujsoedpdydee.png)
Разберем криптосхему алгоритма
Исходный текст состоит из трех черно-белых изображений, каждый пиксель либо 0 – прозрачный, либо 1 – черный.
При наложении изображений друг на друга пиксели сливаются по следующему принципу:
1) 0 + 0 + 0 = 0
2) 1 + 0 + 0 = 1 или 0 + 1 + 0 = 1 или 0 + 0 + 1 = 1
3) 1 + 1 + 0 = 1 или 1 + 0 + 1 = 1 или 0 + 1 + 1 = 1
4) 1 + 1 + 1 = 1
Таким образом слияние изображений приводит к утрате части информации (строки 2 и 3) что не позволит без ключа восстановить каждое из изображений по отдельности. Так происходит этап шифрования.
Теперь покажу, как сформировать ключ для дешифрования, то есть для обратного разложения картинки на исходные составляющие.
Например, перед нами три фрагмента исходных изображений, накладываемых друг на друга:
![](https://habrastorage.org/webt/6m/vf/mn/6mvfmnbqxooxalogamzzo1vyl1k.png)
Зашифрованный фрагмент изображения содержит пиксели черного и прозрачного цвета и имеет меньший объем информации по сравнению с тремя исходными изображениями.
Чтобы создать ключ дешифрования нужно пробежаться по пикселям черного цвета в каждом фрагменте исходных изображений и сопоставить их в соответствии с координатами.
Полученный ключ будет содержать координаты черных пикселей в зашифрованном изображении и их исходное содержание.
В приведенном примере получится следующий ключ:
a1:110,c2:011,d2:111,b4:010,a5:110,c5:111
где a1 – координаты черного пикселя в зашифрованном изображении, а 110 – это цвета пикселей с теми же координатами в исходных изображениях.
Данный крипто алгоритм по сути является односторонней функцией с ключом.
О криптостойкости
Давайте посчитаем крипто стойкость данного алгоритма. Каждый пиксель черного цвета является результатом слияния пикселей трех слоев. При этом как было показано выше – существует 7 вариантов такого слияния, приведу их еще раз:
![](https://habrastorage.org/webt/s8/vx/ph/s8vxphxe4pjhjoj8rxr-y_uiew4.png)
Таким образом в небольшом фрагменте изображения, приведенном в примере, состоящем из 6 пикселей черного цвета существует 7 в 6-й степени или 117 649 вариантов разложения на исходные картинки.
Несложно прикинуть, что если на полноформатном изображении таких пикселей окажется, например, 1000, то количество вариантов составит 7 в 1000-й степени что составит 125325663996571831810755483238273420616498507508098617146349500752097059631738116432448839054351520763198615919551594076685828989467263022761790838270854579830015111246661203984624358929832571615718014704096305668097507613273663023226895250541385927158426088684494082416768617708189592286936039922311125683719215046689156738352590137241554510185855964549927575493247391132548534378497978806084951085874202011836362315727420109554782988791530088289711844550500230485638413189947132142243947334199259300735622492937419453650061490302105127920314430401636855677549136337481321811349678427076091437345045399337348611261168055929355402992823192491190360027036112283180935872775214517464013178274657100736321564606838252739601156414628445543663144696050650160812621814327062666195172701780200286645023823083185928061371310300829284071141207731280600001 комбинаций.
Понятно, что при данной крипто стойкости прямой метод взлома невозможен. Но у потенциального взломщика есть другие методы криптоанализа.
С учетом того, что в последнее время системы распознавания изображений на основе нейросетей сильно шагнули вперед – потенциальный злоумышленник вполне мог бы использовать их для распознавания изображения кода подлинности на едином изображении. Однако данный инструмент в данном случае окажется бессильным по трем причинам.
Во-первых, код подлинности выводится в деформированном виде в форме капчи. Причем расположение капчи и угол наклона также имеют случайный характер.
Во-вторых, капча смешана с изображением защитной сетки, имеющей случайный узор и текстом документа.
И в-третьих, времени на попытку распознавания у злоумышленника крайне мало, 1-2 секунды. Именно столько времени должно пройти с момента нажатия кнопки пользователем на доверенном устройстве и появлением изображения на экране не доверенного устройства.
![](https://habrastorage.org/webt/uz/6g/pv/uz6gpv6orji86zabe91bsw81kty.png)
Попробуйте распознать кодовое слово, смешанное с защитной сеткой и частью текста документа
После обесцвечивания защитной сетки
![](https://habrastorage.org/r/w1560/webt/0p/8p/3n/0p8p3npt7ykjsyowcprxyxtc84q.png)
![](https://habrastorage.org/webt/0p/8p/3n/0p8p3npt7ykjsyowcprxyxtc84q.png)
Этот же фрагмент после того, как слой с защитной сеткой частично обесцвечен – кодовое слово распознается без труда
Все ли так гладко?
Однако обзор представленной технологии был бы неполным, если не упомянуть о потенциальной лазейке, которую мог бы использовать хакер. Дело в том, что один из трех слоев на едином изображении заранее известен злоумышленнику Бобу – это изображение с текстом документа. Естественно, что у Боба также есть изображение и своего документа, которым он собирается подменить документ Алисы. И далее задача Боба может быть значительно упрощена. Зная один из трех секретов в виде слоя с изображением текста можно из единого изображения вычесть маску с изображением данного секрета. В итоге останется изображение, включающее в себя 2 слоя – с защитной сеткой и кодом подлинности. После чего полученное изображение смешивается с изображением текста оригинального документа. И все – задача взлома решена.
Правда здесь все не так просто: на тех участках, где пиксели текста перемешаны с пикселями защитной сетки и/или кода подлинности после вычитания маски останутся видимые разрывы. Но если оригинальный текст отличается от фальшивого небольшим количеством символов на локальном фрагменте, то после наложения остаточного изображения защитной сетки с кодом подлинности на оригинальный текст – данные разрывы на большинстве участков исчезнут и останутся лишь на небольшом фрагменте, где осуществлена подмена. Так что Алиса может и не заметить подмену документа.
Решение
Чтобы не допустить возможность взлома по приведенному сценарию предлагается достаточно простое решение. В доверенном устройстве изображение текста документа предварительно подвергается незначительной деформации с использованием случайных значений. Самый простой способ деформации – изменение ширины каждого из 4-х полей каждой страницы документа.
Причем, ширина каждого поля изменятся на свое случайное значение либо в сторону увеличения, либо уменьшения. Достаточно изменить ширину полей на несколько пикселей и проведение данной атаки будет видно невооруженным взглядом в форме остаточных артефактов из частей оборванных символов после вычитания маски. В случае, если текст документа содержит линии, как на примере ниже, то при деформации текста — изображения линий не затрагиваются.
![](https://habrastorage.org/webt/yy/vr/0l/yyvr0lebzdgsmb-ebjohsbomjng.gif)
плавное обесцвечивание защитной сетки позволяет убедиться, что текст документа при этом не меняется
Для простоты понимания приведен пример с черно-белыми изображениями. Но при определенной модификации алгоритма его можно применить и к цветным изображениям.
Теперь пару слов о роли пользователя в данной технологии. Использование в технологии методов визуальной криптографии подразумевает использование зрения пользователя в качестве основной метрики для оценки отсутствия или наличия атаки «Man In Device». По сути речь идет о визуальной валидации, которая выражается в двух последовательных операциях, совершаемых пользователем:
1. сравнении кода подлинности на индикаторе доверенного устройства с кодом подлинности в капче на изображении документа
![](https://habrastorage.org/webt/3y/t_/qp/3yt_qprrcw7c58mdibr6ywt0uwy.jpeg)
в качестве доверенного устройства предлагается создать специальную пластиковую карту
с индикатором кода подлинности и кнопками «подтвердить» и «отменить»
2. сравнении текста, проявляемого при постепенном уменьшении контрастности слоев с защитной сеткой и кодами подлинности с оригинальным текстом документа
Последняя операция основана на способности человека замечать малейшие изменения на общей картине. Как охотник способен в лесу сквозь ветви деревьев заметить движущуюся дичь по малейшим её очертаниям, так же и здесь пользователь может ясно увидеть, что постепенно проявляющийся текст документа при уменьшении контрастности двух других слоев изображения — не меняется и по контексту соответствует оригиналу.
Именно визуальная валидация создает конечный эффект доверенного просмотра.
P.S. В следующей части я постараюсь рассказать о том, с какими проблемами пришлось столкнуться при разработке прототипа, как можно перенести часть сложных вычислений из доверенного устройства на доверенный сервер без ущерба для безопасности и удалось ли нам найти инвестора в проект.