Сборка приложения в Unity3d: gradle vs internal

Содержание:

Unity3d замечательный инструмент предназначенный для создания игровых приложений. Большая часть повседневных задач в нем автоматизирована. Если создание приложений для вас хобби, тогда нет нужды изобретать колесо. Возьмите Unity3d + 3ds Max, или Blender 3d. Однако тут есть некоторые подводные камни о которых поговорим. Я искренне надеюсь, что моя статья поможет начинающим энтузиастам.

Не так давно, мне понадобилось собрать код своего приложение на другой машине. Я установил последнюю на тот момент версию Unity 2019.1. Взял свой предыдущий проект в Unity 5.6, который я так и не решился опубликовать на Google Play. Открыл и увидел ошибку «Prefab is missing». Я внимательно проверил все папки в моем проекте и все 3d-модели были на своем месте. Этот факт очень меня удивил.

Я подумал что причина в том что я изменил версию. Для проверки этого предположения я установил такую же версию (2019.1) на свою машину и не увидел: «Prefab is missing». Причина в том что Unity3d поддерживает 3d-модели которые созданы в Blender3d только когда он установлен. В нем нет встроенной поддержки Blender-моделей. Я установил этот пакет, но ошибка не исчезла. И это меня ещё больше удивило.

В документации сказано что Unity3d все ресурсы кеширует и потом производит над ними необходимые операции. В кеш ресурсы попадают после импорта. Я осуществил повторный импорт ресурсов (Assets->Reimport All) и ошибка исчезла.

Автоматизированные системы сборки

Для сборки приложения не достаточно исходного кода. Необходимо указать директивы для правильной линковки всех компонентов. В Unity все динамические библиотеки помещаются в папку Assets/Plugins. Самые трудно обнаруживаемые ошибки происходят во время выполнения приложения. Если в управляемом коде ошибки обнаруживаются быстро, то для обнаружения ошибок в нативном коде требуется выполнение на целевой платформе.

Отсутствующие ссылки на требуемые функции в нативных библиотеках приведут к ошибкам во время выполнения приложения. Таким образом, при сборке приложения ошибок вы не увидите. Но во время выполнения требуемая функция не будет найдена и программа остановиться. Это не критично, но неприятно и раздражает пользователей.

Приложения это сжатые в формате zip «.aab» и «.apk» файлы. Автоматизированные системы сборки отвечают за формирования таких файлов. Содержимое данных файлов зависит от настроек системы сборки. По умолчанию в Unity3d использует свою внутреннюю (Internal) систему сборки. Данная система сборки позволяет формировать только apk файлы и автоматически включает все файлы находящиеся в каталоге Assets/Plugins в проект.

Недостатки внутренней автоматизированной системы сборки

Давайте представим что вы очень давно создали проект своего приложения. Вы следите за тенденциями в компьютерном мире и безопасностью в целом. Вы постоянно обновляете компоненты своего приложения. Это правильно и так должно быть.

Предположим, что ваш проект содержит библиотеку функций «mylib-1.0.dll», которая ссылается на функции библиотеки «libxml.so». Через два года работы вашего приложения вы узнали что появилась новая версия «mylib-2.1.dll». Новая версия для своей работы требует уже не «libxml.so», а «libcsv.so». Исключив из своего приложения libxml.so вы ничего не заметите, потому что в версии «2.1» вашей библиотеки он не используется. Тем не менее, если вы забудете исключить этот файл из проекта, тогда автоматизированная система сборки включит эту вещь в проект.

Относительно «.jar» и «.aar» файлов в папке Plugins действуют подобные принципы. Все файлы классов «.class» включаются в проект. Не имеет значения нужны они или нет. Внутренняя автоматизированная система сборки включит весь набор классов. Это удобно, но только для новичков. Которые не хотят вникать в тонкости сборки программных пакетов.

Способы устранения устаревших зависимостей

Одним из способов борьбы с устаревшими зависимостями является хорошая документация проекта. Документация на разработанный программный продукт должна включать морфологическую карту для каждой версии приложения.

Морфологическая карта для двух версий приложения

Каждая новая версия библиотеки содержит changelog.txt в котором содержится список изменений по версиям приложения. Однако если в проекте слишком много сторонних зависимостей, тогда прочтение огромного количества информации может изнурить вас.

Поскольку со временем сторонние зависимости могут изменить свой функционал рекомендуют составлять unit-тесты. Это проще чем читать огромное количество документации. Впрочем, читать документацию придется, но не очень много.

Как получить список методов в библиотеке?

Самый простой способ использовать обозреватель решений, справа в окне Microsoft Visual Studio. Для этого кликните по одному из объектов обозревателя решений, например «System.Net.Security.dll», и нажмите «Просмотр в обозревателе объектов».

System.Net.Security.dll
Библиотека содержащая методы шифрования

В обозревателе объектов вы увидите список всех доступных классов, с небольшой справкой. Таким образом, вы можете просмотреть какой функционал реализует библиотека.

KeyAgreeRecipientInfo
Свойство «OriginatorIdentifierOrKey» в классе содержащее информацию об инициаторе согласования ключей

Вы можете узнать информацию о классах, полях, методах библиотек .Net во время выполнения своего приложения. Список импортируемых методов из managed библиотек можно получить применив System.Reflection. В этом namespace присутствует класс MethodInfo. Для получения информации о методах входящих в класс «MyClass» из динамической managed библиотеки:

MethodInfo[] methodInfos = typeof(MyClass).GetMethods(BindingFlags.Public |
                                                      BindingFlags.Static);

GetMethods из пространства имен «System.Reflection» использует и Visual Studio. Но что если вам захочется увидеть список функций в нативных библиотеках. В таблице ниже написаны средства для разных динамических библиотек которые написаны для разных ОС [1].

ОСПакетПрограмма
Linuxbinutilsobjdump -T MyLib.so
WindowsVisual Studiodumpbin /exports MyLib.dll
MacOSbinutilsobjdump -T MyLib.so
Androidbinutilsobjdump -T libMyLib.so

Отличия нативных динамических двоичных файлов

Для каждой из аппаратных архитектур используются свои кросс-компиляторы и утилиты из пакета binutils. Так название кросс-компилятора gcc для архитектуры arm-v7a будет выглядеть как: armv7a-linux-androideabi-gcc. А для архитектуры arm-v8a: aarch64-linux-android.

Утилита «file» в Linux может показать файловые заголовки. Давайте посмотрим, чем отличается динамическая shared object библиотека для Linux от динамической библиотеки для Android. Выполните в командной строке Linux:

[Cubby dev@machine src]$ file libMyLib.so
libMyLib.so: ELF 64-bit LSB shared object,
ARM aarch64, version 1 (SYSV), dynamically linked,
interpreter /system/bin/linker64,
BuildID[sha1]=45b9548a4d5bed6f702ff1a2af5208ad6aec312b,
with debug_info, not stripped

Обратите внимание на расположение linker64. Если вместо директории /system/bin вы видите что-то иное, например /lib, тогда данная библиотека собрана не для Android. В Linux большая часть исполняемых файлов находится в директории /usr/bin, а библиотеки в /usr/lib. В Linux применяется стандартная библиотека языка Си libc, или uClibc для встраиваемых систем. В Android своя стандартная библиотека, которая называется Bionic. Единственная схожесть состоит в формате исполняемых файлов ELF [2].

Преимущества Gradle и Proguard оптимизация

Выберите Build system: Gradle вместо Internal. Теперь вы можете собирать приложения в файлах aab. Для этого поставьте галочку напротив «Build App Bundle».

gradle
Сборка Unity3d проектов

Использование Gradle и Proguard позволят уменьшить размер исполняемого файла. Однако, есть некоторые нюансы на которые следует обратить внимание. Особенно если у вас есть плагины для Android (.aar), или Jar-библиотеки. Приложение иногда можно собрать и запустить без проблем, но во время выполнения могут возникать ошибки. В таких случаях необходимо через USB подключить устройство к вашему PC и запустить отладку вашего приложения через adb следующим образом:

adb logcat -d com.your_company.your_app:I *:W

Вы можете перенаправить вывод в файл добавив «> warnings.txt». Это помогает найти нужную информацию. Впрочем, поступайте как вам удобно. Adb входит в состав android sdk и доступен для Windows, MacOS и Linux. Если после сборки при помощи Gradle вы видите ошибку ClassNotFoundException, тогда вам надо проверить наличие в aar или jar библиотеках наличие данного класса. Если он есть но ошибка не исчезает, тогда поставьте галочку напротив User Proguard File.

User proguard file

Предположим, что ошибка: java.lang.ClassNotFoundException: > Didn’t find class > «com.google.android.gms.ads.MobileAds». Но в папочке Asset/Plugins/Android есть файл com.google.android.gms.ads.jar в этом архиве присутствует файл «MobileAds.class». Чтобы включить этот класс откройте файл proguard-user.txt в любом редакторе и добавьте следующие строчки:

-keep class com.google.android.gms.ads.** {
*;
}

Сравнение apk и aab пакетов

Для понимания различий уместно привести следующую аналогию. Приложения которые хранятся в apk файлах напоминают огромный бургер. Маленький бургер может не понравится клиентам которые любят радовать свой желудок большим бургером, а большой бургер понравится даже тем кто любит маленький бургер. Если вы не можете съесть весь бургер оставьте его и шагайте дальше.

Файлы aab, как холодильник хранят в себе все компоненты для бургера. Если у вашего устройства небольшой dpi, вы не будете качать ресурсы с большим dpi. Вы возьмете только то что вам надо. Но вы же, не будете есть холодный кусок говядины. Его надо разогреть! Подобным образом устроен и aab файл. После того как все необходимые компоненты скачаны, они компонуются в apk на устройствах клиентов [3].

Proguard и обфускация методов

Самое большое преимущество, это обфускация полей и методов в классах. В релизе вы будите иметь, компактный бинарный файл без ничего лишнего. Алгоритм Бойера-Мура для эффективного поиска работает быстрее при нормальном распределении букв в названиях методов. Это должно привести к быстрой работе приложения.

Поэтому unity и многие движки имеют дело не с названиями ресурсов, а с неудобочитаемым хешкодом вида: «ab103628e47f1da0bcd». Gradle переопределяет название методов и таким образом ускоряется нахождения функции. После выполнения функции она попадает в кеш и при повторном вызове она выполнится ещё быстрее. Если вы еще не используете proguard подумайте об этом.

Выводы

Встроенная в Unity3d автоматизированная система сборки подходит начинающим. Для опытных пользователей рекомендуется использовать Gradle. Основное преимущество Gradle — возможность создавать aab файлы. Вместе с Gradle используется proguard оптимизация переопределяющая названия функций в классах. Это увеличивает отзывчивость вашего приложения. Для включения классов из aar и jar библиотек, необходимо внести их названия в файл proguard-user.txt.

Источники информации:

[1] https://developer.android.com/ndk/guides/other_build_systems
[2] https://android.googlesource.com/platform/bionic
[3] https://developer.android.com/guide/app-bundle

Улучшаем приложение: Миграция между версиями Unity3d

Содержание:

Итак друзья, сегодня мы поговорим про очень важное требование для разработчиков от корпорации Google к приложениям на Google Play. Не секрет, что с 1 августа 2019 года все приложения должны поддерживать 64-битную архитектуру. Многие люди, особенно энтузиасты, для которых создание приложений просто хобби забывают о поддержке своих приложений. Ну или просто откладывают важные обновления.

Кому будет полезна данная статья?

  • Тем кто интересуется миграцией своих проектов между разными версиями Unity3d фреймворка;
  • Тем кто создал приложения на Unity3d (для версий не поддерживающих архитектуру ARM64-v8a <=5.6, 2017.1, 2017.2, 2017.3);
  • Тем кто использует нативный код для процессорных архитектур ARM-v7 и ARM-v8;
  • Тем кто использует сторонние фреймворки для создания Android приложений;
  • Начинающим разработчикам приложений.

Кому нет необходимости читать статью дальше?

  • Если вы написали приложение на языках Java, или Kotlin и не использовали нативный код написанный на C/C++;
  • Если вы не используете сторонние библиотеки.

Корпорация Google всегда предупреждает заранее и у вас ещё есть время привести все в соответствие требованием. Поскольку все 32-битные приложения armeabi-v7a идут на 64-битной архитектуре arm-v8a вы могли создать приложение и забыть об этом. Будьте внимательны и проверьте поддерживает ли ваше приложение данное требование.

Архитектуры процессоров, возможные сложности и методы их решения

Производителей электронного оборудования и аппаратных платформ достаточно много. : x86, SPARC, ARM, ARMv8-A, Alpha, Arc, Itanium, SMIPS,MIPS-LE, PowerPC, TILE. Сейчас, практически невозможно знать все тонкости и нюансы аппаратных архитектур. Обычно, в университетские курсы входит знакомство с набором x86 инструкций. Кроме того, архитектуры со временем устаревают.

Если бы все процессоры имели одинаковую архитектуру, тогда это существенно упростило бы жизнь программистам. Но так не бывает и не будет из-за следующих причин:

  1. Не все архитектуры открытые, многие из них запатентованы и защищены законом об авторском праве;
  2. Архитектуры строятся с учетом специфики задач и данных с которыми они будут работать;
  3. Инструкции меняются, или добавляются вместе с появлением новых технологий.

Так MIPS архитектуры и PowerPC используются в роутерах, некоторых простых телефонах. Для мобильных устройств более типичной архитектурой является ARM. Для ПК основными архитектурами являются x86 и x86_64. Несмотря на то что Intel и AMD выпускают процессоры с одинаковой x86_64 архитектурой, реализация некоторых инструкций у них своя. В статье которая посвящена уязвимостям Meltdown и Spectre мы говорили об одной из таких инструкций PAUSE. Читайте также: Как улучшить производительность Linux?

Архитектуры графических процессоров ориентированны на работу с числами с плавающей точкой. Эта их особенность особенно хороша когда вы тренируете искусственную нейронную сеть. Поскольку значения интенсивности цветов на изображениях перед их подачей на сверточную нейронную сеть нормализуют в промежутке от [-0.5;0.5], то использование графических карт ускоряет тренировку. В реальной жизни скорость тренировки нейронной сети зависит не только от количества графических ядер, но и от архитектуры СНС и выбора активационных функций.

Что такое нативный код?

Как вы угадали, количество машинных инструкций очень большое и невозможно их всех держать в голове. Что бы не потеряться в огромном разнообразии знаний, инженеры компании Sun создали виртуальную машину Java. Через некоторое время компанию Sun Microsystems приобрела корпорация Oracle.

Виртуальная машина Java выполняет промежуточный код компилируя его в машинный код. Машинных инструкций много, а промежуточных инструкций меньше. Это все похоже на архитектуру созданную поверх существующей архитектуры и упрощает жизнь программиста. Вам достаточно быть Java программистом, чтобы ваши программы запускались на множестве аппаратных архитектур. Вам не нужно углубляться в суть аппаратных архитектур, просто используйте Java.

Машинный код называется нативным кодом, потому что он будет работать только на одной аппаратной архитектуре. Нативный код рекомендуют избегать, но бывают случаи, когда без его применения не обойтись. Например, когда вам необходимо использовать специфические аппаратные возможности какой-нибудь архитектуры. Во всех остальных случаях рекомендуют использовать промежуточный код.

Какие языки программирования поддерживают промежуточное кодирование?

Кроме технологии Java Virtual Machine, похожие вещи применяет Microsoft. Корпорация Microsoft создала свою реализацию виртуальной машины которая выполняет промежуточный код и назвала технологию dot Net. Такими действиями они хотели получить преимущество в сегменте мобильных ОС. Рынок мобильных приложений огромен и они не хотели уступать источник своего обогащения другим конкурентам.

Unity3d применяет технологию промежуточного кодирования от корпорации Microsoft. Если вы откроете приложение созданное при помощи технологии Net, тогда в шестнадцатиричном редакторе вы увидите вначале метку MSIL. MSIL — это аббревиатура от слов Microsoft Intermediate Language (промежуточный язык Microsoft). Если приложение нативное, тогда вы увидите метку MZ, или другую метку.

Все языки входящие в набор Microsoft Visual Studio позволяют создать MSIL бинарный выполняемый файл. Таким образом, приложения могут работать на MacOS и Linux. В Linux есть своя реализация технологии Net. Библиотека Mono позволяет выполнять промежуточный код от Microsoft на Linux и MacOS.

Python в режиме интерпретации

Язык программирования Python также имеет виртуальную машину Python и использует свою технологию промежуточного кодирования. Поскольку виртуальная машина Python открыта и доступна для большинства архитектур, её используют в роутерах Cisco. Чтобы применять Python не нужно быть программистом, достаточно уметь пользоваться справкой help() и dir(). Введите название объекта в качестве аргумента чтобы получить справку и список доступных функций.

Разрушаем мифы: Насколько страшен переход к новым правилам

В большинстве новостных ресурсов все настолько драматизировали, что пошли страшилки касательно удаления приложений. Особенно это относится к русскоязычным ресурсам. Давайте вместе с вами найдем ответы на все вопросы и устраним все спекуляции.

Google Play roadmap
Roadmap для Google Play
(Источник: Google)

Кого августовский переворот не коснется? Чем старше ваш проект, тем сложнее будет мигрировать. Поэтому это не коснется приложений созданных в Unity <=5.6. Как вы видите, Unity разработчикам пошли на встречу и до 2021 года ничего страшного не случится. Этого периода вполне достаточно, чтобы переписать весь код своего приложения и пересобрать все сторонние зависимости.

Указанные изменения не коснутся приложений явно предназначенных для Wear OS и Android TV. Этот сегмент рынка не настолько насыщен разнообразием архитектур, как рынок смартфонов и планшетов. Кроме всего, это не коснется приложений не распространяемых на устройства под управлением Android Pie и следующих версий (уровень API 28+).

Google Play will stop serving apps without 64-bit versions on 64-bit capable devices, meaning they will no longer be available in the Play Store on those devices.

android-developers.googleblog.com

Что же будет на самом деле? Ваше приложение не будет видно в Google Play на устройствах с 64-битной архитектурой ARM-v8a. Это повлияет на позицию в поисковой выдаче на Google Play. На всех остальных, устройствах оно будет доступно. Собственно, новые ОС от Google и так ориентированны в основном под 64-битные архитектуры. Разработчики приложений, в любом случае, добавят поддержку 64-битных архитектур. Охват большей аудитории в их интересах. Cocos2d, Unity3d и Unreal все поддерживают 64-битный режим. На кого же рассчитана эта новость?

Такими действиями Google провоцирует потребителей к покупке новых устройств. Заголовки в СМИ послужили поводом для огромного количества спекуляций среди обычных людей. Самое печальное, что прочитав такие заголовки люди ошибочно думают что в Google Play исчезнут все приложения под 32-битные устройства. Нет не исчезнут, можете не торопится покупать новые устройства. Для обычного пользователя пока ничего не изменится.

Все трудности миграции Unity3d проектов

