Бесплатно

Полезные конспекты книг и авторские заметки по информационным технологиям. Без формул

Текст
0
Отзывы
iOSAndroidWindows Phone
Куда отправить ссылку на приложение?
Не закрывайте это окно, пока не введёте код в мобильном устройстве
ПовторитьСсылка отправлена
Отметить прочитанной
Шрифт:Меньше АаБольше Аа

Математизация автороведческой экспертизы (А. С. Лот)

В древние времена письменность была доступна только элите, имевшей значительное влияние среди остальных людей. Глиняные дощечки и папирус служили средством передачи информации. С появлением книгопечатания все больше читателей появлялось у огромного числа авторов. Сегодняшний человек не мыслит себя без средств массовой информации и книг. С ростом популярности авторов увеличивалось количество их подражателей. Стало подвергаться сомнению авторство старинных текстов. В связи с этим возникла потребность в автороведческой экспертизе, которой и посвящена эта работа. Задача установления авторства определяет необходимость построения алгоритма решения в виде последовательности действий, производимых над текстами. Этот тривиальный на первый взгляд подход требует от разработчика алгоритма глубочайшей осмысленности операций при обработке данных авторов: только качественное решение дает гарантированный результат. Интуитивно задача идентификации авторства имеет бесчисленное количество решений. Несомненно, язык автора и состояние самого автора меняются от произведения к произведению. Поэтому в алгоритм решения можно внести допущение на ошибку, которое помогло бы нивелировать вышеупомянутый эффект. По Маркову, авторским текстам присуще наличие шумов и языковых особенностей. Вместе с тем произведение автора содержит, собственно, авторские компоненты, выделить которые достаточно для определения всех текстов этого автора среди неизвестных трудов. Рассматривая текст произведения на временной оси, легко отметить, что время, затрачиваемое на написание какой-либо логически завершенной части текста автором, будет пропорционально его длине как оценке затраченного труда. Когда мы рассматриваем предпринимательскую способность как фактор, обуславливающий жанр, целевую аудиторию и прочие видимые невооруженным глазом любопытному ученому характеристики литературного произведения, то невольно обнаруживаем, что отчасти эта способность задает направление прочих затрат ради написания произведения: времени и писательского таланта. Таким образом, предпринимательская способность, будучи приложенной в сфере литературного авторства, во многом будет влиять на протяженность текста в единицах его длины. Не исключая из устремлений автора замысел просвещения, зафиксируем сходящие с его пера длины наименьших, логически завершенных и могущих быть в каком-то ракурсе полными смысла в конкретном произведении единиц текста произвольного его произведения, растянутого на временной оси, чтобы приблизиться к пониманию экспериментального подсчета рассматриваемой предпринимательской способности, доля которой внесена в текст. За такую единицу текста примем одно его предложение как наиболее завершенную часть внутри самого крупного элемента исследуемого материала – текста произведения автора. Предпринимательская способность подчиняет себе писательский талант во времени, она формируется с течением жизни автора, дается с рождения и может утрачиваться. Поэтому категория завершенности должна в наибольшей мере быть присуща рассматриваемому произведению, закрывая его от дефектов – привнесений автора, обладающего сильно измененной предпринимательской способностью, а также других явлений, могущих исказить дух творчества, сопутствующий произведению. Признав счетной величиной предложение текста, необходимо избежать влияния длины всего текста произведения на научное распознавание духа творчества автора. Это связано с тем, что намеренно изменяемая длина текста могла бы легко ввести в заблуждение исследователя. Далеко не всегда автор может позволить себе облекать мысли в краткие, но емкие формулировки. Такое самоограничение творческой личности часто навлекается неготовностью читателя к некоторым сообщениям. Размышляя над подсчетом весомых характеристик автора, скрытых в тексте, можно разукрупнить предложение и подробнее рассмотреть его составляющие. Нам привычно мыслеформы облекать в слова, собирать из них предложения, используя связующее звено – русский язык. Слова, в свою очередь, язык разбивает на буквы и звуки, а среди прочих элементов текста остаются знаки пунктуации. Попробуем проследить связь предложения – единицы длины текста – с его конструктивными слагаемыми. Мы улавливаем смысл предложения, складывая и сопоставляя его слова – они могут передаваться нам как зрительный образ. Кооперативный эффект воспринимаемой последовательности букв слова, представленных кириллицей, легко понимается грамотным человеком. И такое представление очень удобно для работы со словом как объектом составным. Воспринимаемое в его звучании слово гораздо труднее поддается взятию как объект языка текста, да и современные ЭВМ гораздо легче позволяют работать с текстовой информацией, нежели звуком, полагаемым к дискретному счету. Таким образом, самым удобным способом манипуляции произведением признаем перебор букв его текста, а также знаков препинания, сохраняющих его структуру. Если бы анализ производился в речевом воспроизведении текста, то мы бы ушли от общеупотребительной формы представления художественных литературных произведений, дополнительно усложнив задачу построением системы распознавания речи. На данном этапе развития технологий и человека недопустимо пускаться в погоню за улучшением средств решения задачи в ущерб процессу ее решения. Исходя из вышесказанного можно утверждать, что на пути к построению предложения автору предстоит преодолеть сложный процесс словотворчества. Слово есть в любом предложении. Оно выступает элементом протяженности его смысла, его глубины, значимости и отнесенности к объектам повествования. Слову присуща также дискретность. Всегда удастся подсчитать точное количество слов в предложении, которое не будет зависеть от каких-либо характеристик слов, кроме их наличия. Также немаловажно заметить, что наш исследуемый объект постоянен во времени его анализа, т.е. никакие измеряемые параметры не будут показывать различные значения с каждой новой попыткой подсчета по постоянному алгоритму. Не получится отыскать меньшую слова единицу текста, способную указать дух творчества его автора. Поэтому, опираясь на количество слов в его связи с предложением, которое бы не зависело от длины текста, можно охарактеризовать автора произведения как личность. Самый простой и эффективный способ получить такую величину – взять ее среднее арифметическое как непрерывную оценку. Среднее количество слов в предложении – действительная характеристика текста, указывающая связь художественного литературного произведения с духом творчества автора в его обусловленности предпринимательской способностью и писательским талантом. Предпринимательская способность здесь описывает необходимость употребления писательского таланта, в свою очередь содержащего богатство языка, меткость подстановки, словоохотливость, точность решения задач, перед которыми предпринимательская способность ставит автора и т. д. Зададимся целью установления наиболее точной единицы счета длины предложения как математической величины. Очевидно, что для лучшего понимания результата такая величина должна позволять натуральный счет и быть наименьшей относительно всего предложения из всех таких величин. Интуитивно такой мерой полагается одна буква предложения. Знаки препинания не будут существенно влиять на длину предложения, т. к. их количество намного меньше общего количества букв предложения. Буквы, в отличие от слов, которые можно принять единицей словарной, являются единицей значительно меньшего пространства – алфавитной. Мы не смогли бы отказаться от вычисления длин в словах в пользу побуквенного вычисления, т. к. несомый буквой в ее единичности смысл практически не воспринимаем. Вместе с тем хотелось бы учесть знаки препинания предложения в их связи с его конструкцией, обусловленной вводными составляющими, оборотами, перечислениями и т. п., несущей часть смысла целого предложения. Часто конструкции языка внутри предложения обрамляются в запятые – зачастую их несколько в одном предложении. Относительной величиной, подходящей в таком качестве, является количество букв между запятыми в предложении. Причем опять берем среднее арифметическое этой величины. Наша привязанность к среднему арифметическому в математическом смысле объясняется следующим. Когда мы наблюдаем численные значения величины из анализа текста, то самой доступной к пониманию динамики составления текста является значение, которого стремится достичь эта величина. Такое значение в математической статистике называют математическое ожидание. Часто при решении задач оно бывает задано, однако в нашем случае сталкиваемся с неизвестным математическим ожиданием, т. к. параметры текста не были заданы изначально.