Кажется что все просто, когда есть исходный код и кросскомпилятор. Однако, сторонние зависимости могут замедлить вашу миграцию. Чем больше стороннего кода и возможностей которые он предлагает, тем больше неожиданных проблем могут возникнуть. Из версии в версию происходит отказ от некоторых устаревших возможностей и создание новых возможностей. Новые возможности не всегда оперативно поддерживаются другими программными продуктами.

Для примера, Cocos2d поддерживал архитектуру ARM64-v8 ещё с 2015 года. Unity3d на то время этой возможности не поддерживала. В итоге, в тройке лидеров по созданию мобильных игр она стала последней внедрившей данную технологию после Unreal и Cocos2d. У каждого из этих движков есть свои преимущества и недостатки. Если вы не знакомы с ними и планируете написать свое приложение, тогда рекомендую ознакомится с пользовательскими форумами.

Как упростить миграционный процесс?

Во всех крупных компаниях и проектах создают план (Roadmap). Люди ответственные за развитие проектов излагают свое видение развития программных продуктов. Если вы собрались интегрировать одно из существующих решений реализующих требуемый функционал, тогда внимательно ознакомьтесь с ним. Но для начала, ответьте себе на важные вопросы.

  1. Ваше приложение будет многопользовательским, или однопользовательским?
  2. На какую группу людей рассчитано ваше приложение?
  3. На каких аппаратных платформах оно будет функционировать?
  4. Какие возможности вы будете реализовывать в будущем?
  5. Каким образом будет осуществляться контроль качества и внедрения приложения на целевой рынок?

Четвертый вопрос один из самых важных для людей ответственных за интеграцию решений. Представьте, что вы написали код реализующий некоторую возможность, а потом эту возможность исключили. Это очень печально, правда? Вам придется переписывать код. Поэтому не спешите создавать приложения и хорошо обдумайте все возможные нюансы прежде чем что-либо реализовывать.

Трудности миграции проекта Cube Mixer

Экспериментальную поддержку архитектуры ARM64-v8 внедрили в Unity 2018.1. Но вместе с внедрением новых возможностей они убрали старый добрый механизм создания многопользовательских игр. Раньше для создания многопользовательской игры использовалась комбинация высокоуровневого HLAPI и низкоуровневого LLAPI. По просьбам и жалобам трудящихся в компании решили отказаться от этого API. Ниже приведен план дорожная-карта развития Unity3d.

Unity3d unet deprecation
Переход от старого Unet к CGS

Старый добрый Unet меня, как и множество других разработчиков вполне устраивал. О нем, я не могу сказать ничего плохого. Это была хорошая вещь. Начиная с версии 2018.2 убран класс Network, поэтому применить Network.time уже не получится. Некоторые использовали его для синхронизации времени.

В Unity3d 2018.2 убрали HLAPI, а LLAPI был помечен как устаревший. Через некоторое время его также убрали. Сейчас разработчики вынуждены переписывать код под новое решение. Как вы видите на изображении выше, ещё не все готово в CGS. Интерфейс ещё достаточно сырой и приходится ждать конца 2019 года. Ко всему прочему, отсутствует адекватная документация по новым функциям. Без документации очень трудно разрабатывать приложение. Я внимательно слежу за блогами разработчиков Unity3d и постараюсь вас порадовать настолько быстро, насколько это возможно.

Сторонние библиотеки: Firebase

Разные сторонние библиотеки собираются на разных версиях Net Framework. Так в версии платформы Net 4.0, появилась динамическая типизация. Если вы попробуете скомпилировать код содержащий переменные типа «dynamic» для платформы Net 2.0, или Net 3.5, вы получите ошибку. В старых версиях такой поддержки не было и собрать современную библиотеку, без внесения правок в исходный код, на них не получится.

Так Firebase конфликтовал со старой версией Unity3d 2017.1. Через некоторое время это исправили. Сторонние зависимости не должны быть слишком старыми, но и переход на полностью новые не протестированные решения достаточно проблематичен. Для разработчика главное выбирать золотую середину.

Во всяком случае, есть средства тестирования приложений Firebase Test Lab. Поскольку я пока не являюсь счастливым обладателем устройства на базе архитектуры ARM64-v8a, я не могу оперативно исправлять приложение для этой архитектуры. Сейчас благодаря облачному тестированию я могу тестировать свое приложение на самом современном оборудовании. Очень жаль что там установлена квота 5 тестирований за день, но мне этого достаточно.

Unity3d и API compatibility level

Unity3d начал поддерживать платформу Net 4.x с 2017 года. Хотя данная платформа существовала задолго до 2017 года. Людям которые любят динамическую типизацию в Python изменения в Net 4.0 очень понравились. Я имею ввиду новый тип переменных «dynamic».

Unity3d .Net API compatibility
Поддержка .Net 4.x в Unity3d

Почему они не спешили переходить на эту платформу? Во первых, код применяющий возможности новой платформы не скомпилируеться для старой платформы. Все их действия предназначены для удобства разработчиков. Повторная сборка библиотек под новую платформу отнимает время.

Библиотеки компилируемые в промежуточный MSIL-код называются управляемыми (Managed). Они могут выполнятся на любых процессорах (AnyCPU). Существует очень важный нюанс, на который я хочу обратить ваше внимание, это дополнительный подтип «Any CPU 32-bit preffered» введенный в платформу Net начиная с версии 4.5 [1].

Target Architecture
Unity3d не предоставляет выбор «Any CPU 32-bit preffered», только «Any CPU»

Чтобы посмотреть какие флаги используют dll файлы в вашем проекте воспользуйтесь CorFlags.exe, которая лежит где-то в подпапках каталога Program Files. Эта утилита позволяет поменять флаги для Managed библиотек. Без опций она просто покажет текущее состояние флагов.

Version   : v4.0.30319 
CLR Header: 2.5 
PE        : PE32 
CorFlags  : 131075 
ILONLY    : 1 
32BITREQ  : 0 
32BITPREF : 1
Signed    : 0

Как я уже говорил, без нативного кода обойтись не всегда получается. Бывает такое, что нативный код под 64-битную платформу не собран. Временно можно обойтись 32-битным кодом. Если 32BITPREF для управляемого кода установлен в 1, тогда ваша библиотека будет искать нативную 32-битную dll даже на машине с 64-битной архитектурой. Для этого введите:

CorFlags.exe /32BITPREF+ name_of_your_lib.dll

Выводы

Все меняется и в современном мире достаточно тяжело успевать за технологиями. Но для разработчиков присутствуют инструменты способные упростить разработку приложений. Одно из таких решений — Firebase TestLab. Это решение помогает оптимизировать приложение под огромное количество устройств.

Источники информации:

  1. What AnyCPU Really Means As Of .NET 4.5 and Visual Studio, Microsoft blogs.

Cube Mixer 1.14 версия для 64-битных архитектур

Поскольку я не имел устройства на базе архитектуры ARM64 (набор инструкций AArch64), я не видел ошибки. Сегодня я открыл средство облачного тестирования Firebase TestLab и обнаружил ошибку. Там установлен бесплатный лимит на количество тестов 5 раз в день. И теперь я могу тестировать свое приложение на самом современном железе. Очень хочу исправить приложение и работаю над этим. Простите за неудобства, я работаю над устранением неисправности. Благодарю за терпение!

Видеоинструкция: Сокрытие информации в mp3 файлах

Содержание:

В предыдущей статье, мы разобрали способы сокрытия информации в изображениях, аудио и видео файлах. Все перечисленные способы просты для понимания, но я бы хотел продемонстрировать это визуально. Читайте также: Стеганография в аудиовизуальных образах.

Мы попробуем закодировать сообщение в фрагмент из произведения норвежского классика Эдуарда Грига — Wedding day at Troldhaugen. Для этого прекрасно подойдет LSB — метод. Собственно, передать сообщение можно всюду и всем, даже в поэзии путем чередования поэтических стилей. С точки зрения теории информации, разные стили — это разные состояния.Чем больше возможных состояний, тем больше полезной информации можно выразить.

Кодирование информации

Для начала вам нужно скачать midi-файл с классическим произведением. Древнюю музыку никто не слушает, поэтому это самый лучший выбор. Более того, медленный ритм 110-120 ударов в минуту прекрасно подойдет для пошагового анализа. Мы выберем ритм 120 ударов в минуту. Таким образом каждая порция 4/4 будет длится ровно 2 секунды. Для демонстрации это хорошее решение, и классическая музыка будет весьма кстати.

Ниже представлено таблицу ритмов и временные промежутки для наиболее распространенных тактовых размеров: 4/4, 2/2, 2/4, 3/4, 6/8. Числитель определяет количество долей в такте. Знаменатель определяет относительную длительность ноты (не в секундах, не путайте). Длительность описывается формулой: 60/bps * 4 * количество_долей/относительную_длину. Длительность одного такта размером 6/8 и ритма который равен 90 ударам будет равна: 60/90 * 4 * 6/8=2 c.

Ритмы,
bps
4/42/43/4
902.6661.3332.000
1002.4001.2001,800
1102.1811.0901,636
1202.0001.0001,500
1301.8460.9231,384
1401.7140.8571,285

Продолжительность звучания тактов размером 4/4 и 2/2 равна. 3/4 и 6/8 также имеют равную длину звучания в секундах. Разница в расстановке музыкальных акцентов. Акцент — это выделение сильных долей путем увеличения их громкости. Это стоит учитывать при анализе звуковых файлов на стеганографические последовательности. Даже если звук для каждого инструмента установлен на уровне 100%. Он все равно будет скакать.

Кроме классики можно выбрать военный марш. Солдатам на параде удобно шагать под ритм от 110 до 130 ударов в минуту. Ритм 120 ударов применяется для синхронного шагания солдат. Траурный марш пишется в режиме медленного шага (90-105 ударов в минуту) и тоже подходит. Но это выглядит неэстетично, неромантично и слишком мизантропично. Для хороших слов мы выберем более веселую мелодию.

Создание стеганографической схемы

Первое что необходимо выбрать это носитель информации. Носителями информации могут быть: смена высоты ноты, смена ритма, смена громкости, смена источника звука при помощи балансировки (слева, или справа). В качестве носителя информации будет использован звуковой градиент.

Для создания стеганографического сообщения в аудио файле было использовано приложение LMMS. Сколько бы аудио дорожек мы в нем не создали, но после сохранения в формат mp3 все они объединятся в одну стереодорожку. В приложении для работы с mp3, эти дорожки можно разделить на две моно дорожки и проанализировать звуковые скачки.

Audacity
Audacity — разделение стерео на две моно доорожки

Верхняя часть стереодорожки выводится на левый динамик, а нижняя на правый динамик. Что это означает? Это означает, что можно применить несколько схем кодирования.

  1. Если оригинал файла известен получателю, тогда можно сравнивать уровень звука на заданном проверочном интервале для оригинального файла и файла со скрытой информацией сразу по двум дорожкам (2 дорожки файле оригинала и 2 дорожки носители сообщения в стеганографическом файле).
  2. Если оригинал файла неизвестен получателю сообщения, тогда одну из дорожек стеганографического файла можно использовать как эталон для измерения разницы громкости, а вторую для сокрытия информации.
  3. Если оригинал файла неизвестен получателю сообщения, тогда можно использовать две дорожки как в пункте 2, но по очереди меняя роль каждой дорожки. Например, в первом такте дорожка 1 показывает истинный уровень звука, во втором такте она будет носителем информации. В первом такте дорожка 2 будет носителем информации, а во втором показывать истинный уровень звука.

Я выбрал первую схему, но она не практична с точки зрения защиты информации. А если существует несколько версий файла и получатель выберет не ту? Тогда наше скрытое сообщение будет неправильно интерпретировано. Поэтому вторая и третья схема более предпочтительны.

Создание звукового градиентного алфавита

Подобно тому как человеческий глаз не может различить все оттенки, так и ухо не способно различить небольшие звуковые скачки. Но не программы для звуковой обработки. Если каждую букву передавать падением громкости звука, тогда это может быть заметно. Особенно если в тексте будет много букв «a» и «z».

Падение на 26% очень заметно. Исходя из этого, можно считывать такты парами по 6 разных состояний на каждый, или использовать параллельно один такт на двух дорожках. Я применил первую схему кодирования, поэтому будем использовать в качестве носителя такты на двух дорожках. В таблице ниже представлен градиентный алфавит.

БукваДорожка 1, %Дорожка 2, %
A9494
B9495
C9496
D9497
E9498
F9499
G9594
H9595
I9596
J9597
K9598
L9599
M9694
N9695
O9696
P9697
Q9698
R9699
S9794
T9795
U9796
V9797
W9798
X9799
Y9894
Z9895

Для двух треков и шести состояний общее количество состояний будет 6^2=36. В алфавите 26 букв и это значит, что таблицу можно продолжить и закодировать ещё 10 символов. Для меньшей заметности часто встречающиеся буквы можно кодировать меньшей разницей. Однако это не спасет от математического анализа и быстрой расшифровки.

Настройка Linux Multimedia Studio

Количество ударов в минуту BPM должно быть одинаковым. В противном случае придется анализировать разные временные интервалы. Это усложнит задачу. Нажмите правую кнопку мыши по индикатору количества ударов (140). Выберите «изменить глобальную автоматизацию композиции». Появится окно как на рисунке ниже. Нам нужен постоянный темп 120 ударов в минуту и отсутствие автоматизации (прямая линия на графике).

Linux Multimedia Studio
Автоматизация дорожек в LMMS

Для того чтобы график был прямой линией сбросьте настройки автоматизации. Ритм 120 ударов и период 4/4 даст 2 секунды на каждый такт. Можете ставить другой интервал, но этот упростит декодирование скрытого сообщения.

Вставляем скрытое сообщение

Треков может быть много, но следует учитывать тот факт что в mp3 файле будет всего одна стереодорожка, или две моно дорожки. Если в вашем LMMS проекте присутствует много треков с разной балансировкой, тогда они накладутся на конечную стереодорожку и декодировать сообщение станет сложно.

Баланс распределяет звучание между динамиками в определенной пропорции. Пропорция 1/1 означает что звук в равной мере распределится между левым и правым динамиками. Пропорция 1/2 будет означать что громкость звука на правом динамике будет в 2 раза больше, чем на левом. Чтобы избежать запутанности, мы будем использовать противоположную балансировку для двух дорожек.

Кроме баланса требуется нормализовать громкость. На обоих дорожках должен быть одинаковый относительный уровень звука. После установки правильного баланса и относительной громкости дорожки, необходимо дважды кликнуть по каждой дорожке выделить все ноты комбинацией клавиш Ctrl+A и тоже установить звучание каждой ноты на уровне 100%. После этого для каждого кодирующего такта уменьшить уровень громкости звука на соответствующее число.

Экспорт mp3 файла и разница между mono, joint stereo, stereo

Выберите файл > экспорт, или нажмите Ctrl+E. Установите формат файла mp3 и нажмите кнопку сохранить. В появившемся окне выберите стерео режим Stereo. В нашем случае можно выбрать режим Joint Stereo, но для большего качества лучше выбрать Stereo. Установим битрейт на уровне 160 КБит/с. Интерполяцию можно не менять.

Моно дорожки могут проигрываться сразу по двум динамикам, но это не сделает файл стерео. В реальной жизни звучание объемное и для улучшения качества восприятия используют stereo, или joint stereo. Stereo mp3 будет иметь размер больший, чем mono mp3.

Так как разница между стерео каналами не велика, то для уменьшения размера конечного файла хранят только разницу. Этот режим создания mp3 называется Joint Stereo. Он не сильно исказит скрытую информацию и дорожку по прежнему можно будет разделить на две mono дорожки.

Анализ временных интервалов

Анализ временных интервалов можно провести в программе Audacity. Мы выбрали первую схему однотактного двухполосного кодирования. Поэтому откроем оригинальный файл и импортируем файл со стеганографическим сообщением. Далее разделим 2 стереодорожки и получим 4 моно дорожки.

Чтоб не путать дорожки определим зеленый цвет для первой дорожки. Далее попарно сравним дорожки двух файлов. Чем точнее будет выбранный интервал, тем точнее разницу мы получим. В LMMS мы указывали относительную громкость в процентах. В оригинальном файле отсутствует информация и уровень звука на всех стерео каналах равен 100%. В Audacity разность получим в децибелах. Она будет находится в пределах указанных ниже. Это особенность формата mp3 и настроек интерполяции.

Состояние, %Разность, Дб
94[0.46;0.54]
95[0.39;0.45]
96[0.31;0.38]
97[0.23;0.30]
98[0.15;0.22]
99[0.08;0.14]
100[0.00;0.07]

Закодированное сообщение: «I LOVE YOU» после декодирования будет выглядеть как в таблице ниже. Пробел имеет одинаковый уровень громкости на двух дорожках, но так как я захватил чуть больший интервал это повлияло на разницу. Смотрите на интервал в который попадает разница.

T1/T295
96
100
100
95
99
96
96
97
97
94
98
100
100
98
94
96
96
97
96
ТекстILOVEYOU
Разность 10.450.000.400.380.260.540.050.150.380.28
Разность 20.340.000.080.370.270.540.010.480.370.35

Видеоинструкция

Выводы

Не нужно скачивать особые стеганографические приложения. Можно воспользоватся существующими программными пакетами. Такими как: Libre Office Calc, Linux Multimedia Studio, Audacity. Вы можете использовать другие приложения, но единственное необходимое требование это знание формата и режимов mp3. В этой статье вы познакомились с режимами: mono, stereo и joint stereo.

Стереодорожки содержат два аудио канала. Это можно и нужно использовать для увеличения эффективности сокрытия данных. Кроме всего, их можно разделить на две монодорожки. Приложение Audacity позволяет назначить каждой дорожке свой цвет. Указанная особенность не позволит спутать дорожку и упростит аудио анализ.

Несмотря на большое разнообразие методов, вы можете придумать и внедрить собственную схему сокрытия информации. Однако стеганография не защищает информацию, а только скрывает. Простая смена порядка букв также не увеличит безопасность. В любом тексте присутствует постоянная составляющая. Математическая статистика позволяет выявить сокрытую информацию даже если вы будете использовать другой порядок букв.

Стеганография в аудиовизуальных образах

Содержание:

Как было сказано в предыдущих статьях, защита информации путем её сокрытия возможна всюду где есть n разных отличимых состояний. Аудиовизуальные образы содержат в себе, картинку или видео и звуковые дорожки. И как вы догадались, могут хранить существенно большее количество полезной информации.

Для примера, файлы изображений хранят блок метаинформации и блок информации. Метаинформация это вспомогательная информация про информацию. Вставлять метаинформацию или нет, зависит от вас. По умолчанию, все приложения вставляют её в конечный файл. Информация — в визуальных образах это описание графических представлений.

Метаинформация может содержать следующие поля: модель камеры, фокусное расстояние, название приложения которым она обрабатывалась, информация об авторстве, электронно-цифровые подписи, контрольные суммы и другие вещи. Если вы когда-нибудь монтировали ролики для YouTube и пользовались библиотекой royalty free аудиозаписей, вы могли заметить что метаинформационное поле «Software:» содержит значение «Google».

Создание и воспроизведение аудиовизуальных образов

Изображение и видео

Информация в простых несжатых изображениях это положение пикселя и его цвет. Цвет пикселя можно описать тремя байтами для красного, зеленого и синего компонентов (RGB), или четырьмя байтами для указания прозрачности (RGBA). Положение пикселей описывается массивом целых чисел.

Некоторые иллюстрации содержат повторяющиеся цвета, что приводит к избыточности информации. Нет смысла выделять три байта, если в изображении очень мало разных цветов и оттенков. Чтобы не тратить 3 байта на каждый пиксель в большинстве современных форматов используют палитры цветов и оттенков. Тогда цвет пикселя можно описать одним байтом. Этот байт будет указывать индекс цвета в палитре.

Для ещё большей экономии, используют сжатие. Вы можете описать состояние каждого пикселя, но это не имеет смысла. Легче просто сказать: «красный круг с радиусом R и центром [x1;y1]». Подобным образом работают алгоритмы сжатия данных. Несжатые данные анализируются на предмет повторяющихся функциональных закономерностей. Для сжатия изображений прекрасно подходят ряды Фурье. В результате, вы экономите пространство для хранения данных.

Для хранения видео применяют контейнера: webm, avi, mpeg-2, vob, matroska, или mp4. Для кодирования и декодирования информации применяют кодеки H.264, H.265, VP8, VP9 и так далее.

Видеокодек H.264: эксплуатация и тюнинг

Для хранения и обработки видео в современных форматах применяется аддитивное кодирования. При смене уровня освещения и угла поворота камеры меняются все цвета в следующем кадре, но большая часть относительно статичных объектов не меняется. Для устранения избыточности информации в видео придумали кодеки.

Одним из самых популярных кодеков сейчас является H.264. Для этих целей кодек H.264 использует несколько типов кадров:

  1. Ключевой кадр (I-FRM) — сжимается независимо;
  2. Предиктивный разностный кадр (P-FRM) — хранит только разницу между текущим и ключевым кадром;
  3. Двунаправленный предиктивный разностный кадр (B-FRM) — также хранит разницу между кадрами но в двух направлениях.

Skype использует кодек H.264 для кодирования видео. В данном кодеке есть параметр тюнинг. Он определяет сложность кодирования. Чем сложнее процесс кодирования, тем больше это требует аппаратных ресурсов. Самый быстрый параметр «fastdecode». Когда скорость передачи видеопотоков падает, тогда происходит их перенастройка и пропуск кадров. Большинство популярных приложений и видеохостингов используют искусственный интеллект для оптимизации кодирования видео.

H.264
Редактирование видео в Avidemux

Во время подготовки и монтажа видео мной использовано MP4 видео мультиплексор. Я хотел удалить часть видео и получил предупреждение на рисунке выше. Дело в том, что начальный кадр A и конечный кадр B промежутка AB это двунаправленные предиктивные кадры (B-FRM). Если я удалю промежуток AB и сохраню такой файл, тогда видео можно будет просмотреть, но оно не будет правильно интерпретировано декодером. Вы увидите искажения. Если A и B ключевые кадры (I-FRM) и я удалю кадры между ними, тогда искажений не будет.

Кодирование визуальных образов и проблемы стеганографии

Чем больше информационная избыточность визуальных образов, тем больше возможных скрытых последовательностей данных можно вложить в них. Сжатие частично устраняет избыточность информации и усложняет стеганографический процесс. Записать скрытое сообщение в изображение и видео возможно, но следует брать во внимание особенности форматов.

Впрочем, даже учитывая перечисленные особенности можно столкнутся с трудностями. После загрузки видео со скрытым содержанием на YouTube оно будет перекодировано при помощи кодека H.264. Рекомендации Google касательно формата заливаемого видео https://support.google.com/youtube/answer/1722171.

Рекомендации желательно выполнять. Стеганографическое сообщение можно залить на YouTube, но будьте внимательны, они периодически меняют алгоритмы на своих серверах. Иногда это приводит к смещению цвета и смене гаммы. Через некоторое время ваше скрытое сообщение может потеряться. Последний известный мне случай, случился в ноябре 2018 года. Они обновили свои алгоритмы и цвета съехали.

Какие кодеки применяет YouTube?

На сегодняшний день, они применяют адаптивные алгоритмы. Что это значит? Это значит, что выбор кодека зависит от популярности и размера вашего видео, количества ваших подписчиков.

После того как вы залили видео на YouTube, алгоритмы проверяют его на соответствие рекомендациям в предыдущем пункте. Если вы залили видео в формате и кодировке не входящих в список рекомендаций, тогда YouTube преобразует видео применив кодировку H.264. Что касается контейнера, то для устройств с разрешением ниже 720p, YouTube будет вещать видео в контейнере flv, а для 720p и выше в контейнере mp4.

Указанные выше трудности усложняют стеганографический процесс, но не делают его невозможным. Ниже будут представлены методы не зависящие от кодеков. Смотрите общие стеганографические методы.

Как перекодировать видео из одного формата в другой в Windows, MacOS и Linux?

Существует кроссплатформенная утилита ffmpeg. Она позволяет конвертировать видео из одного формата кодирования в другой. Можете поэкспериментировать с параметрами и посмотреть на результат.

Если видео (input.mkv) использует контейнер Matroska и кодировщик H.264, тогда для перекодирования в кодек VP8 зайдите в каталог с приложением, откройте командную строку и введите следующее: ffmpeg -i input.mkv -c:v vp8 output.mp4. Файл output.mp4 перекодирован кодеком vp8 [1].

Аудио дорожки

С математической точки зрения, звук это непрерывная (аналоговая) функция. Но в цифровой технике его хранят только в дискретной форме. То есть значения непрерывной функции снимают через целочисленные интервалы времени и получают дискретную функцию. Частота снятия звуковых характеристик звукозаписывающим оборудованием называется частотой дискретизации. Чем меньше частота дискретизации тем больше потерь. Минимальная допустимая частота дискретизации 8 килогерц. Ниже этого порога человеческий голос нельзя будет разобрать.

Для преобразования аналогового сигнала в дискретный применяют аналогово-цифровой преобразователь (АЦП). Тем кому данная тема очень интересна, я рекомендую почитать книги про основы теории информации и кодирования [2].

В одном видео могут быть несколько дорожек. Дорожки могут быть моно и стерео. Каждая дорожка имеет собственный уровень звука и балансировку. Балансом звуковоспроизведения называется пропорциональное разделение звука между левым и правым динамиками. Баланс который равен 100% означает что звук равномерно распределяется (отношение 1/1).

Разрушение мифов про качество звука

Некоторые ошибочно полагают, что купив усилитель звука они получат качественный звук. Усилитель только усилит звук и внесет новую погрешность в звуковой тракт. Если вы хотите выбрать качественный усилитель, тогда смотрите на его диапазон операционных частот. Чем он шире, тем лучше. Каждый усилитель имеет свою погрешность искажающую звук. Для каждой из частот эта погрешность разная.

На самом деле, качество звука зависит от многих факторов. Если звукозаписывающее оборудование имеет АЦП с частотой дискретизации 20 килогерц, тогда вы легко сможете уменьшить качество дискретизации для записанного звука при помощи программ. Но если вы захотите, увеличить качество до 44 килогерц, тогда вам придется купить новое звукозаписывающее оборудование. Но даже это не защищает от всех помех. Температура также незначительно влияет на частоту дискретизации.

Качество звука зависит от выбранной среды передачи. В звуковом тракте это играет огромную роль. Электромагнитное излучение создает помехи. Самая низкая помехоустойчивость у беспроводной передачи. Оптическая среда передачи защищена от помех такого рода лучше других.

искажение формы синусоиды
Дискретизация (квантование) сигнала

Квантование сигнала также вносит дополнительные искажения. На рисунке выше, показано как исказится форма синусоидального сигнала после дискретизации на АЦП. Такие искажения называются шумом квантования.

Стеганографические методы подсвечивания информации

Производители музыкального оборудования Yamaha создали приложение Vocaloid имитирующее людской голос. С точки зрения стеганографии, широкий выбор голосов может использоваться в методе подсвечивания. Однако, смена акцентов может испортить эстетическое удовольствие от прослушивания музыки.

Хотя, если использовать хор вокалоидов в mp3 файле со многими дорожками, тогда смену акцента можно скрыть. Секретную информацию, таким образом, можно будет извлечь после обработки звуковых дорожек в редакторе: 1) дорожки без стеганографического содержания заглушить; 2) увеличить звук стеганографической дорожки и извлечь слова [3].

Результат применения вокалоидов для стеганографического сокрытия секретной информации, иногда превосходит все ожидания. Энергичная музыка на фоне также может отвлечь внимание слушателя к смене акцента слов. Тон произношения и скорость тоже могут нести дополнительную смысловую нагрузку.

Метод метронома

Метод метронома прекрасно подходит для подсвечивания слов в открытом тексте. Если у вас очень хороший музыкальный слух и чувство ритма и времени, тогда этот метод вам понравится. Суть метода состоит в применении пауз разной длинны.

Так пауза равная одной четверти указывает что скрытого слова нет, а пауза равная двум четвертям что следующее слово входит в секретное сообщение. Это очень заметно, особенно если выбрать ритм равный 100 ударов в минуту. Выбирать значения ритма следует из промежутка 120-135 ударов в минуту.

Общие методы

Одним из общих стеганографических методов является метод LSB. LSB — это английская аббревиатура которая означает «наименьший значащий бит» (Least Significant Bit). Суть LSB-методов состоит в смене последних значащих бит в каждом байте информации.

Метод шаговых градиентов является частью LSB-методов применяемых к визуальным образам. Шаг градиента выбирают небольшой. Таким образом, трудно будет отличить смену цвета объекта.

step gradient method
Фруктовый алфавит

Приложения уменьшающие размер файла могут убирать из палитры цветов неразличимые оттенки. Все цветовые индексы сместятся и сокрытое значение потеряется. Если в Adobe Photoshop выбрать «сохранить рисунок для веб», тогда вы потеряете скрытое сообщение.

Для видео я рекомендую использовать lossless опции (без потерь) для кодеков. Если вы решили залить видео со скрытым содержимым на видеохостинг, тогда лучше использовать Vimeo. Этот видеохостинг предоставляет несколько тарифных планов. Начиная с Pro подписки (20$ в месяц) вы получаете возможность устанавливать необходимые цвета. Они не будут смещаться.

Стеганография и YouTube

YouTube перекодирует ваше видео и цвета сместятся. Во избежание этого используйте следующий алгоритм действий:

  1. Увеличьте шаг градиента и проверьте цвета на соответствие;
  2. Если цвета сместились и не соответствуют первоначальным повторите пункт 1.

Если буква «A» представлена цветным RGB вектором [255,102,0], тогда буква «B» будет представлена не так как на рисунке выше, а вектором [255,100,0]. В этом случае шаг зеленого компонента вектора равен двум.

Стоит учитывать и то, что у разных людей разное восприятие цветов и разные мониторы. Чем лучше матрица вашего экрана, тем больше оттенков вы сможете различить визуально. Большой шаг увеличит различие между оттенками.

Аналогичный совет вы можете применить для аудио файлов. В аудио можно использовать звуковой градиент для различения скрытого смысла. Также можно использовать смену баланса звукового вывода на дорожках. Смену инструментов и так далее.

Альтернативные способы

Самый действенный способ для коротких сообщений — это использование динамических объектов, или динамического замещения объектов. Этот способ позволяет скрыть короткие слова или текстовые матрицы при помощи коротких визуально отличимых состояний. Суть состоит в том, что объекты последовательно выстраиваются в ассоциативную связь и могут быть интерпретированы.

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

Выводы

Сокрытие информации в аудио и видео файлах эффективнее, чем в текстовых данных. Однако, оно на порядок сложнее и требует навыков работы со звуком и видео. При постобработке аудио и видео материалов разными приложениями часть скрытой информации может быть потеряна. Во избежание этого предложено использовать градиенты с большим шагом.

Как альтернативу предложено использовать методы динамического замещения объектов. Основное преимущество данного способа в том, что он не всем понятен. Ассоциативную связь может выстроить человек с определенным набором знаний, увлечений и так далее. Основной недостаток состоит в возможной неправильной интерпретации.

Источники информации:

  1. RFC 6386.
  2. И.В. Кузьмин, В.А. Кедрус. «Основы теории информации и кодирования»
  3. https://www.vocaloid.com/en/learn/

Стеганографические таблицы и создание шарад

Содержание:

Знаете ли вы, что таблица символов Unicode содержит большое количество букв которые похожи на кириллические, греческие, латинские? Более того, в расширенную кириллицу внесены некоторые латинские буквы. Все эти буквы имеют разные числовые коды. Это позволяет скрыть в тексте стеганографические сообщения.

Здесь и далее будут приведены вспомогательные таблицы и некоторые другие данные позволяющие эффективно реализовать стеганографическое сокрытие информации.

Основные европейские языки

Алфавиты большинства европейских стран построены латинскими, греческими и кириллическими символами. Ниже приведена таблица символов для латинского, кириллического, международного фонетического алфавита (МФА) и греческого.

Латиница
Кириллица
МФАГреческий
ЛисуППФ
A,aА,аɑΑ,αA,a
B,b,ƄВ,в,Ь,ьʙ,ɓΒ,ϸ,βB,b
C,Ⅽ,ⅽ,cС,сʗ,ɕϹ,ϲC,c
D,Ⅾ,Ɗ,dԀ,ԁɖ,ɗꓓ,ꓒD,d
E,eЕ,еɐΕ,ΈE,e
F,fϜF,f
G,gԌɢ,ɡG,g
H,hН,Ң,һʜ,ɦΗH,h
I,Ⅰ,i,ⅰІ,іɪ,ɨΙ,Ί,ίI,i
J,jɟ,ʝͿ,ϳJ,j
K,k,ĸК,Ԟ,Ҡ,Ҝ,к,ԟΚ,κK,k
L,Ⅼ,lʟ,ɩ,ɭL,l
M,Ⅿ,m,ⅿМ,мʍ,ɱ Μ,ϺM,m
N,nɴ,ɲ,ɳΝ,ηN,n
O,oО,оʘΟ,οO,o
P,pР,рΡ,Ϸ,ρP,p
Q,qԚ,ԛʠϘ,ϥ,ϥQ,q
R,Ɍ,Ʀ,rГ,Ґ,г,ґʀΓR,r
S,sЅ,ѕS,s
T,tТ,тʈΤ,Ͳ,ͳ,ϯT,t
U,uЏ,џU,u
V,Ⅴ,vѴ,ѵʋγ,νV,v
W,wԜ,ԝW,w
X,x,ⅹХ,хΧ,χX,x
Y,yУ,Ү,ү,уΥ,γY,y
Z,zʐ,ʑΖZ,z
ƃБ,б ɓ
Д,д
ëЁ,ё
Ж,ж,Җ,җ
З,з,Ӡ,ӡɜ,ʒ,ʓ
И,иͶ,ͷ
Є,єϵ
ïЇ,їΪ,ϊ
Й,й,ӣ,ҋ
ɅЛ,л,Ԓ,ԓʌΛ,
П,п,Ԥ,ԥΠ,π
Ў,ў,Ӯ,ӯ
ȹФ,фɸΦ,ϕ
Ц,ц
Ч,чʮ,ɥ,
ƜШ,шɯ
Щ,щɰ
Ъ,ъ
Ы,ы
Э,э϶
Ю,ю
Я,я
  • МФА — международный фонетический алфавит
  • Лису — алфавит Фрэйзера
  • ППФ — полуширинные и полноширинные формы

Разные шрифты, могут отличатся формой букв. Впрочем, сейчас имеется тенденция к упрощению формы букв во многих языках мира. Выбирайте простые шрифты без закорючек: Serif, Times New Roman, Arial. Идеальным выбором будет моноширинные шрифты: Ubuntu mono, Monospaced и другие.

Пример стеганографического сообщения

Ниже приведен стих, который выбран не случайно. Обратите внимание на третий рядок. Все строки начинаются одинаково, а третья строка немного длиннее. Кроме того, во второй строчке неслучайная опечатка, присмотритесь внимательней. И буква «о» в слове «out» шире. Если бы строки не начинались одинаково, этого трудно было бы заметить. К тому же, многие считают поэзию скучным и унылым увлечением одиноких людей. Большая часть молодых людей прокрутила бы эту страницу до самого низа и ничего бы не заметила. Похоже, что я среди них всего лишь исключение.

І have been one acquainted with the night.
l have walked оut in rain — and back in rain.
I haѵе outwalked the furthest citу light.
I have lоoked down the saddest city lane.
I have passed by the watchman on his beat
And dropped my eyes, џnwilling to explain.

Роберт Фрост, известный американский поэт
стеганографическое сообщение
Любой шестнадцатиричный редактор покажет секрет

Просто скопируйте и сохраните этот стих в текстовый файл (в кодировку utf-8). Откройте шестнадцатиричный редактор и посмотрите на коды символов. Да, это оно! Наше предположение оказалось верным. Секретное сообщение здесь закодировано методом подсвечивания. Содержимое секретного сообщения: «I love you». А теперь, позвольте мне вставить свой собственный стих:

Есть слова, что нет смысла скрывать
Их достаточно просто сказать,
И один на один с собой
Не коверкать рядков тяжких строй

Ведь слова не приходят одни
Они разных эмоций полны
И в печатных словах не видны
Жизнью скрыты, так часто они

Невозможно их всех угадать
Продолжая все дальше читать
Их достаточно просто сказать
Их достаточно просто забыть

Разминутся и дальше плыть
Волны пеной морской облекут
Тяжесть сказанных слов уберут
Те слова, никогда не найдут…

В моем стихе стеганографического сообщения и скрытых интерпретаций нет. Конечно, мне будет приятно что вы нашли время его прочитать. Но это просто красивые слова человека, который пропустил одну остановку в общественном транспорте желая доставить эстетическое удовольствие своим читателям.

Cube Mixer screenshot
Cube Mixer

Источником моего вдохновения стало приложение «Cube Mixer». Оно помогло мне найти рифму для перевода этого стиха на английский язык. Если вы хотите выразить себя, если вам нужно найти слова для ваших близких, если вам нечего делать, тогда воспользуйтесь шансом подаренным вам судьбой. Установить приложение Cube Mixer с Google Play.

Увеличение эффективности хранения информации

Этот способ более изощренный чем предыдущий. Методы подсвечивания для европейских языков имеют небольшую эффективность. В недавней статье мы показали что данная группа методов эффективна только для китайского. Основным недостатком данных методов является необходимость знания языка в котором будет сокрыто сообщение. То есть, если текст который несет стеганографическое сообщения на английском, тогда и стеганографическое сообщение должно быть на английском.

Если одну букву можно написать похожими символами, но имеющими разное числовое значение, тогда количество этих символов будет определять скрытую полезную нагрузку. Существует 14 разных способов написания буквы «K». Если вы применяете 14 разных способов написания, тогда общее количество состояний для двух символов «K» будет достаточно для представления 14^2=196 символов. Знаете что это означает? Это означает, что двумя позициями содержащими все возможные символы похожие на «K» можно закодировать алфавиты нескольких языков!