Как выполнить код на Assembler из кода C# под Linux (А. С. Лот)

Для работы понадобится ОС Linux и установленные в ней компиляторы gcc, g++. Проверить наличие компилятора можно командой whereis, а установить – командой sudo apt install в терминале. Имеется простейший код на GNU Assembler, возвращающий 1 (файл asm. s):

.text

.globl _new

_new:

mov $1,%rax

ret

Хотим запустить его в C# с помощью PInvoke. Для этого потребуется промежуточная динамическая библиотека на языке C с кодом (файл my. c):

#define EXPORT __attribute__ ((visibility («default»)))

EXPORT int foo (void);

int foo (void)

{

extern int _new ();

return _new ();

}

Эти два файла нужно собрать в shared library (файл lib.so) командой

gcc -shared -fpic -o lib.so my. c asm. s

Полученный файл lib.so нужно подложить в папку с исполняемым файлом результирующей программы на C#. У меня это подкаталог проекта /bin/Debug/netcoreapp3.1/. Код на C# для запуска функции _new выглядит так:

using System.Runtime.InteropServices;

class Program {

[DllImport("lib.so»)] public static extern int foo ();

static void Main (string [] args)

{

int code = foo ();

System.Console. WriteLine (code);

 

}

}

Запускается он командой dotnet run, если у вас установлена исполняемая среда. NET Core. В консоли вы увидите 1. Чтобы добавить прослойку между C# и C в виде кода на C++, нужно добавить в проект файл my. cpp с кодом:

extern «C»{

#define EXPORT __attribute__ ((visibility («default»)))

EXPORT int foocpp (void)

{

extern int foo ();

return foo ();

}}

и заменить в коде C# название внешней функции foo на foocpp. Тогда изменится команда сборки и будет выглядеть так:

g++ -shared -fpic -o lib.so my. cpp -x c my. c -x assembler asm. s

После чего запускаем dotnet run и видим 1 в консоли.

Синтаксический анализатор корректности текстовых арифметических выражений с использованием языка программирования Python3 (А. С. Лот)

 
expressionChars = list (input («Enter expression:»))
isCorrectExpression = False
digits = {«0», «1», «2», «3», «4», «5», «6», «7», «8», «9»}
operations = {»/», "+», "-», «*», "^»}
state = 0;
count = 0
 
 
for char in expressionChars:
if state == 0 and char in {»+», "-»}.union (digits):
state = 5
elif (state == 5 or state == 1 or state == 3) and char in digits:
state = 1
elif (state == 5 or state == 3 or state == 0) and char in {»(»}:
state = 5
count+=1
elif state == 5 and char in {»+», "-»}:
state = 3
elif state == 1 and char in {».»}:
state = 6
elif (state == 1 or state == 4) and char in {»)»}:
state = 4
count-=1
elif (state == 1 or state == 4 or state == 2) and char in operations:
state = 3
elif (state == 6 or state == 2) and char in digits:
state = 2
 

if state in {1, 4, 2} and count == 0:

isCorrectExpression = True

print (f"isCorrectExpression: {isCorrectExpression}»)

Допустимы отрицательные, положительные целые и рациональные числа, вычисления в круглых скобках, умножение, деление и возведение в степень (записывается знаком ^).

Что такое данные (А. С. Лот)

Толковый словарь русского языка Сергея Ожегова в 27-м издании приводит следующие трактовки слова «данные»: 1. Сведения, необходимые для какого-нибудь вывода, решения. 2. Основания для чего-нибудь, качества. В цифровую эпоху это слово обретает еще один – редуцированный смысл: данные – это число. Это – максимально конкретное определение, удобное для математизации любой сферы деятельности. Любые данные: изображения, видео, звук, текст, измерения. Любые данные сегодня способны быть представленными однозначно в цифровой форме, например, в распространенной системе счисления, – составляющей числа из нолей и единиц – двоичной. Из этой системы научными методами позволительно на сегодняшний день переводить в любую другую систему (или множество чисел) посредством алгоритмов. Отдельными алгоритмами двоичные данные могут переводиться из числа в текст, из текста в число, из текста в картинку и так далее. Такие алгоритмы обычно реализованы в ЭВМ.

О том, почему длина пароля важнее его сложности (А. С. Лот)

В заметке «Что такое данные» говорится о том, что любые данные (сведения, информация) – это число. Пароль – это набор символов, являющийся набором какого-то множества заранее известных текстовых символов, обычно называемого набором символов или кодировкой. Пример простой кодировки – ASCII. Каждый символ кодировки в пароле вводится в поле, на котором установлен фокус курсора в текущий момент, с электронной (аппаратной) или экранной клавиатуры до тех пор, пока не будет достигнут предел длины текста в поле ввода либо пользователь не захочет отправить введенный текст пароля на сервер нажатием специально отведенной кнопки. Сложность пароля определяется мощностью множества его элементов, длина того же пароля – мощностью мультимножества входящих в него элементов (символов текстового набора). К сожалению, существующие компьютерные технологии не рассчитаны на правильную обработку пароля как единого объекта данных, представляющего собой одно число, а вместо этого алгоритмы обрабатывают пароли посимвольно, рассматривая его как последовательность чисел, где каждому символу назначен его числовой код, изначально известный и заданный кодировкой. Такие числа могут сравниваться попарно с соответствующими кодами образца пароля в проверяющей подпрограмме либо различными комбинациями арифметических операций над кодами символов сводиться к одному числу, которое тоже будет сравниваться с эталоном в проверяющем алгоритме, чтобы, к примеру, не хранить в нем сам пароль в текстовом отображении или ускорить сравнение за счет более эффективного использования пропускной способности сетевого канала связи и сокращения вычислительных затрат на перебор и попарное сравнение элементов. Для сверки введенного пароля с эталоном необходимо конечное значение времени центрального процессора, затрачиваемое на вычисления, производимые над числовыми данными, и конечная величина памяти, используемая для хранения введенного пароля, эталона и промежуточных результатов, и еще канал связи с конечной пропускной способностью, потому что эталон пароля чаще всего хранят в защищенном хранилище удаленного сервера в целях соблюдения стандартов безопасности. Для взлома аккаунта злоумышленник может подбирать пароли перебором входных последовательностей символов и, основываясь на времени отклика серверной машины на тот или иной вариант, выбирать более подходящие наборы символов, причем он может менять как длину пароля, так и его сложность (разнообразие символов), поэтому, выбрав один из вариантов защиты – длину или сложность, нужно воспользоваться и другим, дополнительно усилив свой пароль. Чем длиннее пароль, отправленный злоумышленником, тем дольше он будет отправляться на сервер по линии связи и тем дольше взломщику нужно будет дожидаться ответа, чтобы отследить результат, но разнообразие символов на эту задержку не повлияет. Задача злоумышленника – найти пароль, который подойдет быстрее всего, то есть время отклика на который будет стремиться к максимуму, так как пароль дальше проходит по стадии проверок, – это единственный верный пароль аккаунта, и для взломщика естественно пытаться увеличить время отклика, задача пользователя – защитить свои данные, для чего он должен сохранить пароль (и желательно – логин) в тайне, что может быть достигнуто равномерным распределением задержек для всех возможных для системы паролей, но при этом это не совсем реальная картина для существующих систем, потому что пароли в ней могут храниться и допускаться ко вводу совершенно различные. Пароль пользователя должен иметь равномерное распределение символов при его максимальной длине. Равномерное распределение максимально близко к белому шуму, что соответствует практически естественной случайности попадания при переборе, что сгладит шероховатости графика задержек у злоумышленника в пространстве наиболее длинных паролей, так как они допускают наименьшую вариативность при стремлении к наиболее случайному паролю у пользователя, что благоприятно для него. Удаленный подбор пароля требует задействования вычислительных мощностей и памяти на обеих концах канала связи. Каждый символ одной и той же кодировки занимает в памяти один и тот же размер области памяти и обрабатывается центральным процессором по одному и тому же алгоритму для всех чисел такой разрядности или, точнее, размера выделенной области памяти под это число (кодировки различаются алгоритмами работы с ними на более высоком уровне – уровне операционных систем), поэтому длинный пароль будет требовать тем больше памяти для обработки и тем дольше обрабатываться процессором, чем он длиннее, то есть содержит больше любых символов, но для сложности пароля это неверно: разнообразие паролей одинаковой длины не повлияет на длительность обработки и расход памяти, если говорить об обработке при пересылке в канале связи и сравнении пароля с эталоном на другом его конце. Последовательность из одного символа можно угадать, перебирая последовательно N кодов его кодировки, а последовательность из двух символов уже подчиняется законам комбинаторики, и количество размещений на две разные позиции двух из N+N элементов уже может превосходить в разы сумму мощностей одинаковых кодировок двух символов N+N (ситуация с еще большим числом символов еще сильнее увеличит количество вариантов), поэтому пароли следует выбирать подлиннее, даже пароль из одних единиц будет надежен при достаточно большой длине, но она ему потребуется достаточно большая, чтобы не было дурацкого мата. Что касается психологии людей, то они бывают ленивы и глупы, но законы психологии на взломщиков тоже распространяются. Здесь речь не только о математике, а именно о том, что важнее длина пароля, чем его наполнение. Чтобы это было правдой в случае с использованием осмысленного набора слов в качестве пароля, нужно соблюсти максимальную длину пароля, выбирая фразы подлиннее, – в некоторых системах уже делают возможность ввода очень длинного пароля, поэтому чтение этой статьи окажется полезным для пользователей, а когда осуществляют перебор пароля по словарю, то в первую очередь будут подставлять наиболее вероятные пароли, причем очень длинные пароли сделают объем словаря таким, что хранить и передавать его, а также использовать с подключением по сети, будет сложно или экономически нецелесообразно, ведь защиту в информационных системах организовать проще, чем взлом. Если максимальную длину пароля системы нащупать не удается, надо использовать максимально длинный и сложный пароль (в библиотеках языков программирования для его генерации можно использовать генератор случайных чисел с псевдоравномерным распределением), но приоритет отдавать длине, почему – объясняется выше. Если взломщик при подборе пароля его генерирует без словаря, то ему потребуется значительно больше времени процессора и электроэнергии на генерацию. Можно представить, что одно осмысленное слово на естественном языке в тексте пароля является одним символом, тогда возможных вариантов пароля будет тем больше, чем больше слов в пароле, – это объясняет востребованность длины пароля в случае использования естественного языка в нем. С другой стороны, на стороне сервера может в первой линии защиты использоваться сравнение по хэшу пароля, а при коллизии – сравнение с хранимым на сервере полноценным паролем, тогда в случае коллизии применимы предыдущие рассуждения, а при применении злоумышленником радужных таблиц, содержащих словарь соответствий «хэш – строка пароля», с высокой долей вероятности будут подобраны только короткие пароли, поскольку хэш для хранения паролей обычно используют в виде буквенно-цифрового кода, а перебор такого хэша почти равносилен перебору длинного пароля, так как пространство поиска хоть и сужается, но не настолько, насколько при хэше в виде целого числа, причем коллизии в современных алгоритмах хэширования маловероятны, а это говорит о том, что набор хэшей и набор пароле в базе данных сервера – это почти взаимно-однозначное соответствие, при котором перебор с обратной генерацией пароля по его хэшу породил бы необходимость иметь огромного объема словарь, что нерентабельно.