Если не различать большие и маленькие буквы, тогда в число возможных языков мы можем включить:

  • Австрийский, Английский, Датский, Венгерский, Испанский, Латвийский, Литовский, Молдавский, Немецкий, Румынский, Польский, Португальский, Финский, Французский, Эстонский — около 50 латинских символов;
  • Абхазский, Азербайджанский, Белорусский, Болгарский, Боснийский, Казахский, Киргизский, Македонский, Монгольский, Русский, Сербский, Туркменский, Узбекский, Украинский — около 50 кириллических символов;
  • Арабский, Хауса, Фарси, Уйгурский, Урду — около 50 символов;
  • Идиш, Иврит — 22 буквы.

Все перечисленные языки имеют похожие алфавиты. Китайский язык также можно выразить через пиньинь латинскими буквами. В число перечисленных языков входит шесть основных языков ООН: английский, арабский, испанский, китайский, русский, французский. На этих языках общается большая часть жителей земли.

Символы диакритики

Вы можете сказать: «Не все латинские буквы буквы имеют аналоги в кириллице и наоборот». Да, конечно. Существуют ещё специальные символы диакритики. Таким образом русскую букву «ё» можно представить как латинскую букву «e» с двойным диэрезисом. Белорусскую букву «ў», представит как латинскую «y» с макроном «ӯ». Вы можете создать свою схему для увеличения полезной нагрузки. Существует огромное количество возможных вариантов представления букв и их невозможно перечислить. Все ограничивается только вашей фантазией.

Группа европейских языков основанные на латинице, кириллице и греческом имеет около 50 возможных диакритических символов. Не все эти символы используются в литературном языке и не все из них несут информационную нагрузку. Некоторые несут информацию о том как следует произносить слово.

Если к каждому возможному символу похожему на букву «К» добавить символы диакритики, тогда общее количество возможных скрытых состояний двух букв существенно увеличится: (14+50)^2=4096. Если каждое из этих состояний интерпретировать отдельно, тогда можно представить индексы 4096 слов в словаре. Более того таким образом можно представить каждую инструкцию процессоров Intel и AMD. В одном стихотворении Пушкина «Евгений Онегин», можно передать скрытую в виде процессорных инструкций программу «hello world».

Один из первых успешных серийных процессоров от Intel (8086) имел около 100 документированных инструкций и некоторое количество недокументированных инструкций. Машинная команда (опкод, операционный код) может иметь следующие размеры: 1 байт, 2 байта, 3 байта. Среди всех возможных машинных инструкций 8086-го в обычной программе можно было встретить от 20 до 35 инструкций разного вида. Представьте, что каждую из инструкций процессора мы можем передать в виде двух печатных символов с диакритикой. Это будет более удобно, чем кодировка Base64 которой мы представили бинарную информацию (смотреть статью Представление информации: язык программирования Python и кодировки).

Полуширинные и полноширинные формы символов

Все китайские иероглифы полноширинные. Если применять пробелы, тогда текст сдвигается. Символ пробела занимает не полную ширину места для знака. Иногда требуется вставить слово на другом языке, тогда пробелы применяются и текст сдвигается. Чтобы сохранить эстетическую красоту китайцы используют полноширинный вариант латинских символов (ППФ).

Каждая буква и цифра в ППФ центрирована. Это немного растягивает предложение. Так предложение «I love you!» представленное символами ППФ будет иметь вид: «I love you!». Я не ставил пробелы и не менял шрифт.

Как применить указанную особенность?

Whatabig cat? Iwanna pet it!

В данном тексте содержится стеганографическое сообщение. Посмотрите внимательно на все буквы «a». Два символа ППФ написаны без пробелов. В предложении «Какой большой кот? Я хочу его погладить!» скрыта аббревиатура AI (англ. artificial intelligence — искусственный интеллект). Самое интересное в этом то, что текстовый процессор Libre Office показывает, что в этом предложении 8 слов. Мы не ставили пробелы рядом с артиклем «a». С точки зрения посимвольной обработки первые три слова написаны слитно. Проверить это очень просто, кликните два раза по слову и оно выделится все.

Цифры и знаки

Если вы думаете что цифры нельзя заменить на похожие символы, тогда вы очень ошибаетесь. Что касается цифр, то их можно представить следующим образом:

Представление
00 (ППФ);
߀ (НКО, языки манде);
Օ (армянское «O», в некоторых шрифтах рисуется как 0);
11,イ,l (ППФ);
⌉ (разнообразные технические символы);
22 (ППФ);
33(ППФ);
Ʒ (МФА, буква «ezh»);
З,з (кириллические буквы «Ze»);
ℨ (готические буквоподобные символы);
44(ППФ);
կ, Կ (армянские буквы «Ken»);
ⴗ (грузинская буква «Qar»);
55(ППФ);
Ƽ, ƽ, (расширенная латиница);
ⴝ (грузинская буква «Char»);
66(ППФ);
77(ППФ);
ל (иврит буква «Lamed»);
88(ППФ);
Ց (армянская буква «Tso»);
99(ППФ);
ց (армянская буква «Sо»);

Недостатком данного метода является то, что не все шрифты содержат графическое представления для таких знаков. Что касается знаков препинания, они также имеют похожие символы. В качестве примера, возьмите символы ППФ.

Искусственный интеллект и подбор шрифтов для стеганографии

Шрифтов существует огромное количество. Более того, существует огромное количество стилей написания букв. Невозможно просмотреть тысячи символов Unicode. Как выбрать самый удобный для стеганографических целей шрифт? Для этого можно применить возможности нейронных сетей.

Вы можете создать свою архитектуру нейронных сетей. Но я вас предупреждаю, тренировка и тестирование занимает огромное количество времени. Небольшой набор обучающих данных может не позволить получить результат который мы хотим получить. Лучше применять готовую архитектуру и готовый набор образцов для обучения такой как: базу данных рукописных образцов MNIST, или что-то подобное.

Примерный алгоритм действий после тренировки и тестирования нейронной сети:

  1. Создать скрипт который по очереди выводил все символы шрифта;
  2. Получить скриншоты с экрана;
  3. Подать на входы нейронной сети нормализованное изображения;
  4. Получить результат (вектора меры подобия образцов для классификации).

Шарады, буллинг и известные люди

Вам нравится разгадывать шарады? Мне тоже. Вы знаете что в Индии, в штате Пенджаб, есть свой пенджабский язык. Этот язык раньше использовал сложную систему письменности которая называлась «Шарада». Первый сикхский гуру Нанак упростил пенджабский и создал современную систему письменности Гурмукхи. Эта система письменности заменила Шараду. Слово «шарада» до сих пор используется как синоним для слова загадка.

Индусы создали шахматы. Индусы много чего разработали и придумали. Они занимают ключевые должности во многих известных мировых корпорациях и странах. Например, глава корпорации Google Пичаи Сундарараджан, министр обороны Канады Харджит Сингх Саджан. Последний получил орден за военные заслуги. Почему все они такие умные? Возможно, в детстве все известные индусы разгадывали шарады и играли в шахматы.

В Индии, 22 разных официальных государственных языка. Представляете, как тяжело местным чиновникам. Конечно, в индийских школах все изучают хинди. Но жизнь вынуждает знать хотя-бы несколько государственных языков. Ниже приведен список наиболее распространенных языков Индии, среди миллионов людей:

государственные языки Индии
Разнообразие языков полуострова Индостан
1. Хинди — 551.4
2. Английский — 125.3
3. Бенгальский — 91.1
4. Телугу — 84.9
5. Маратхи — 84.1
6. Тамильский — 66.7
7. Урду — 59.1
8. Каннада (дравидийский) — 50.7
9. Гуджарати — 50.2
10. Ория, или Одия — 36.6
11. Малаялам — 33.7

Согласно другой гипотезе, буллинг в детстве вынуждает людей становится хитрее и умные других. Если люди не останавливаются и продолжают жить не обращая на это внимание, тогда они становится лучше других и получают преимущество. Почитайте биографию Илона Маска, почитайте биографию Сергея Брина. Не знаю нравятся ли им шарады, но в логотипе компании Tesla спрятан кошачий нос. Люди получившие преимущество наслаждаются своей уникальностью и создают такие же уникальные вещи достойные похвалы.

Выводы

Языки общения, также как и языки программирования, являются инструментами. Умные и находчивые люди могут использовать их для получения преимущества. Стеганография это лишь одно из них. Уникальность и разнообразие людей дает нам новые символы. Иногда, люди становятся символами эпохи. У нашей эпохи много символов и создаем их мы прямо или косвенно.

Не останавливайтесь, находите время для личного развития и приносите людям пользу, вдохновляя других поступать также. И мир станет лучше, мир станет совершеннее! Оставайтесь с нами, читайте наши статьи, узнавайте новое.

Представление информации: язык программирования Python и кодировки

После прочтения данной статьи, вы узнаете почему буквы во многих языках мира занимают два байта памяти, а английские буквы занимают только один байт памяти и многое другое. Я надеюсь эта статья будет интересной для вас.

Содержание:

Как было сказано в предыдущих статьях, любое различимое состояние можно использовать для кодирования информации. В электронных приборах таких состояний всего 2: «включено», «выключено». В английском алфавите 26 букв, а это значит, что достаточно 5 бит для представления каждой буквы. Общее количество состояний которые могут быть интерпретированы 2^5=32. Если учитывать большие и малые буквы, тогда для 52 символов требуется 6 бит.

Однако, кроме основных печатных символов существуют ещё и управляющие символы. Каждый раз когда вы нажимаете клавишу энтер при печати текста, вы вставляете невидимый управляющий символ конца строки. В операционных системах Windows конец строки обозначается двумя символами. Ребята из Microsoft любят отнимать место на вашем жестком диске. Это конечно шутка, просто старые принтеры требовали присутствия символа возврат печатающей каретки.

Большие буквы английского алфавита
Представление больших букв в кодировке ASCII

Семи лампочек достаточно для того чтобы закодировать английскую букву и некоторые другие дополнительные символы которые не имеют графического представления. Вместо лампочек для кодирования информации можно использовать все что угодно. Для представления информации можно применять какой-либо физический процесс из n состояний. Компьютер построен преимущественно из полупроводниковых элементов и поэтому состояний всего два. Один бит — 2^1 состояния, один байт (8 бит) — 2^8=256 состояний, два байта — 2^16=65536 состояний.

английский алфавит
Представление малых букв в кодировке ASCII

Впрочем, даже если вы применяете кодировку ASCII для представления символов, хранение одного символа требует 8 бит. Это объясняется размерами регистров центрального процессора, ведь так удобнее обрабатывать информацию. Если вам понравились анимированные иллюстрации и вы хотите распечатать плакат для компьютерного класса, тогда можете скачать его с сайта openclipart (poster1, poster2).

Восьмой бит в символах ASCII использован для представления символов других алфавитов и элементов псевдографики: черточки, угольники, кружочки и так далее. В операционных системах Windows подобные кодировки называются следующим образом: Windows-XXXX. Вместо символов XXXX употребляется номер закрепленный за каким-то из национальных алфавитов, или его вариаций. Кодировка Windows-1251 представляет символы русского алфавита. В операционных системах Linux эта кодировка называется CP-1251. CP — это английская аббревиатура «code page» (страница кодировки). Символы рассмотренных кодировок имеют размер 1 байт.

Недостатки и преимущества однобайтовых кодировок

Кодировка — это таблица интерпретации состояний. Поскольку восьмой бит использован, то для представления символов других алфавитов осталось 7-бит. Следовательно, возможно представить 2^7=128 символов, букв и знаков. Представьте, что вы живете в Камбодже и в вашем алфавите 74 буквы. Кроме них, присутствуют ещё и другие символы и знаки которые также надо представить. Совершенно ясно что одного байта не хватит.

Некоторые страны такие как Чехия, Словакия, Венгрия, Польша, Румыния используют кодировку Window-1250 для однобайтовых символов. Если русскоязычный пользователь захочет посмотреть румынский сайт который применяет данную кодировку для представления символов, тогда он увидит на экране бессмыслицу не содержащую румынских символов. Скорее всего данная бессмыслица будет интерпретирована браузером, как кодировка Windows-1251.

Кодировок можно создать очень много, но очень важно чтобы те кто будет читать написанный текст могли это интерпретировать. Для поддержки однобайтовых кодировок, в современных браузерах есть возможность их ручного выбора. Но это очень неудобно и занимает много времени. Современные люди не привыкли тратить время на подобные операции.

И тем не менее, их все ещё применяют. Так средство управления базами данных СУБД IBM DB2 позволяет определить однобайтовые кодировки для текстовых полей (Windows-1251, Windows-1250 и другие). Другие СУБД также позволяют сделать подобные вещи. Основное преимущество однобайтовых кодировок это размер одного символа. Это позволяет эффективно распоряжаться местом для хранения информации, особенно когда текстовых данных очень много. Однако, это не применяется в сфере управления государственными объектами. Не секрет, что все страны обмениваются информацией между собой. Есть специальные комиссии при ООН которые отвечают за сбор статистической информации. Например, комиссия по торговле — UN Comtrade.

Кроме всего вышесказанного, существуют Open Data проекты для реализации прозрачного управления государством. Смысл данных проектов в том, что каждый гражданин может видеть как происходит принятие решений каждым конкретным чиновником и если его не устраивает управленческие решения, отстранить его от управления. Согласно требованиям ISO и ICAO компьютерные сети и системы которые реализуют решение задач подобного рода должны хранить информацию в кодировке Unicode.

Unicode и его преимущества

Для того чтобы не переключатся между кодовыми страницами был придуман стандарт Unicode. Unicode консорциум отвечает за его развитие. Самым популярным, сейчас является способ представления символов Unicode — UTF-8. Для эффективного хранения данных он использует разный размер для символов и букв: 1 байт, 2 байта, 3 байта и 4 байта. Этот стандарт совместим со стандартом ASСII. Первые 128 символов это английские буквы, цифры, пунктуационные символы и управляющие знаки которые мы рассмотрели в самом начале. Каждая буква в русском, белорусском, польском и многих других языках имеет размер два байта. Это значит что для 4096 символов английского алфавита англичанин потратит 4 Кб, а жители других стран потратят 8 Кб памяти. Не обижайтесь, просто продолжайте жить дальше.

Двух байтов памяти достаточно, чтобы представить 65536 разных символов. Во множество таких символов включены алфавиты большинства языков мира и специфические знаки такие как: армянский знак вечности аревахач, стрелочки, математические символы и так далее. Редкие и не часто употребляемые символы имеют размер 3 байта. Во множество таких символов входит: значок «№», редкие китайские иероглифы, славянский астериск, кириллическая многоглазая буква «о (ꙮ)», и символы древнего славянского языка. Эмоджы, руны и дополнительные знаки имеют размер 4 байта. А вот это уже очень печально. Хранение текста состоящего из 4096 рун потребует наличия 16 Кб, это в 4 раза больше чем для английского текста!!!

Как компьютер интерпретирует символы Unicode?

Как браузер и другие приложения знают сколько байт занимает символ? Приложения обрабатывает символы байт за байтом. Если первый байт имеет числовое значение больше 192 (то есть, если два значащие биты слева в первом байте равны 1), тогда символ представляется двумя байтами и два значащих бита во втором байте равны 10. Если в значащих битах три единицы, тогда символ состоит из трех байт. Таблица описывающая принцип интерпретации Unicode представлена ниже.

Количество
байт
Шаблон
10XXXXXXX
211XXXXXX 10XXXXXX
3111XXXXX 10XXXXXX 10XXXXXX
41111XXXX 10XXXXXX 10XXXXXX 10XXXXXX

Вместо буквы «X» можно ставить 1, или 0. В самом начале, стандарт Unicode позволял использовать символы размером 6 байт (6 двоичных октетов)[1].

В 2003 году ситуация изменилась и для пользовательских нужд разрешают использовать только 4 октета. Этого вполне достаточно для всех мировых языков и даже для пиктограмм и символов Эмоджи. Возможно, в далеком будущем количество Эмоджи увеличится и у каждого человека будет свои собственные символы Эмоджи, тогда 6 октетов будут очень кстати [2].

Недостатки Unicode и алгоритм быстрого поиска

Чем больше байт информации, тем сложнее и медленнее происходит поиск. Члены сообществ по разработке стандартов RFC продумали все возможные трудности и нашли эффективное решение. Алгоритм Бойера-Мура (эвристика плохих символов) позволяет быстро находить текстовую информацию выраженную через символы Unicode. Именно этот алгоритм применяет ваш браузер при нажатии Ctrl+F. В научные интересы Бойера-Мура входило исследование и построение конечных цифровых автоматов.

Пусть длинна текста в котором осуществляется поиск равна N, а длинна шаблона для поиска равна M. Фаза предварительных вычислений займет O(M^2 + σ) операций, где σ — размер алфавита. Тогда в самом лучшем случае выполнение алгоритма займет O(N/M) сравнений. В самом худшем случае, когда текст состоит из одинаковых символов, например 100 букв «С», в которых осуществляется поиск 5 букв «С», тогда работа алгоритма займет O(N*M) сравнений.

В отношении безопасности, очень важно избегать ошибок переполнения буфера. В 2001 году были случаи использования запрещенных последовательностей октетов и неправильные парсеры привели к серьезным проблемам в безопасности. Поэтому при написании своего обработчика символов Unicode обратите внимание на стандарт RFC [RFC 3629, пункт 10].

Язык программирования и кодировки

Некоторые люди помнят, какой проблемной была интерпретация символов Unicode в древних языках программирования. Более того, существовало огромное количество таких же древних программ, которые не поддерживали данную кодировку. Если вместо букв вы видите квадратики, то это может означать следующее:

  1. Отсутствует поддержка Unicode;
  2. Выбранный шрифт не имеет графического представления для данного символа.

Случаев когда поддержка Unicode отсутствует практически нет. Все языки программирования и современные приложения по умолчанию поддерживают такую кодировку. Но не все шрифты имеют графическое представление для пиктограмм и символов Эмоджи. Это следует учитывать при разработке программ для работы с текстовыми данными.

Применение кодировщиков в Python и модуль Encodings

Python это кроссплатформенный язык портированный под Windows, Macos, Android. В большинстве дистрибутивов Linux он установлен по умолчанию. В ОС Виндовс, запустите Python Idle, чтобы воспользоватся интерпретатором. Также можете установить интегрированную среду разработки Visual Studio Community, или PyCharm, чтобы упростить разработку на данном языке программирования. С точки зрения удобства использования, язык Python занимает первое место. Его используют ученые, сетевые инженеры и просто энтузиасты. Он прост и его можно применять пошагово в режиме интерпретации. Для просмотра справки для модуля Encodings непосредственно из режима интерпретации по очереди введите две строки.

  1. import encodings
  2. help(encodings)

Если вы решили создать собственный кодек, прочитайте также справку по модулю codecs. Импортируйте модуль codecs и также воспользуйтесь методом help(). Можно создать свой собственный кодек и зарегистрировать особый метод для поиска информации. Чтобы просмотреть список всех доступных методов (функций) модуля, введите команду dir(encodings). Будьте внимательны, если вы не ввели директиву «import название_модуля», тогда метод dir возвратит ошибку:

NameError: name ‘encodings’ is not defined

Во многих языках есть функция ord(), которая позволяет узнать код символа в десятичной системе исчисления. Получить коды для множества символов, а не для одного символа, можно используя кодеки. Для шестнадцатиричного представления примените кодек «hex_codec», как на рисунке снизу.

кодеки в python
Применение кодировщиков в Python

Этот кодировщик получил в качестве аргумента строку которая состоит из 5 начальных букв английского алфавита и 5 начальных букв русского алфавита. Узнать длину данной строки можно функцией len(), только значение нужно разделить на 2, поскольку один двоичный октет представляется двумя шестнадцатиричными цифрами (от 0 до ‘f’). Как вы видите, длинна такой строки 15 байт: 5 байтов английских букв и 10 байтов русских букв. Обратите внимание, что первый байт в русских символах «d0» и английская буква «A» отличается числовым значением от русской буквы «А». Метод int() преобразовал шестнадцатиричное значение для английской буквы «A» в десятичное 65. Для конвертации в двоичную систему исчисления примените функцию bin().

5 английских букв (41-45) и 5 русских букв (80-84) в кодировке CP-866

Важное замечание! После копирования текста из приложения которое сохраняет файлы в формате Windows-XXXX (CP-XXXX) в интерпретатор Python, он автоматически конвертирует текст в UTF-8. Если вы хотите узнать коды символов в других кодировках возьмите утилиту hexdump (подойдет любой другой шестнадцатиричный редактор) и откройте файл сохраненный в другой кодировке, например в CP-866, как на рисунке выше.

Кодировщик punycode позволяет передать Unicode посредством ASCII символов. Закодированной строке вы можете придать первоначальный вид применив метод decode(). Для выхода из режима интерпретации наберите функцию quit().

Итеративные и инкрементальные кодеки

Существуют два вида кодировщиков: итеративные кодировщики и инкрементальные кодировщики. Если кодировщик обрабатывает символы длинна которых заранее известна, тогда он называется итеративным. К такому типу кодировщиков относятся кодировщик: ASCII и другие типы кодировщиков основанные на нем, например ROT-13. Пример применения кодировщика ROT-13 показан на рисунке ниже.

итеративный кодек rot-13
Использование кодировщика Rot-13 в Python

Как вы видите, он работает только с ASCII символами и если в качестве аргумента написать русскую букву он выдаст ошибку. Чтобы избавится от ошибки уберите все символы числовой код которых превышает 127. Таким образом, останутся только ASCII символы.

Как было сказано ранее, символы Unicode имеют разную длинну. Следовательно, они не могут быть обработаны итеративными кодировщиками. Для их обработки применяют инкрементальные кодировщики, которые содержат переменную-счетчик. Задача счетчика заключается в подсчете количества признаков, которые определят количество байтов в для каждого символа. В качестве такого признака употребляются значащие биты первого байта Unicode последовательности (смотреть таблицу выше).

С точки зрения безопасности компьютерных систем, инкрементальные кодировщики которые не осуществляют проверку количества символов опасны также как и массивы. Будьте внимательны, придерживайтесь принципов безопасного программирования. Разработка программ это большая ответственность и этим нельзя пренебрегать. Недостаточно просто быть просто кодером, нужно иметь знания и опыт в сфере компьютерной безопасности.

Base64, Big5 и обезьяны на Youtube

Знаете ли вы, что любую программу можно передать в виде текста? Некоторые сайты запрещают загружать исполняемые файлы в формате *.EXE, или бинарные файлы. Некоторые почтовые клиенты, могут не пропускать письма с вложенными исполняемыми файлами. Во избежание этого вы можете преобразовать содержимое исполняемого файла в текст, алфавит которого составляет 64 символа ASCII. Данная кодировка получила название Base64. Размер закодированного таким образом файла будет больше, чем размер оригинального исполняемого файла.

Base64 сообщение
Обезьяны на Youtube

С использованием Base64 связаны некоторые смешные моменты. Если вы пользуетесь Youtube, тогда вы могли видеть ошибку изображенную на рисунке выше. Как вы видите, это очень похоже на кодировку Base64, но отсутствует символ слеша и плюс. Кодировка Base64 существует в нескольких вариантах. На рисунке выше, изображена «urlsafe Base64» кодировка. Символы 62 и 63 («+» и «/») изменены на «-» и «_». После применения кодека Base64, вы можете получить зашифрованное содержимое стэка вашего браузера. Смешная обезьянка, на картинке выше, провоцирует поделится данным скриншотом с друзьями и добавить хэштег #youtubemonkeys. Не спешите смеяться, это не самоирония. Инженеры Youtube регулярно осуществляют поиск подобных скриншотов. Декодируют base64 и потом, расшифровывают секретное содержимое стэка вашего браузера и находят неисправность. Если бы они вас попросили поделится содержимым стэка, вы бы наверняка отказались. Не правда, ли?

Для передачи китайских письма, иногда не достаточно стандартных иероглифов. В Гонг Конге применяют дополнительные иероглифы. Для их ввода изобрели кодировку Big5. Кроме этой кодировки Python поддерживает и другие экзотические кодировки, которые входят в стандарты ISO [3].

Выводы

Мы рассмотрели стандартные способы представления символов. Несмотря на то, что в текстовом редакторе вы видите один символ он может иметь разный размер в байтах. Кодировок существует много, но Unicode среди их занимает доминирующую роль. Абсолютное большинство приложений и вебсайтов использует эту кодировку.

Некоторые буквы имеют одинаковую форму, но различный код. Эта особенность может быть использована для стеганографических целей. Мы рассмотрели, каким способом вы можете узнать код буквы: 1) посредством использования языка программирования Python; 2) посредством утилиты hexdump.

Источники информации:

[1] RFC 2279, «UTF-8, a transformation format of ISO 10646», устаревшая версия.
[2] RFC 3629, «UTF-8, a transformation format of ISO 10646».
[3] ISO 10646, Стандарт Unicode.

Секреты Китая: китайская электроника и стеганографические методы

Вам необязательно знать китайский язык для использования китайской стеганографии! Это конечно было бы неплохо, но смысл данной статьи не в том что бы научить вас китайскому.

Содержание:

В недавней статье было представлено много способов составления стеганографических сообщений. Как было сказано ранее, в европейских языках для таких целей могут служить символы диакритики, пробелы, умышленные опечатки и т.д. В арабском, урду, фарси и уйгурском можно использовать еще и таквили (смотреть статью Стеганография, арабский и немного математики (часть 1)).

метод инкрементальных указателей
Стеганографические сообщения
(метод инкрементальных указателей)

Вы можете меня спросить: «А как насчет китайского, корейского и японского?». Предыдущие методы подходят для китайского, но имеют собственную специфику и некоторые ограничения. Так пробелы в китайском языке не ставят для экономии места. Рассмотренный ранее метод инкрементальных указателей также применим для китайского языка, только указывать специальные символы будут не на букву а идеограмму представленную в виде иероглифа. Если вы хотите прочитать обычную газету, вам необходимо знать около 2000 иероглифов. Иероглифическая письменность требует особых методов ввода. В японском — анси (Anthy), в корейском — хангыль (Hangul), в китайском — женьма (ZhengMa), чжуинь (Zhuyin) и пиньинь (Pinyin). Пиньинь — наиболее распространенный метод ввода китайских иероглифов. Обычная qwerty клавиатура способна представить китайский иероглиф. Пиньинь заменил чжуинь и женьма. Английские буквы qwerty-клавиатуры передают звуки, а диакритические символы — тон.

Раскладка клавиатуры
(чжуинь)

Вступление

Куда бы вы не посмотрели и какой-бы товар не купили, вы всегда встретитесь с китайскими иероглифами. Невозможно за свою жизнь ни разу не узнать о Китае. Китай промышленная страна производящая большинство современной электронной техники. Большинство электронных приборов состоит из китайских полупроводниковых компонентов. В статистике международной торговли азиатские страны занимают доминирующую роль. Свободная экономическая зона в Гонконге представлена отдельно, но это тоже Китай. Итого, Китай продал в 2015 году полупроводников на 361597 миллионов долларов США!

объем продаж полупроводников
Статистика экспорта полупроводников на 2015, в млн. $ США
(источник ООН, UN Comtrade, категория товаров 776 и 772)

Производство полупроводниковых элементов есть в некоторых странах, но основная производственная мощность находится в Китае, Сингапуре, Корее и так далее. В России, в городе Зеленоград, компания Mikron производит полупроводники по технологическому процессу 65 нм. Чем меньше технологический процесс, тем больше плотность элементов на одном кварцевом кристалле. Например, в Республике Беларусь компания Интеграл в 2012 производила свои наилучшие полупроводниковые компоненты по технологическому процессу 350 нм. Китай производил подобное ещё в 1997 году, а сейчас Китай внедрил на своих самых продвинутых в мире заводах технологический процесс менее 5 нм!!!

Почему в Европе производство полупроводников не настолько развито как в Китае?

В демократических странах власти прислушиваются к мнению экологов. Более того, средства массовой информации постоянно говорят о вреде заводов по производству электроники. Общественность на таком информационном фоне протестует и власти которые ничего не понимают в физике и электронике принимают соответствующие решения, составляют регуляторные акты и прочее. В результате, если предприниматели захотят создать завод, то будут вынуждены заплатить огромные налоги в бюджеты этих стран. Заработанные деньги государство потратит на экологов, а экологи будут опять препятствовать развитию технологий. Это похоже на замкнутый цикл из которого не выйти.

В отношении Китая, все совсем иначе. Там также есть экологи, но их количество и роль совершенно иная. К государственному планированию там привлекают всех специалистов одновременно. Государство пользуясь средствами массовой информации детально объясняет своим гражданам суть своей политики. Если с неба падет кислотный дождь, тогда оно как заботливая мать, советует всем надеть защитные плащи и не парковать свои автомобили на улице чтобы краска не облезла. Если на улице легкий смог, тогда оно советует дышать через респиратор, противогаз, или влажную тряпочку. Простите меня за сарказм, но это лучше чем совсем не дышать.

Кремниевые полупроводники в вашем iphone стоят не больше чем песок под вашими ногами. Основная сложность — это технологический процесс. Прибыль китайских компаний очень быстро превышает затраты, на производство. Сейчас Китай, Корея и прочие азиатские страны являются монополистами в сфере поставок электронных компонентов. Китайские запчасти всюду: в самолетах от Boeing и Airbus, в чайниках и микроволновках, в ракетах и спутниках, в дешевых брелках и дорогих автомобилях. Первый китайский Airbus A320 был построен в 2008 году [1].

Недокументированные возможности и запрет Huawei в США

Каждая деталь и каждый компонент имеет свою спецификацию (datasheet). Спецификация описывает работу устройства, режимы взаимодействия с другими устройствами, условия эксплуатации и так далее. Некоторые возможности современной техники утаивают от потребителя. Знание о таких возможностях имеют только некоторые люди и прежде всего военные.

Лев Сергеевич Термен в 1945 изобрел первое подслушивающее устройство без батареек. Для снятия информации с этого устройства достаточно было просто подогнать машину со специализированной аппаратурой под здание. Подобным образом работают утюги, микроволновки, брелки, браслеты на ваших руках. Разоблачение Эдуарда Сноудена это лишь малая часть всего, что известно о великой мощи Китая.

А теперь угадайте: «Кто победит в гипотетическом противостоянии между Китаем и США?» Конечно это будет Китай. Запрет продукции Huawei в 2018 году это только жалкая попытка избежать неизбежного. Благодаря глупым запретам экологов, собственного производства полупроводниковых компонентов которые были бы способны удовлетворить все внутренние потребности у США нет. Выход США из Парижского климатического соглашения в 2017 году, это попытка освободить предпринимателей от высоких налогов ограничивающих развитие технологий внутри страны.

Вы можете спросить: «Почему лидеры крупных корпораций не поддержали отказ США от подобного соглашения?» Все они зависят от китайских поставщиков электронных компонентов. Они боятся потерять доход который имеют и вынужденны так делать. Если поставки китайских запчастей прекратятся, то цены на технику взлетят и часть населения не сможет позволить её приобрести.

Почему китайскую культуру нужно знать?

Китай это непросто технологический гегемон, это будущее. Вы не найдете страну способную заменить Китай. Подобной страны нет и в ближайшей перспективе не будет. Сохраняйте спокойствие и учите китайский. Не стоит переживать насчет возможных перемен, ведь Китайцы очень прагматичный и миролюбивый народ. Они хранят древнюю мудрость в своей культуре и традициях.

Китайский это:

  • просто;
  • интересно;
  • увлекательно.

Разоблачение мифов про иероглиф две женщины под одной крышей

К сожалению, в интернете очень много лживых фактов о китайском. На одном из сайтов я нашел информацию что существует иероглиф две женщины под одной крышей, который переводится как «беда», или «несчастье». Это наглая ложь и такого иероглифа нет. Хотя, есть иероглиф «три женщины».

иероглиф две женщины под одной крышей
Китайская письменность

Если вы хотите убедится в этом, можете вставить иероглифы в Google Translate:

  • 女 — «женщина»;
  • 僉 — «единодушное»;
  • 險 — «риск» и «зловещий»;
  • 姦 — «зло», «изменник», «разврат».

Последний, иероглиф переводится на английский как «зло», «изменник», «предатель». Google Translate перевел это на русский как слово «вероломный». Конечно, понятие слово не подходит, ведь китайская письменность является идеографической. Эти иероглифы правильно называть не словами, а идеограммами. Идеограмма передает идею, или множество идей. Две, три или четыре идеограммы составляют слово.

Защита информации и китайская стеганография

Несмотря на кажущееся разнообразие символов в китайском языке, есть элементарные составляющие, которые являются основой для китайской письменности. Составляющие выглядят как горизонтальные, вертикальные и косые линии. Исключением является составляющий компонент в форме цифры 3, как в слове ребенок 子. Из нескольких идеограмм можно составить новый составной символ, как было показано выше.

Слово женщина на китайском будет написано: 女人, или 一個女人, или 一个女人. Последнее написание содержит два слова 一个 (одна сущность) и 女人 (женщина). Определим значение каждой идеограммы в последних двух словах. Горизонтальная черта означает единицу и применяется когда мы говорим о ком-то конкретном. Второй иероглиф указывает на то, что речь идет о личности. Третий иероглиф означает идеограмму женщина. Четвертый иероглиф — означает идеограмму человек. Эти четыре идеограммы полностью передают смысл слова, которое дословно можно интерпретировать как: «одна женщина человек». Переводчик переведет это, как слово «женщина». Тем не менее, последних двух иероглифов достаточно чтобы понять суть.

Слова могут быть описаны несколькими разными последовательностями иероглифов. Конечно, не все варианты подходят с точки зрения лингвистики и китайцев, но европейцы и американцы вставив эту фразу в Google Translate не найдут ничего подозрительного. Ниже приведены варианты перевода для фразы «один за другим»:

  1. 逐一
  2. 一一一
  3. 一逐一
  4. 一輛接一
  5. 一個接一個
  6. 一个接一个
  7. 一個接一个
  8. 一个接一個

В контексте с другими словами их смысл будет немного различаться. Например, 4 вариант дословно переводится как один после другого. В английском языке такого количества возможных альтернатив нет и можно сказать только: «один за одним», или «один за другим». Вот оно, богатство китайского языка.

Синонимический и омонимический методы подсвечивания в стеганографии

Предположим, что вы имеете огромный словарь содержащий синонимы для каждого слова. Если каждое слово (идеограмма, или последовательность идеограмм) W в секретном сообщении имеет хотя бы один синоним, или омоним S, тогда можно договорится что один из синонимов будет означать наличие данного слова в секретном сообщении. Единственное требование заключается в начальной обработке текста, в котором будет сокрыта информация, во избежание появления случайных слов S которые могут нарушить смысл секретного сообщения.

Теперь, представьте что китайскому шпиону понадобится сообщить о результате своих действий в центр координирования действий. За ним следят и он не может написать все открытым текстом. Чтобы избежать подозрений большая часть его переписки это пустая болтовня. Секретные слова он передает только с использованием синонимов подсвечивания. С точки зрения тех кто за ним следит это выглядит как невинный текст. Давайте представим что ему надо ответить в секретном сообщении где он был в указанное время. Он был в машине и ответить может следующими текстовыми сообщениями.

На китайскомсекрет
於车裡отсутствует
(текст пустая болтовня)
在车裡присутствует слово «в»
在車裡присутствуют слова
«в машине»

Первые два иероглифа называются маркерными идеограммами. Для всех перечисленных фраз Google Translate выдаст одинаковый по смыслу перевод. Разумеется короткая фраза «в машине» может показаться подозрительной. Этим фразам можно придать более невинный вид: «Я забыл свои ключи в машине и опоздал на работу». Текст на китайском с секретным сообщением: «我在車上忘記了鑰匙,上班遲到了。». Текст на китайском, но без секретного сообщения: «我於车上忘記了鑰匙,上班遲到了。».

Как вы видите в 16 иероглифах сокрыто 2 идеограммы. Эффективность сокрытия будет равна 2/16 * 100=12.5%. Избыточность информации будет 87.5%. На самом деле, эти показатели были бы лучше, если бы сообщение было таким коротким как в таблице. Для фраз в таблице эффективность 2/3 * 100=66.67%, а избыточность информации 33.33%. В обоих случаях мы получили приемлемые показатели. Это очень простой пример.

А теперь, давайте представим что шпион о котором мы говорим был в поезде. Ему надо сказать слово «поезд» в секретном сообщении. Это слово передается двумя иероглифами: огонь 火 и средство передвижения 车. Первый иероглиф существует только в одной форме, а второй может быть заменен на 車 (мы выбрали его как маркер, смотреть предыдущий пример). Предложение которое хранит в себе секретное сообщение может быть таким: «Он потушил огонь и уехал на своей машине». Тоже самое, но на китайском: «他撲滅了火,開著他的车開走了。». В этом предложении пока нет секретного сообщения. Синонимом слова огонь является слово пламя, которое можно написать как 火焰 (без маркировки), или 火燄 (последний иероглиф используется в качестве маркировки секретного сообщения). Но пламя 燄 и 車 в сообщении будет неверно истолковано как «пламя машины». Как вы можете увидеть, эта идеограмма нам не подходит.

Необходимо поставить рядом знак, который бы обратил внимание именно на иероглиф огонь 火, но не изменил смысла предложения. Для этого можно использовать пробел. Пробелы обычно не пишутся в китайском языке для экономии места, но если мы его напишем это не будет ошибкой. Запишем секретное сообщение в наше предложение так: «他撲滅了 火,開著他的車開走了。». Посмотрите как Google Translate перевел оба варианта предложений.

Перевод сообщения без скрытого содержания и сообщения со скрытым содержанием

Посмотрите на одинаковую транскрипцию под китайским текстом. Более того, они звучат одинаково и смысл у них одинаковый, не обращайте внимание на перевод в Google Translate. Друзья это восхитительно, мы только что закодировали слово поезд в предложении которое его не содержит.

Преимущества:

  1. Китайский позволяет выразить фразы по разному включая: «в», «один за одним» и так далее;
  2. Не все люди знают китайский;
  3. Используя маркерные идеограммы можно закодировать сообщение которое имеет другой смысл, отличающийся от смысла предложения которое этот секрет несет;
  4. Высокая эффективность (плотность) сокрытия информации.

Недостатки:

  1. Если синонимов мало, тогда это приведет к повтору слов в тексте;
  2. Не все слова имеют подходящие синонимы (в основном это простые слова из одного иероглифа, например слово «огонь»);
  3. Тот кто это прочитает должен знать словарь маркерных идеограмм и иметь хорошую память.

Другие методы подсвечивания

Маркерными символами можно передавать скрытое содержание. Помните как пишется слово женщина ( на самом деле два слова 一个 и 女人) на китайском? Первый иероглиф в нем это горизонтальная черта. Вместо этой черты можно вставить длинное тире которое будет использоваться как маркер указывающий на скрытое слово. Внимательный читатель может заметить небольшую разницу в толщине черты.

два словапредложениеприсутствие
подсвечивающего
маркера
一个女人我看到穿蓝色连衣裙的一个女人。без тире
маркер отсутствует
—个女人我看到穿蓝色连衣裙的—个女人。с тире
маркер присутствует
скрытое слово «женщина»

Перевод обоих предложений одинаковый: «Я видел женщину в голубом платье». В дословном переводе: «Я видел личность одной женщины в голубом платье». Одна личность —个 употребляется, когда мы говорим о том кого хорошо знаем, или значимой персоне. Конечно, иногда это можно расценивать как сарказм. В китайском языке это звучит корректно, но не в русском или английском. Именно поэтому переводчик, пропускает слова одна личность.

Следующий пример это слово друг 朋友. Большой китайско-русский словарь содержит пример применения слова 一个 и 朋友: «作为一个朋友, 我劝你们。». На русский это переводится как: «Я советую вам, как друг». Слово 一个 не переводится и подходит чтобы применять его как маркер который подсвечивает скрытые слова [2].

Преимущества:

  1. Очень простой способ для подсвечивания скрытых слов.

Недостатки:

  1. Китайский шрифт всегда моноширинный. Если заменить очень много горизонтальных иероглифов на тире, тогда текст с тире сместится влево, по сравнению с текстом содержащим горизонтальный иероглиф;
  2. Это вносит незначительный другой смысл в предложение.

Методы инкрементальных указателей

Как было сказано в самом начале, эти методы не подходят для сокрытия текста который написан на китайском. Никто не говорил что пробелы нельзя применять, но предыдущие методы больше подходят для китайской письменности. Очень много пробелов в текстовом файле могут внушить подозрения о сокрытой информации.

Методы множества шрифтов

С точки зрения защиты информации, китайский идеальный язык для сокрытия информации, особенно если рисовать иероглифы вручную. Один китайский иероглиф может состоять из 13 компонентов. Эти 13 компонентов вы можете нарисовать используя разную толщину.

Секретную информацию в сообщение вложить можно только в том случае, когда существует n разных различимых состояний. Представим, что у нас есть 5 знакомест, тогда общее количество состояний n^5. Так, восьми битами (n=2), можно представить 2^8=256 разных символов. Если вы вручную создаете концепцию дизайна ваших иероглифов, тогда вы можете воспользоватся кистью в векторных редакторах таких как Adobe Illustrator, Corel Draw, Inkscape. Одно из полезных свойств таких приложений — это возможность выбора угла пера, массы и коэффициента сужения.

Векторные графические редакторы и стеганография

Прежде всего задайте коэффициент масштабирования равным 100%. Для аккуратного написания иероглифа задайте большую массу (меру инерции) для кисти. Перо стало более послушным и рисует очень плавно и аккуратно. Не округляйте концы и оставьте их острыми. Установите фиксацию в промежутке от 64 до 81. Выберите разные углы наклона пера и посмотрите как будут выглядеть нарисованные линии.

Линии нарисованные кистью для углов наклона 90° и -90°
(приложение Inkscape)

На рисунке выше изображены 4 пары вертикальных и горизонтальных линий. Угол наклона кромки на концах линии обозначен красными числами — для угла наклона пера α=90° и синими числами — для угла наклона пера α=-90°. Обратите внимания на отличия толщины линий и кромок на их концах. Для вертикальных линий порядок рисование сверху-вниз (рисунок a) и снизу-вверх (рисунок b) имеет значения. Для горизонтальных линий (рисунки c,d) это не имеет значения и кромка на краях одинаковая. Если угол наклона пера α=0° и вы рисуете вертикальные линии то порядок рисования не имеет значения.

Давайте нарисуем иероглиф счастье для разных углов наклона пера. Угол кромки на концах линий можно определить в тех случаях, когда линия не соприкасается с другими линиями. Этого конечно можно не делать, но шрифт получится неаккуратным. Посмотрите на рисунок ниже и вы увидите, что угол наклона пера влияет на толщину линий.

стеганография и китайские иероглифы
Китайский иероглиф fú — счастье и благополучие

Допустим, каждый компонент иероглифа может быть либо толстым, либо тонким. В этом случае, мы имеем 2^1 разных состояния для каждого компонента. Какое общее количество всех возможных состояний для 13 компонентов? Верным ответом будет 2^13= 8192. А что если каждый компонент рисовать ещё немного вогнутым, выпуклым или ровным? Тогда каждый компонент будет иметь 2^1*3^1=6 состояний. Перечислим все состояния в таблице.

НомерСостояние
1тонкий и вогнутый
2тонкий и ровный
3тонкий и выпуклый
4толстый и вогнутый
5толстый и ровный
6толстый и выпуклый

Общее количество состояний для 13 компонентов будет 6^13=13060694016. Это восхитительно, ведь тринадцати миллиардов хватит чтобы передать индексы слов в английском и русском словарях. А если учитывать угол кромки на концах линий, то один иероглиф может теоретически скрыть индексы слов для словарей всех существующих языков.

Китайский и семейные шифры

У каждой китайской семьи есть свои традиции написания иероглифов. Эти традиции позволяют знающему человеку понять больше, чем написано в тексте. Если вы знаете немного китайский язык, тогда вы можете создать свою личную тайну. Выберите свой иероглиф, создайте свой уникальный стиль. Если у вас нет времени, мы можем вам помочь и создать для вас уникальный логотип со скрытым смыслом.

В недавней статье, мы говорили об армии Александра Македонского и о том, как он однажды разрешил отправить солдатам письма к их родным. Во вторую мировую войну был также интересный случай использования семейного шифра. Солдат посылал письма семье и в поле отправитель указывал разные инициалы. Таким путем он хотел сказать родителям, где он находится. Но письма пришли не в порядке их отправления и его родители не поняли где он находится (читать больше в статье Эволюция шифров и их стойкость).

Выводы

Мы рассмотрели Китай как великое промышленное государство способное изменить ход истории. Мы одеты в китайские технологии, у нас в кармане смартфон с китайскими деталями. Даже если это не так, то патенты на технологии согласно которым производят электронные детали принадлежат китайцам. Только эту страну можно назвать мировым электронным гегемоном. Это является достаточно серьезным поводом чтобы учить китайский.

Китайский язык идеально подходит для сокрытия информации. Он имеет свои особенности, которые могут усложнить процесс сокрытия информации. Тем не менее, он помог увеличить эффективность сокрытия информации существенно лучше, чем это было бы возможно путем применения европейских языков.

Источники информации:

[1] Michael Pecht, университет Мериленда, «Китай как гегемон глобальной электронной индустрии: как это получилось и почему не изменится», 2009 год.

[2] Левина О.В. «Большой китайско-русский словарь», 2009 год.

Стеганография, арабский и немного математики (часть 1)

Содержание:

Восточная цивилизация произвела огромное количество великих поэтов, ученых, философов и мудрецов. Собственно, у них было для этого достаточно времени. В предыдущей статье мы говорили об одном из них, великом арабском криптоаналитике Аль-Кинди (смотреть Эволюция шифров и их стойкость)[1].

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

Стеганография — это наука о сокрытии информации. Носителем информации может быть все что меняет свою форму, внутренне или внешнее состояние. Это может быть надпись невидимым чернилом, прическа и даже борода. Это звучит странно, но бороду использовали для сокрытия татуировок с тайным содержанием.

Когда персы в пятом веке до нашей эры захватили Гистиея, который был правителем Греции, они постоянно следили чтобы он ничего не передал своим союзникам. Тем не менее, хитрый грек послал сообщение своему двоюродному брату Аристагору. Сообщение было доставлено в Милет в виде татуировки на волосатой голове его раба [2].

Арабский текст как способ скрыть информацию

Здесь и далее мы будем говорить о сокрытии текстовой информации в тексте. Вам не нужно знать арабский язык для этого, хотя это было бы отлично. Основной смысл его применения — это его восхитительные свойства.

Семь фактов об арабском языке

Арабский очень важен и включен в шесть основных языков ООН. Культурное наследие оставленное нам арабами очень огромное. Знание арабского, также как и других языков, помогает лучше понять восточную культуру, историю и так далее. Основные факты об арабском языке изложены ниже:

  1. Написание слов начинается с правой стороны и заканчивается на левой стороне (это очень удобно и рука не пачкается, особенно если вы левша);
  2. Не все буквы в одном слове пишутся слитно;
  3. Буквы делятся на солнечные и лунные;
  4. Алфавит содержит 28 букв;
  5. 22 буквы имеют 4 формы написания;
  6. 6 букв имеют только 2 формы написания;
  7. В арабском отсутствуют заглавные буквы.

Если вы UI-дизайнер, или работали с консолью в Linux, то вы наверняка знаете, что шрифты могут иметь разную ширину. Шрифты в которых буквы имеют одинаковую ширину — называются моноширинными (англ. monospace). Для выравнивания слов в арабском языке добавляют специальный символ, который называют татвиль, или кашида. Слова можно растягивать как баян, добавляя татвили много раз.

СловоЗначениеНормальное
написание
Татвиль
аль-малуденьгиالمالالــــمــــال
аль-хамдупохвалаالحمدالحمــــــد
слитное написание
Лигатура риал — символ арабских валют

Существует много способов слитного написания букв (лигатур). Одна лигатура может содержать несколько букв. На зеленом кружке нарисована лигатура риал. Слово может быть растянуто (ريال), или чересчур сплюснуто как риал (﷼).

В каскадной таблице стилей CSS3 раньше можно было определять стили с выравниванием при помощи кашиды. Добавление кашиды может усложнить поиск слов и поэтому обычно не используется в основном тексте. Конечно, если вы не преследуете эту цель. Его использование имеет смысл когда вы создаете навигационное меню на сайте. Данные символы есть на сайте сетевой академии Cisco в навигационном меню при выборе арабского языка в качестве основного.

Использование информативных и неинформативных символов

Информативные символы несут основную смысловую информацию. Неинформативные символы такой информации не несут. Неинформативными символами является символ пробела и вышеупомянутый символ татвиль. Отличие арабского языка от группы европейских языков состоит в том, что он позволяет вставить в слово любое количество неинформативных символов. В европейских языках подобных символов мало. Обычно это диакритические символы, знаки препинания, и другие особые символы.

Для сокрытия текстовой информации в текстах, которые написаны на европейских языках приходится использовать смену регистра букв, умышленные опечатки, добавление лишних символов. Но все эти операции очень заметны. Ниже приведен стих Роберта Фроста в который вложено сообщение: «I love you».

i have been one acquainted with the night.
I have waLked Out in rain — and back in rain.
I haVE outwalked the furthest citY light.

I have lOoked down the saddest city lane.
I have passed by the watchman on his beat
And dropped my eyes, Unwilling to explain.

Роберт Фрост, известный американский поэт

Если вы посмотрите на данный текст, то вы обратите внимание на измененный регистр букв. В других, более незаметных схемах сокрытия, используется лишние пропуски между словами для указания индекса буквы. Каждый лишний символ пробела указывает порядок буквы в следующем слове. Смысл стеганографии в незаметности для большинства людей.

Как вы видите, для 8 символов скрытого текста требуется 256 символов открытого текста. Эффективность сокрытия выражается как отношение количества символов скрытых данных к количеству символов открытого текста. Для наших слов эффективность составляет 3,125%.

Избыточность информации равна 96,875%. Эта величина показывает неэффективность сокрытия информации. Данный показатель неприемлемый для информационного обмена. Для передачи одной статьи на этом сайте потребовалось бы около 320 000 символов.

Урду, уйгурский, фарси и белорусский арабский алфавит

Арабский оказал огромное влияние на другие языки такие как: урду, уйгурский и фарси. В иранском фарси, кроме 28 букв арабского алфавита присутствуют ещё 4 буквы. В урду также могут использоваться арабские буквы для написания слов.

Татары использовали символы арабского алфавита для передачи символов белорусского алфавита. В библиотеках Вильнюса, а также в библиотеках Минска хранятся книги написанные на белорусском при помощи арабских символов.

Собственно, текст на английском также можно выразить при помощи арабских символов. Арабские 28 букв могут быть использованы для передачи 26 букв английского алфавита. Если кто-то вставит данный текст в переводчик Google Translate, то он ничего не поймет.

Впрочем, для передачи символов русского языка можно применить арабский алфавит, ведь каждая буква имеет несколько форм. Это конечно будет очень заметно. Для русского языка лучше использовать фарси, который содержит 32 символа (букву «ё» в русском алфавите можно просто пропустить).

Стеганография и преимущества арабского

Размещение букв с повторениями в слове аль-малу

Самое главное преимущество это 4 формы написания букв: обособленная, начальная, конечная и промежуточная. В арабском слове аль-малу 3 буквы (две буквы «лям» и одна «мим») имеют 4 формы написания, а остальные 2 буквы «алеф» только 2 формы.

Давайте подсчитаем, сколько возможных размещений букв можно получить для этого слова. Максимальное количество разных состояний которое может хранить это 5-буквенное слово равно 256. Но это самый идеальный случай и он подходит только если каждое из состояний можно интерпретировать отдельно. Например, если все пять позиций занимают «обособленные» формы букв это соответствует числу 256 и означает, что требуется посмотреть на слово с индексом 256 в словаре.

Таблица соответствия для сокрытия символов
(только для букв «алеф», «лям» и «мим»)

Теперь подсчитаем сколько состояний нам необходимо чтоб передать каждую букву английского алфавита. Если каждый кружок на рисунке может пребывать в двух состояниях, то количество кружков которое требуется для одной английской буквы равно логарифму с основой 2, где аргумент равен 26 (количество букв алфавита). Значение этого логарифма равно 4.7, то есть для сокрытия одного символа нужно 5 кружков.

Если арабский текст применить для сокрытия информации достаточно только 3 кружечка для букв «алеф», «лям» и «мим» Количество разных состояний: 4^2*2^1=32 — возможных символа. Количество лишних состояний для трех букв: 32-26=6. Шести состояний не хватит чтобы закодировать английскую букву. Найти для них применение мы больше не сможем. Остальные две буквы оставляют нам 8 возможных состояний (4^1*2^1=8), но и их тоже не хватит.

А сейчас, давайте подсчитаем эффективность: 1/5*100=20%. Один английский символ который прячется в пяти буквах дает двадцатипроцентную эффективность!!! Избыточность равна 80%, но это лучше чем для стиха Роберта Фроста.

Если вы считаете, что эти операции заметны также как сокрытие информации сменой регистра символов, то вы ошибаетесь. Впрочем, для того чтобы оригинальное слово выглядело более органично можно добавить татвили. Это конечно увеличит количество избыточной информации.

Перевод нескольких одинаковых арабских слов в Google Translate

Вначале второго и третьего слова незаметно вставили оконечную форму буквы «алеф». Вконце третьего слова оконечная форма буквы «лям» стала промежуточной формой. Однако, смысл слов не изменился и переводчик по-прежнему показывает один и тот же перевод.

Стеганографический алгоритм

В общем случае, алгоритм включает следующие шаги:

  1. Создайте текст, который вы будете скрывать;
  2. Найдите или напишите некоторый открытый текст;
  3. Проведите математический анализ обоих текстов;
  4. Определите стеганографический метод который наиболее вам подходит;
  5. Если подходящие методы отсутствуют, то перейдите на шаг 2;
  6. Создайте стеганографическое сообщение.

Как было сказано ранее, арабы оставили огромное культурное наследие, которое выражено в песнях, книгах, музыке. С поиском сказок и поэзии никаких проблем нет. А содержимое секретного сообщения зависит от вас.

Математический анализ

Эта часть требует много времени, поэтому возьмите какой-либо программный пакет для математического анализа Matlab, Mathcad, Excel, LibreOffice Calc, Jupiter notebook, или интерпретатор языка Python. Имейте ввиду, что для языка Python вам потребуется дополнительные библиотеки:

  • numpy — для работы с массивами;
  • scipy — для использования статистических функций;
  • matplotlib — для построения графиков и сравнения эффективности;
  • другие библиотеки.

Первое, что вам следует сделать, это это провести частотный анализ букв и символов пунктуации. Для этого строят символьную таблицу, содержащую символы и количество их повторений для открытого и скрытого сообщений. В предыдущей статье, это сделано посредством LibreOffice Calc (смотреть Эволюция шифров и их стойкость).

Основные рекомендации к тексту в котором мы спрячем другой текст:

  1. Количество символов имеющих 4 формы написания должно быть больше;
  2. В начале и конце каждого слова желательно избегать букв с двумя формами написания;
  3. Попытайтесь избегать двух букв идущих подряд, которые имеют только две формы написания.

Стеганографические методы

Методы подсвечивания

Данный метод требует специального символа рядом со скрытым символом. Для европейских языков — это могут быть символы диакритики, или умышленно допущенные опечатки и смена регистра символов. В арабском, для указания буквы можно использовать татвиль после скрытой буквы или перед ней.

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

Методы инкрементальных указателей

В методе инкрементальных указателей в качестве основы используются в основном символы-разделители. К существующему тексту добавляются «лишние» пробелы, которые указывают на секретную букву. Фиолетовым кружком выделен отступ между словами, где один пробел уже есть. Этот пробел не входит в подсчет.

Метод инкрементальных указателей
Стеганографические сообщения

В арабском языке можно использовать символ татвиль в качестве инкрементального указателя. Также можно применить пробел и татвиль как множитель для позиции указателя. Например, два пробела и три татвиля указывают на 6 символ в слове. Количество самих татвилей в слове, в подсчет индекса искомой буквы не входят. Это очень удобно, не так ли?

Если документ который содержит скрытое сообщение хранится в электронном виде, тогда вы без особых стараний найдете все символы. А что делать, когда вы хотите разместить скрытое сообщение на вывеске магазина? Используйте только моноширинные шрифты, иначе извлечь сообщение будет проблематично.

Вернее, извлечение информации будет возможно, но вы же не будете стоять рядом с вывеской измеряя расстояние между словами. Конечно, вы сможете сфотографировать вывеску и извлечь сообщение из фото. Но моноширинный шрифт существенно ускорит этот процесс.

Методы множества шрифтов

Этот метод самый простой и имеет много вариаций. Например, метод множества шрифтов может применяться вместе с методом подсвечивания. Для этого шрифты необходимых букв в тексте меняют на другой очень похожий шрифт. Потом все буквы объединяют (конкатенируют) и получают искомое сообщение.

Кроме всего, можно использовать непосредственно название самого шрифта, как скрытое сообщение. Но этот метод ещё хуже, ведь при печати вы не сможете найти название шрифта в электронном виде. И к тому же, ему не свойственна переносимость. Данный метод требует наличие такого же шрифта на компьютере получателя, иначе информация потеряется.

Мета-информационные методы

Приставка мета означает информацию об информации. Многие современные форматы хранят в себе дополнительную информацию. Такая информация содержит упоминание об авторе, времени создания, дате модификации документа и другие сведения. Подобного рода сведения, можно использовать как подсказку для интерпретации скрытого сообщения.

Например, в качестве автора можно указать известную историческую личность. Вместо реальной даты создания, указать дату какого-то знаменательного события. И это также будет считаться стеганографическим сообщением.

Методы множественного смысла

Слова произнесенные в разном обществе могут иметь разный смысл. Так в информационных технологиях слово «мама» означает материнскую плату. Будьте осторожны, когда ругаете компоненты компьютера вашего знакомого. В таком случае, вы рискуете получить синяк под глазом.

Если вы весьма эрудированная личность и знаете множество исторических фактов, интересных культурных особенностей, специфику произношения слов и другие вещи, тогда этот метод для вас подойдет. Более того, данный метод пригодится при составлении и разгадывании запутанных квестов, головоломок, ребусов.

Выбор способа сокрытия информации

Универсального метода для выбора способа сокрытия информации не существует. Способ можно определить ответив на вопросы ниже.

  1. Что будет использовано в качестве носителя информации?
  2. Какие символы будут сокрыты?
  3. Будет ли текст со скрытым сообщением потом обработан в других программах?
  4. Какие шрифты, программы, устройства, использует получатель информации?
  5. Какими знаниями и опытом обладает получатель секретного сообщения?

После ответа на данные вопросы обратите внимание на возможные проблемы и способы рационализации представления информации.

Возможные проблемы

Текстовые процессоры (Microsoft Office Word, LibreOffice Writer и некоторые другие) могут автоматически исправлять ввод, поэтому скрытое сообщение не всегда будет интерпретировано правильно. Например, редактор векторной графики Inkscape, изменяет формы арабских букв даже если сами буквы вставлять посимвольно.

В отношении смартфонов и планшетов это особенно актуально. Отключите автоматическую замену для слов и проверку правописания. В противном случае, это серьезно усложнит весь процесс сокрытия текста.

При переносе текстовых файлов в электронном формате, обратите внимание на версии приложений. Это очень важно поскольку может повлиять на содержимое текстового документа. Как альтернативу, вы можете выбрать обычный блокнот и формат txt.

С блокнотом в ОС Windows также могут возникать проблемы. После переноса текстового файла из ОС Linux в Windows, обычный блокнот в Windows неправильно интерпретирует конец строки. В Linux конец строки выражается ASCII символом «подача рядка» (Line feed, 0x0A). В Windows новая строка начинается после символов «возврат каретки» (Carriage return, 0x0D) и «подача рядка».

В результате, в Windows вы можете увидеть текст размещенный на одном рядке. Во избежание этого, подойдет любой блокнот который поддерживает два формата конца строки. Приложения, которые подходят для этих целей: notepad++, Editpad, Visual Studio Code, Brackets, Sublime Text, и так далее.

Способы рационализации стеганографических процессов

Схем рационализации представлений скрытого сообщения очень много. Для каждого из языков они разные. Для русского языка характерна высокая избыточность состояний. Одну из 33 букв русского алфавита можно передать минимум шестью кружочками, все из которых, находятся в двух разных состояниях.

Как вы видите, количество всех состояний для этих кружков равно: 2^6=64. Количество неиспользуемых состояний равно: 64-33=31. Если сократить алфавит до 32 символов, тогда будет достаточно пяти кружков. В таком случае, количество всех состояний будет: 2^5=32. Количество неиспользуемых состояний будет: 32-32=0.

Исходя из вышеизложенных особенностей, мы пришли к выводу что оптимизировать процесс сокрытия можно:

  1. Увеличением количества состояний букв открытого сообщения (которое переносит секретную информацию);
  2. Уменьшением количества символов в алфавите скрытого сообщения.

Если вы решили использовать европейские языки в качестве носителя секретной информации, то увеличить количество состояний можно за счет символов диакритики, смены регистра символов и умышленных опечатков. Такие манипуляции будут выглядеть очень странно и заметно.

Алфавит скрытого сообщения для сокрытия информации в двух состояниях должен иметь от 2^4 до 2^5 букв (2 означает количество состояний для каждой позиции). Тратить 6 позиций (кружочков) для символов нецелесообразно, поэтому для русского языка рекомендуют использовать укороченный вариант алфавита.

Русскую букву «ё» заменяют на похожую на неё букву «е». Буква которая выпала из алфавита применяется не так часто. Пусть n — количество позиций для символа. Если секретное сообщение написано на других языках, количество символов в алфавите которых немного превышает 2^n и значительно меньше 2^(n+1), тогда такой алфавит нужно сократить для увеличения плотности передачи.

Если изначально планируется передавать только две фразы «ДА» и»НЕТ», то множество символов секретного алфавита можно сократить до 5 символов: {‘А’,’Д’,’Е’,’Н’,’Т’}. Это очень упрощенный пример, но он объясняет почему следует использовать статистический анализ.

Выводы

Проанализировано свойства арабского, латинского и русского алфавитов. Показано превосходные свойства арабского для незаметного сокрытия информации. Приведены основные методы сокрытия информации. На их примере показано способы оптимизации процессов сокрытия информации.

Количество способов сокрытия информации не ограничивается приведенными примерами. Основная сложность применения таких подходов состоит в разном стиле текстов. Каждый стиль требует своего уникального подхода. Тексты с огромным количеством повторений наименее подходят для сокрытия информации.

Источники информации:

[1] Аль-Кинди «Трактат о дешифровке криптографических сообщений»

[2] Геродот «История в 9 книгах»

Стандарты безопасности защищенных сетей

Качественный выбор компонентов компьютерной сети и их правильная настройка очень важны, если мы говорим о сетевой безопасности предприятия. Но задача обеспечения полной безопасности не ограничивается только существующей физической инфраструктурой.

Семиуровневая модель OSI описывает взаимодействие систем объединенных в сеть. Согласно ей, в существующей физической сети можно создавать виртуальную сеть VPN, или даже множество оверлейных сетей (сети поверх сети). Использовать оверлейные сети можно и для сокрытия конфиденциальных данных.

Аналогией из реальной жизни является полицейский и законопослушный гражданин. Если такой гражданин работает домашним мастером, то ему наверняка, приходится ходить с молотком, плоскогубцами, кусачками и прочим оборудованием. Если свои инструменты он будет нести в руках, то полицейскому и окружающим людям это покажется подозрительным. Правда ведь, очень странно видеть улыбчивого парня с молотком, рядом с кассой, в продуктовом магазине? Он может улыбаться, но это не придаст ему доверия, потому что есть общепринятые правила поведения.

безопасность окружающих
Правовой казус

В компьютерной инженерии протокол — это общепринятое правило регулирующее определенную деятельность. В реальной жизни есть правило, согласно которому, молоток кладут в чемодан для инструментов. Также протоколом можно считать слова из известной песни Михаила Шафутинского: «Говорила мама мне: «Не ешь с ножа – будешь злым»». Протоколов много и каждый человек может создать свой, но ваш молоток держите подальше от кассира и полицейского.

В контексте сетевой инженерии, чемоданчиком для инструментов является стек протоколов TCP/IP. Все возможности, стандарты, характеристики, требования, предложения касательно использования общепринятых технологий описаны в RFC (аббревиатура Request for Comments). Всех их не перечислить в данном обозрении, поэтому будут рассмотрены только некоторые RFC относящиеся к выбранной теме.

Коротко о стандартах

Степень зрелости

Прежде чем стандарт станет общепринятым он должен созреть. На первом уровне зрелости стандарт называется — «Предложенным стандартом«. Это значит что он готов к внедрению, но может быть пересмотрен. Поводом к пересмотру может быть выявленный недостаток. Некоторые Интернет протоколы до сих пор имеют данный статус, несмотря на то, что их используют миллионы.

До 2011 года следующим этапом был проект стандарта. Когда стандарт частично созрел и имеет перспективы стать основой для других стандартов, необходимо его более конкретизировать и унифицировать.

И наконец, самая совершенная форма — «Интернет стандарт». После 2011 года в RFC 6410 «Проект стандарта» и «Интернет стандарт» объединили. Этот уровень характеризуется более жесткой унификацией, когда все возможные реализации «Предложенного стандарта» сравнивают и обобщают.

Нестандартные степени зрелости

В RFC 2026 введены нестандартные уровни зрелости: «Экспериментальный«, «Информационный» и «Исторический«. «Экспериментальный» — используется для экспериментов результат которых может привести к созданию стандарта. «Информационный» — определяет спецификации которые не всегда могут быть согласованы с обществом создающим стандарты. «Исторический» — документ, который забыт и не представляет практической пользы.

Исторические документы необходимы для избежания повторения ошибок прошлого опыта. Они имеют познавательный характер и помогают осмыслить и рационализировать путь производства других стандартов.

Уровни модели OSI и безопасность

Открытая модель взаимодействия систем [OSI, RFC 1122], о которой было сказано выше, является устоявшимся «Интернет стандартом». Все производители оборудования берут его содержимое во внимание. Без всего этого, ничего бы не работало должным образом.

  1. Физический
  2. Канальный
  3. Сетевой
  4. Транспортный
  5. Сеансовый
  6. Представления
  7. Прикладной

Для каждого из этих слоев существуют особые требования к безопасности. Они зависят от выбранной среды передачи, возможностей оборудования и специфики его эксплуатации.

Физический слой

На физическом уровне мы рассматриваем среды передачи и сигналы. Через среду передачи идут сигналы. Сигнал — это перемена состояния среды во времени. Сигналы имеют свойство затухать на расстоянии. В некоторые среды легко вмешаться и перехватить или исказить информацию, в другие наоборот очень сложно и проблематично.

С точки зрения безопасности, выбор среды играет главную роль, ведь она составляет большую часть пространства через которое проходит сигнал. Так выбрав в качестве среды радио волны, вы рискуете получить отказ в обслуживании.

Относящиеся стандарты и другая полезная информация:

RFCПолное название
1983Глоссарий
пользователей
Интернета

Стандарты RFC недостаточно информативно описывают первый уровень модели OSI. Более детально он описан стандартами института инженеров электротехники и электроники IEEE 802.

Беспроводная связь

Если вы увлекались радиотехникой, то наверняка знаете что не слишком сложно создать свой собственный электрический контур для передачи сигналов. На сегодняшний день, китайская промышленность выпускает массово множество готовых «глушителей» сигналов, или джеммеров.

С точки зрения законодательства некоторых стран использование подобных вещей может расцениваться как вмешательство в роботу электронно-вычислительных машин (компьютеров), систем и компьютерных сетей. Данная статья только констатирует факт незащищенности подобного рода сетей и не является прямым, или косвенным призывом к действию.

Тем не менее, среди очень богатых людей на западе их использование является весьма распространенной практикой. Почему, спросите вы? Да очень просто, все объясняется стремлением обезопасить себя от беспилотных летающих аппаратов (БПЛА). Все дроны, за исключением автономных и полу-автономных работают только на радиоуправлении. Иногда БПЛА используют для слежения, а иногда как в случае с Венесуэльским президентом Николасом Мадуро. Вспомните, печальное событие в августе 2018 года…

Беспроводная связь
БПЛА

Слава Богу, президент Венесуэлы жив и здравствует. Но неприятности тот случай доставил многим сильным мира сего. В некоторых странах после этого даже запретили продажу беспилотников. Это конечно очень глупый запрет, ведь некоторые люди их используют для красивых фото с высоты птичьего полета.

Джеммеры работают на определенных частотах. Они могут быть универсальными, или для определенного диапазона радиосигналов: WiFi, GPS, 2G, 3G, 4G, 5G. Также различаются они по мощности сигнала. Для того чтоб обезопасить себя от БПЛА, покупают небольшие по мощности мультидиапазонные устройства которые своим сигналом покрывают только территорию владельца участка. Читайте также: Особенности борьбы с беспилотными летающими аппаратами

Основные недостатки:

  1. Сигнал можно заглушить;
  2. Сигнал может получить каждый в радиусе его действия (пусть и в зашифрованном виде, но это не приятно);
  3. Качество сигнала зависит от погоды;
  4. Положение откуда исходит сигнал можно определить.

Основные преимущества:

  1. Обладает высокой мобильностью;
  2. Позволяет сэкономить на кабелях.

Кабели с медными жилами

Наиболее распространенная среда передачи информации — это кабель с витой медной жилой, в простонародье известен как витая пара. Если вы живете в многоквартирном доме провинциального города, то скорее всего к вашему домашнему роутеру подсоединен кабель данного типа.

Кабеля с медными жилами могут быть экранированы и не экранированными. Экран (обертка из фольги) это защита от внешних электромагнитных полей. От физического вмешательства данный тип связи защищен чуть лучше, чем предыдущий. Для дополнительной защиты от физического вмешательства кабели внутри дома лучше укладывать в трубу из гофрированного пластика.

Основные недостатки:

  1. Немного дороже беспроводной связи;
  2. Отсутствие мобильности.

Основные преимущества:

  1. Медный кабель можно сгибать, и укладывать как хотите;
  2. Более защищен, чем беспроводная связь.

Волоконно-оптические линии связи

Самый надежный способ связи — это волоконно-оптические линии связи (ВОЛЗ). В качестве среды используются волокна сделанные из кварца. Оптический сигнал представляет собой луч лазера. Когерентное монохромное излучение расходится меньше чем обычный свет. Кроме того, волокна легируют оксидом германия GeO2 и некоторыми другими добавками. Эти добавки меняют показатель преломления среды. Обращаться с данным типом кабелей следует осторожно. Ограниченная гибкость делает их очень хрупкими.

Работать с медной витой парой, в отличии от оптического волокна, может каждый. Перекусить кабель, зачистить концы от изоляции, всунуть в штекер 8p8c и обжать кримпером. С оптикой все обстоит по-другому, установка, монтаж и ремонт существенно сложнее и дороже.

Основные недостатки:

  1. Самый дорогой способ связи;
  2. Ограниченная гибкость кабеля;
  3. Отсутствие мобильности.

Основные преимущества:

  1. Самый безопасный способ;
  2. Самый быстрый способ связи.

Этот уровень согласно IEEE 802 разделен на два подуровня: 1) MAC — регулирует доступ к разделяемой между взаимодействующими устройствами средой; 2) LLC — обеспечивает обслуживание сетевого уровня. Часть отправляемого сообщения на этом уровне называется кадром. Заголовок кадра содержит MAC-адреса отправителя и получателя.

На MAC-подуровне происходит решение проблем коллизии доступа к среде передачи. Коллизии возникают при попытке нескольких устройств использовать среду одновременно. Подобного рода задачи решаются при помощи следующих схем доступа к среде: CSMA/CD, или CSMA/CA. На данном подуровне действует контроль качества услуг QoS (к заголовку кадра цепляется метка метка класса сервиса COS), технология VLAN, MAC-фильтрация, протоколы маршрутизации STP и SPB.

На LLC-подслое происходит мультиплексирование протоколов. Иначе говоря, на одном физическом канале связи могут быть несколько логических каналов (отсюда и название Logical Link Control). Суммарная пропускная способность физической среды разделяется между всеми логическими каналами в зависимости от QoS-метки приоритета.

ASCII коды символов тестового сообщения

БукваHELLO
Код7269767679

Протоколы канального уровня поддерживают в основном только выявление ошибок и отмену ошибочных кадров. Ошибки проверяются по контрольной сумме путем складывания числовых значений переданных символов и проверочного поля полученного кадра (смотреть стандарт ISO/IEC 3309:1993).

Поле кадра содержащего контрольную сумму называется FCS и имеет размер 2 байта. Повторная доставка кадра осуществляется только для беспроводных протоколов связи. Для протоколов проводной связи, например, Ethernet — повторная передача кадра не производится потому, что ошибок при передаче по проводах существенно меньше.

Существует большое количество протоколов канального уровня: PPP — протокол точка-точка; MLPP — многоканальный коммуникативный протокол; CDC — протокол компании CISCO для обнаружения хостов в сети; LLDP — протокол для обнаружения хостов в сети; NDP — протокол компании Nortel обнаружения хостов в сети, и множество других.

Относящиеся стандарты и другая полезная информация:

RFCПолное название
826Протокол разрешения
адресов Ethernet (ARP)
1661Протокол точка-точка
(PPP)
2641VlanHello спецификация
протокола от Cabletron’а
5517Приватные VLAN в
оборудовании CISCO:
Масштабируемая
безопасность
в мультиклиентской
среде
3069Агрегация VLAN
для эффективного
распределения
IP-адресов
4562Принудительная
MAC-пересылка:
Способ разделения
абонентов в сети
доступа Ethernet
4957Уведомления о событиях
канального уровня для
обнаружения сетевых
вложений
4719Транспортировка фреймов
Ethernet через протокол
туннелирования уровня
2 версии 3 (L2TPv3)

Эти стандарты переведены на множество языков. Будьте внимательны, переводы могут быть не всегда актуальными и содержать опечатки. Вот почему в этой статье не представлены конкретные ссылки. Если вас очень интересует какой-либо аспект, тогда читайте оригинал.

Безопасность на канальном уровне

VLAN

Хорошей практикой для организаций признается vlan-сегментирование сети. VLAN не изменяет заголовок кадра, вместо этого 4 байтовый vlan-тег ставится внутрь фрейма (смотреть стандарт IEEE 802.1Q). Даже если в сети имеется роутер, или свитч который не поддерживает vlan, он просто пропустит через себя этот кадр.

В учебниках CISCO рассказывают о автоматической конфигурации vlan и это очень удобно. Но если у вас есть достаточно времени, лучше настраивать все vlan-ы вручную не используя протоколы VTP и DTP. Протокол DTP имеет несколько режимов работы. Если на интерфейсе вашего свитча установлен режим авто транкинга (dynamic desirable), то злоумышленник может получить доступ ко всем недоступным vlan. Конечно, для этого он должен контролировать хотя-бы одну машину в вашей сети.

VPN (PPTP, L2TP)

На данном уровне OSI работает PPTP протокол реализующий оконечное шифрование. L2TP работает на данном уровне, но шифрование не реализовывает. Для шифрование используется связка L2TP (OSI слой 2) + IPsec (сетевой слой OSI).

Протокол PPTP признан ненадежным и из-за этого не будет подробно рассмотрен. Если ваш VPN провайдер поддерживает более безопасные протоколы используйте их. Например, протокол сетевого уровня модели OSI — IKEv2 (подробно что такое VPN описано ниже).

Протоколы обнаружения

Протоколы обнаружения LLDP и CDP очень полезны для автоматического обнаружения устройств и их возможностей. Если вы хотите ощутить все преимущества автоматической настройки VOIP-телефона и прочих устройств, то держите его включенным. Если злоумышленник получит контроль над одним из устройств в вашей сети, тогда он может быть использован для разведки вашей внутренней сетевой инфраструктуры.

Сетевой слой

Этот слой самый главный и отвечает за адресацию в Интернете. Основные функции: определение пути пакета и его направление. На этом уровне работает IP-адресация, которая разработана американской DARPA.

Помимо основных интернет протоколов (ipv4 и ipv6) на этом уровне работает ICMP-протокол. С ним вы сталкиваетесь когда посылаете пинг-сообщения при помощи команды ping. Эта команда посылает сообщения по указанному IP-адресу получателя. Получатель данного сообщения (IP-датаграммы), отправляет его содержимое назад. Пользовательская программа анализирует сходство и сообщает о качестве связи и процентном значении потерь.

Еще одной важной особенностью является возможность инкапсуляции ip пакетов. Идея инкапсуляции в том, чтоб упаковывать в пакет данных полезную нагрузку (payload, смотреть RFC 4303), или другой пакет (смотреть RFC 2003). RFC 4303 является частью группы протоколов ответственных за безопасность IPsec.

Network layer ip tunnel
Создание ipip туннеля в Linux

IP пакет в другом IP пакете создает IP туннель. На рисунке выше в терминале вы видите справку для команды создания туннелей реализующее предложенный стандарт RFC 2003 в Linux.

При проходе такого хитрого пакета большинство роутеров, кроме роутеров с поддержкой DPI (глубокой инспекцией пакетов), просматривают поле адреса главного пакета и не видят адрес назначения внутреннего пакета. Главный пакет доходит до адресата, распаковывается и содержимое внутреннего пакета идет дальше по своему адресу.

Относящиеся стандарты и другая полезная информация:

RFCПолное название
791Интернет-протокол
792Протокол управляющих
сообщений (ICMP)
2003IP инкапсуляция внутри IP
4303Протокол шифрования
сетевого трафика
(ESP, входит в группу
IPsec протоколов)
7359Утечки трафика из
туннеля виртуальной
частной сети (VPN)
уровня 3 в хостах/сетях
с двумя стеками
7296Протокол обмена
ключами в Интернете,
версия 2 (IKEv2)
6989Дополнительные
проверки Диффи-Хеллмана
для протокола обмена
ключами в Интернете
версии 2 (IKEv2)

Безопасность на сетевом уровне

VPN (IKEv2, L2TP+IPsec)

VPN, или виртуальная частная сеть — это сеть состоящая из территориально-разрозненных сетей объединенных в одну сеть. Данные пересылаемые через неё зашифрованы и проходят по так называемому «туннелю». Данное шифрование называется оконечным.

Туннель включает в себя промежуточные сетевые устройства, которые не могут подсмотреть зашифрованную информацию. На концах туннеля данные находятся в не зашифрованном виде и это значит что весь последующий трафик теоретически может быть просмотрен.

Обычно VPN применяется для обхода блокировок, или улучшения приватности. Но эффект очень часто может быть обратным. Безопасность зависит от выбора поставщика услуг VPN и доступных протоколов, размеров ключа, защищенности оконечных устройств и т.д.

vpn в Windows 10
Создание vpn подключения в Windows 10

С протоколом IKEv2, собственно как и с комбинацией L2TP + IPsec, вообще нет никаких заморочек. Все что вам надо это сделать следующие вещи: выбрать адрес vpn поставщика, назвать ваш интерфейс, выбрать тип соединения в свойствах интерфейса, нажать на значке сети в правом нижнем углу, кликнуть «Подключиться» и ввести имя и пароль пользователя на кого оформлена подписка.

подключения к VPN
Подключение по виртуальному vpn-интерфейсу

Стоит платная подписка около 15$ в квартал. Выгоднее конечно, заказывать на более длительный период, но если вы не уверенны в должном уровне обслуживания покупайте тарифный план на месяц, или на три. Я специально не советую поставщика услуг, потому что у каждого пользователя свои требования к качеству. Стоит заметить, что у некоторых дешевых VPN-сервисов есть одна интересная особенность, подписка для новых клиентов стоит дешевле, чем для постоянного пользователя.

Некоторые поставщики предоставляют готовые приложения-клиенты, которые облегчят переключения между VPN-серверами. Они часто созданы под Win, MacOS и что удивительно даже под Linux. Если всего этого нет, дается инструкция как сделать это вручную.

У истоков протокола обмена ключами IKEv2 [RFC 7296] стоит работник Microsoft Charlie Kaufman, член VPN консорциума Paul Hoffman, Yoav Nir из Check Point, независимый финский исследователь Pasi Eronen и еще один финн Tero Kivinen из INSIDE Secure. Как вы видите, все они представители известных организаций из разных стран мира и это внушает доверие.

Подводные камни VPN на сетевом уровне

Если VPN-приложение не имеет поддержки IPv6, тогда использование нескольких семейств адресации IPv4 и IPv6, может привести к утечкам трафика. Обратитесь к [RFC7359] и [RFC7123] для получения дополнительной информации.

ICMP протокол

ICMP протокол может быть использован для обнаружения устройств подключенных к вашей сети посредством команды ping. Большинство роутеров дают возможность отключить поддержку ICMP трафика внутри сети. Тем не менее лучше этого не делать. По умолчанию, пинги извне внутрь сети не проходят. А внутри сети ICMP-трафик отключать не рекомендуют. Выключение поддержки ICMP-пакетов может усложнить администрацию внутри больших сетей.

Транспортный слой

На транспортном уровне существуют основные протоколы: UDP и TCP. Слово «транспортный» означает главную его особенность доставлять пакеты на указанный порт. Каждая серверная-программа работающая с сетью использует свой порт, или порты (не путать с физическими портами на корпусе вашего ПК).

Если несколько серверных-программ используют один порт это вызывает конфликт. Программы-клиенты могут работать с одинаковым сетевым портом. Для примера, браузер является клиентской программой и работает в основном с портами 80 и 443. Вы можете открыть два и более браузеров и зайти на одинаковую страницу и это не вызовет конфликт.

В большинстве сетевых серверных приложений порт можно переопределить. Для примера, web-сервера apache и nginx могут сосуществовать на одном устройстве и задействовать разные порты, но это не практично. Кроме всего прочего, пользователю для доступа к порту отличному от 80-го придется писать в браузере после названия сайта символ двоеточия и номер порта. Впрочем, 65535 портов вполне достаточно.

UDP — это протокол пользовательских датаграмм. Датаграмма — это блок данных передаваемых между сетевыми устройствами без установления соединения. Этот протокол не гарантирует доставку пакета и правильную очередность, но он достаточно шустрый. На его базе можно создать свой собственный протокол.

TCP — это протокол управления передачей пакетов. В данном протоколе происходит установление соединения между отправителем и получателем. Данные переданные с его помощью, расфасовывается по пакетам, нумеруются и отправляются. Таким образом, использование TCP дает гарантию доставки в правильной очередности.

Соединение происходит после трехэтапного рукопожатия:

  1. Программа-клиент посылает SYN-флаг серверу и устанавливает случайный номер последовательности A;
  2. Серверное-приложение отвечает SYN-ACK. Номер подтверждающий принятие равен A+1. Номер пакета, который сервер пошлет клиенту устанавливается в случайное значение B;
  3. Программа-клиент шлет ACK с порядковым номером равным A+1 и номером пакета B+1.

Относящиеся стандарты и другая полезная информация:

RFCПолное имя
768UDP протокол
793TCP протокол
7323TCP-расширения
для высокой
производительности
8085Использование UDP

Что такое отброшенные пакеты?

Пакеты могут быть отброшены если:

  1. Использован сетевой фильтр и установлено правило отбрасывания определенных пакетов;
  2. Использован брандмауэр запрещающий получение пакетов через требуемый порт;
  3. Пакеты не правильно сформированы;
  4. Очередь пакетов в буфере ОС переполнена;
  5. Пакеты испорчены и контрольная сумма не совпадает.

Брандмауэры и сетевые фильтры борются с опасными пакетами словно иммунная система. Для неправильных пакетов возможны два решения: 1) отбрасывание пакетов (packet dropping); 2) отбрасывание пакета с информированием (packet rejecting).

packet dropping vs. packet rejecting
Работа брандмауэров и пакетных фильтров

Простое отбрасывание не рекомендуют применять, поскольку другая машина может сделать вывод что пакет потерялся и повторно пересылать его n-раз, тем самым создавая нагрузку на сеть. Некоторые говорят, что отбрасывание пакетов не даст враждебному пользователю понять что порт открыт. Это справедливо, но только при SYN-сканировании.

Хотя, более современные сканеры используют не только SYN-сканирование, но посылают ещё и свои фейковые пакеты.Что бы быть по-настоящему невидимым для врага, ответ от хоста должен быть одинаковым, независимо от того работает приложение или нет. Но тогда это усложнит подключение для честных пользователей.

Quick scan mode
Скриншот приложения Zenmap (быстрое сканирование)

Второй метод предпочтительнее, ведь он шлет ответное сообщение с отказом принятия пакета и его повторная передача не производится. Но таким образом, вы очень быстро дадите понять враждебному пользователю, что порт открыт и используется. Конечно, вы можете применять нестандартные порты для своих приложений и немного улучшить вашу безопасность.

команда ip в терминале Linux
Количество отброшенных пакетов и ошибок

В Windows 10 можно узнать количество опущенных пакетов командой netstat с опцией «-s». В терминале Linux для получения статистики введите команду ip —stats link (старого доброго ifconfig в Ubuntu 18.04 Bionic Beaver нет, Arch Linux перешел к управлению посредством Systemd ещё в 2014 году).

Если вам очень хочется посмотреть содержимое пакетов для контроля своей безопасности воспользуйтесь документами rfc и приложением wireshark. Правда для новичков она может показаться немного запутанной, но там довольно продвинутая система фильтрации и маркировки пакетов.

Где хранятся блоки получаемых и отправляемых данных?

Каждая операционная система хранит часть временных данных в буферах. Блоки получаемых и отправляемых данных имеют временную важность. Вот почему буфера для временных данных располагаются в ОЗУ вашего устройства.

размеры буферов
Установка размеров буферов для ОС Windows 10

В Linux задействованные сетевые параметры содержатся в файлах, которые вы можете найти в каталогах:

  • /proc/sys/net/core/
  • /proc/sys/net/ipv4/
  • /proc/sys/net/ipv6/
  • /proc/sys/net/netfilter/
  • /proc/sys/net/unix/

Тем не менее, их не редактируют вручную. Для редактирования параметров ядра, которые содержатся в папке /proc/sys/ применяют утилиту sysctl. Для настройки буфера приема данных введите в терминал:

sysctl -w net.ipv4.tcp_rmem=’4096 87380 8388608′ 

Первое значение, указанное в переменной tcp_mem, сообщает ядру . Ниже этого пункта стек TCP вообще не заботится о том, чтобы оказывать какое-либо давление на использование памяти различными сокетами TCP.

Второе значение указывает ядру, в какой момент начать снижать использование памяти, иначе неограниченный рост размеров динамически расширяемого буфера привел бы к отказу в обслуживании.

Последнее значение сообщает ядру максимальное количество страниц памяти, которые ОС может использовать. Если это значение достигнуто, потоки TCP и пакеты начинают отбрасываться, пока снова не будет достигнуто более низкое потребление памяти.

Как видите в Linux, в отличие от Windows 10 буферы динамические. Такая особенность ОС делает её гибкой и дает лучшие показатели производительности. Тюнинг параметров ядра может быть полезен в случаях:

  • Если вы увлекаетесь майнингом криптовалют;
  • Если вы поднимаете свой веб-сервер;
  • Если вы администратор датацентра.

Безопасность на транспортном уровне

Некоторые ошибочно приписывают к данному уровню модели OSI всем известный протокол безопасности TLS, но это неправильно и об этом поговорим ниже.

Безопасность на данном уровне регулируется правилами брандмауэров и пакетных фильтров. Они контролируют допустимый трафик, направления (внутрь/вне), сетевые сервисы и соответствующие им порты. Поступающие данные, в зависимости от правил, могут быть «разрешены», «отвергнуты», «опущены».

Что такое отброшенные пакеты?

Сессионный слой

Сессионный слой делится на несколько этапов. Перед началом сессии происходит обмен «рукопожатиями». Для каждого протокола он выглядит по разному, поэтому смотрите соответствующие документы RFC. Далее устанавливается сессия, которая может быть нормально остановлена, или экстренно прервана.

Относящиеся стандарты и другая полезная информация:

RFCПолное название
1928SOCKS версии 5
6066Расширения безопасности
транспортного уровня (TLS):
определения расширений
8448Пример трассировки
рукопожатия для TLS 1.3
8449Расширение предела
размера записи для TLS
8446Протокол безопасности
транспортного уровня
(TLS) версии 1.3
5923Повторное использование
соединения в протоколе
инициализации сессий
(SIP)

Безопасность на сессионном уровне

Одним из наиболее известных протоколов является SOCKS. Этот протокол активно используется в луковых TOR-прокси сетях.

Касательно TLS, нельзя точно сказать об уровне OSI. Согласно спецификации TLS [RFC 8446 смотреть пункт 1], существуют два протокола: 1) протокол рукопожатий; 2) протокол записей. На рисунке ниже, открыто приложение анализа сетевых пакетов wireshark и развернуты поля протокола рукопожатий. Образцы сетевых пакетов скачаны с сайта wireshark в виде pcap файла.

протокол рукопожатий TLS
Wireshark

С одной стороны, он находится на сессионном уровне (зеленый эллипс). С другой стороны, сжатие реализуется на уровне представления (синий эллипс). Хотя, во многих источниках, этот протокол приписывают сессионному уровню.

Слой представления

Слой представления ответственен за способы обработки данных. Он имеет дело с кодированием, декодированием, шифрованием, дешифрованием, сжатием, распаковкой и так далее.

Нижние уровни определяют специальные кодовые последовательности (delimeter symbols, separator symbols) для разграничения внутреннего содержимого пакетов. Во время спуска по модели OSI, на уровне представления такие символы экранируются, если они присутствуют, для избежания неправильной интерпретации пакета при проходе между сетевыми устройствами.

Уровень представления, в основном, транслирует данные между обычным представлением верхних уровней и унифицированным сетевым форматом передачи. Данные могут передаваться в разных форматах из разных источников. Таким образом, уровень представления отвечает за интеграцию всех форматов в стандартный формат для эффективной и действенной коммуникации.

Слой приложений

На нем работает dns благодаря которому вам не приходится вводить ip-адреса в адресную строку браузера и достаточно просто указать имя сайта. В случае, если ваш домашний внешний ip меняется, вы можете воспользоватся динамическим dns и иметь постоянный удаленный доступ к вашему домашнему ПК посредством ssh, или любого другого безопасного протокола.

Есть технология WakeOnLan, которая позволяет включить удаленный компьютер на расстоянии. Для этого вам надо включить пробуждение по сети в вашем UEFI, или BIOS. Ну и конечно сетевой кабель и кабель питания также должны быть подключены в соответствующие разъемы. Если у вас есть роутер, потребуется настроить его для пропуска wake-кадров из сети. Можете удивить кого-то из ваших близких внезапно включившимся ПК.

SSH — это протокол уровня приложений, который имеет множество клиентских и серверных реализаций с похожими названиями. Некоторые люди используют ssh для создания ssh туннелей, внутрь которого можно упаковать другой протокол RDP. Использование голого протокола RDP для трансляции картинки с рабочего стола очень опасно, но ssh-туннель делает его безопасным.

Перечислить все протоколы в данной статье невозможно. Достаточно сказать что протокол безопасного обмена данными https работает на данном слое [RFC 2818].

Относящиеся стандарты и другая полезная информация:

RFCПолное имя
2818HTTP через TLS
4253Протокол транспортного
уровня Secure Shell (SSH)
4388Динамический протокол
конфигурации хоста
(DHCP)
7235Протокол передачи
гипертекста (HTTP / 1.1):
аутентификация

Снова про VPN и приватность

Некоторые люди ошибочно полагают что VPN, или TOR сохранит их приватность. Но неграмотная настройка системы и выбор плохого vpn-провайдера может нивелировать уровень вашей приватности из-за утечек.

Основные наиболее распространенные пути утечек данных:

  1. DNS утечки;
  2. WebRTC и IP утечки;
  3. Расширения для браузеров.

Когда вы вводите имя сайта в адресную строку, вы обращаетесь к DNS серверу и он подставляет ip-адрес сайта. Имейте ввиду, что некоторые DNS сервера ведут лог ваших обращений к Интернет ресурсам. Если в настройках сетевых интерфейсов Windows 10 установлено «получить DNS автоматически», то вы пользуетесь dns предоставляемым вашим провайдером.

Для тестирования VPN сервисов на предмет утечек придумано множество онлайн сервисов. Некоторые из них не показывают действительную ситуацию с безопасностью и созданы только для раскрутки этих же сервисов. Для большей уверенности используйте Wireshark и прочие утилиты для анализа пакетов исходящих из вашей сети.

Также следует быть осторожным относительно популярных браузерных расширений. Тот факт, что их использует большинство совсем не значит что они безопасны.

Отцы основатели Интернета

Разработчики стандартов тоже люди. Они также как все люди имеют чувство юмора и тягу к прекрасному. Некоторые из них любят поэзию, так в RFC 1121 содержится ода посвященная очередям написанная Леонардом Кляйнроком в честь 20-ой годовщины ARPANET. Этот автор также написал следующие сочинения: «Прошлое это пролог», «Большой взрыв (рождение ARPANET)».

Но особое внимание, следует уделить отцу Интернета Винтону Грэю Серфу. Он написал стих в стиле Уильяма Шекспира «Розенкранц и Ethernet». Начало стиха звучит так: «Весь мир это сеть! А данные в нем — пакеты…». Перекликается с Шекспиром, не правда ли?

Выводы

Безусловно, цифровая грамотность обычного пользователя очень важна, ведь самая слабая часть любой компьютерной сети это человек. Но построение безопасной сети достаточно сложный вопрос, требующий должного внимания экспертов в области безопасности и аналитиков компьютерных систем.

В этой статье мы рассмотрели: сегментирование сетей на vlan-ы, создание туннелей в Windows 10 и Linux, изменение размеров системных буферов, использование Wireshark для анализа пакетов и многое другое.