Стеганографія в акроконструкциях. Алгоритм DANTSOVA

— Потім вирішила позбутися. Во!
— Їй!.. так добре?
— А, немає різниці...
Давно хотів опублікувати цей just4fun проектик за стеганографії, але щось не було часу.
І ось час і привід знайшовся.
До того ж п'ятниця!



Вирішив я якось реалізувати стеганографию акроконструкциях.
Для наочності зробити, як в акростихах, тільки автоматизувати процес і будувати акропредложения автоматично. Коротше кажучи, повторити задумку Тритемиятільки програмним способом ;)

Інтерфейс підсумкової програми простий:
  1. користувач вводить повідомлення російською мовою;
  2. програма видає акротекст. (Це текст, з перших літер кожного слова якого можна зібрати вихідне повідомлення).


Наприклад, на запит "привіт хабр!" програма написала текст: "потом решила ізбавиться во ей так хгаразд а без разницы". Розділові Знаки програма поки не розставляє — це робить користувач на свій розсуд.

Звичайно далеко до naitive російської мови, але для just4fun проекту, написаного на коліні за пару вечорів, я думаю згодиться…

Алгоритм навчається незліченних романах Дар'ї Донцової. Саме тому в честь неї названо DANTSOVA.

Кому цікаво, як все це працює, прошу під кат!



Акровірші і акроконструкции

Акростих — це вірш, у якому перші літери кожного рядка утворюють осмислений текст (слово, словосполучення або речення).

Наприклад знаменитий акмеист Микола Гумільов одного разу написав своїй дружині (Ганни Ахматової) таке стихотворене:
Аддис-Абеба, місто троянд.
На березі прозорих струмків,
Небесный див тебе приніс,
Алмазной, серед похмурих ущелин.

Армидин сад… Там пілігрим
Хранить обітницю любові неясною
(Ми все схиляємося перед ним),
А троянди душны, троянди червоні.

Там дивиться в душу чийсь погляд,
Отрави повний і обманів,
В садах високих сикомор,
Аллеях похмурих платанів.
Акростих — найпростіший варіант акроконструкции.
Акроконструкция — це більш загальне поняття; якщо в акростихе вкраплення відбувається в перших літер кожного рядка, то в акроконструкции — в будь-якому довільному місці.

Наприклад, чи можете ви своїй дівчині на 8 березня написати що-небудь типу цього?:


Че слабо? То-то!

Поезія залишила нам безліч аналогічних прикладів. Кому ця тема цікава, то советою почитати статті Івана Чудасова
"Від акровірша до акроконструкции" і "Від акровірша до акроконструкции (продовження)". На мій погляд це кращі статті по даній темі: з одного боку доступні широкій публіці, з іншого боку — не вульгарні.

Виникає питання, як такі тексти створювати?

По суті є три класи способів.
  1. Створювати текст самостійно. Саме це і робили поети з науськиванию Йоганна Гайденберга Тритемия.
  2. Створювати текст програмним способом. Наприклад алгоритм DANTSOVA
  3. Комбінувати програмний спосіб і творчість оператора. На мій погляд це найцікавіше, що можна придумати. Програма створює певну кількість варіантів різних слів, потім людина вибирає найбільш семантично відповідне злово зі списку, потім програма створює ще одне слово… І так далі, поки не вийде єдиний цілісний текст


Принципи алгоритму DANTSOVA

Кому лінь читати мат.частина може відразу перейти до глави «Исходники & приклади».
Для решти розповідаю.

Існує багато різних теорій, як сукупність букв, пробілів і знаків пунктуації перетворюються в осмислений текст. Для створення дійсно хорошого алгоритму потрібно присвятити цій задачі, як я думаю, все своє життя.

Мені було цікаво, чи є які-небудь вкрай прості ідеї, які можна було б втілити в простий і нехитрою програмі. Мета алгоритму DANTSOVA показати, що завдання побудови штучного акротекстов — не є неможливим завданням.

Алгоритм DANTSOVA заснований на декількох досить зрозумілих ідеях.
Зрозуміло додаючи більшу кількість правил в генерації тексту можна отримати хороший результат,
однак у DANTSOVA ми ограничемся тільки чотирма положеннями — «думками».

Думка 1. Слово залежить від минулого слова.

Після слова "смачне" побачити слово "молоко" цілком очікувано.
А ось після слова "смачне" ви навряд чи побачите слово "синхофазатрон".
По-перше, синхофазатроны не їдять; по-друге слова не узгоджені: «синхофазатрон» чоловічого роду, а слово "смачне" — середнього.

Зрозуміло слово залежить не тільки від попереднього, але і від перепопереднього і т. д.
Однак враховувати це я не став через прокляття розмірності.

Таким чином потрібно взяти багато-багато тексту і подивитися пари: «слово — таке слово».
Після необхідно створити конструкцію виду:
слово наступне слово вага
слово наступне слово вага
... ... ...


вага задається просто — скільки разів після "слова" було "наступне слово"?
Наприклад Дар'я Донцова (див. файл dantsova.d0.plf у вихідні коди
за свою багату кар'єру після слова "озброєний" вжила слово "букетом" цілих три рази!
А після слова "спокусити" слово "секстеррориста" зустрічається тільки один раз.

Цю табличку будемо називати платформою.

Очевидно, що на різних корпусах тексту строяться різні платформи.

Думка 2. Платформу треба будувати на корпусі текстів одного автора

Суть цієї думки в тому, що текст повинен бути «однотипним».
Нам не підходить корпус, що складається з статтею про Валерія Харламова, про Фолклендську війну і про творчість Ричарда Баха…
Це абсолютно різнотипні тексти.

Так само тексти різних авторів володіють такою штукою, які філологи називають идиолектом.
Говорячи по-російськи — це персональний діалект. Тобто метод говорити і писати, притаманний саме вам.

Тобто суто дослідним шляхом мною було встановлено, що треба взяти корпус тексту одного автора.
Інакше виходить досконала хрень, нічим не відрізняється від рандома.

Думка 3. Чим більше корпус, тим краще

Це очевидна думка. Тому автор, якого слід взяти повинен бути дуже плідний (не з якісною, а з кількісної точки зору).

Наприклад Петро Єршов не підходить, так як він написав тільки одну казку: Коник Горбоконик.
Сказ про Федота Стрільця Леоніда Філатова — теж не варіант.

Думка 4. Чим примітивніше якість тексту — тим краще

Чому автор багатше і цікавіше — тим різноманітніше його мова.
Нам такі автори не потрібні.
Наприклад, Йосип Олександрович Бродський написав більше поезій, ніж Пушкін.
Але платформа на корпусі віршів Бродського виходить не дуже…

Підсумок.

Отже, нам потрібен автор з приметивненькой промовою, написав багато-багато осмисленого тексту однієї тематики.
Що саме приметивное за мови? Правильно: детективні романи для дівчат від п'ятдесяти і передача «Нехай кричать» з Андрієм Малаховим. Так як субтитри «Нехай кричать» я не знайшов, то обмежився детективними романами.

Так що методом виключення цим плідним автором виявилася Дар'я Донцова (до речі, її справжнє ім'я Агрипина Аркадіївна)!

Тепер залишилося зробити дуже простий алгоритм генерації.
Після кожного слова слід вибирати слово, що починається на потрібну букву і з максимальною вагою.
Ось, власне, і весь алгоритм.

Занудний нюансВ алгоритмі є параметр .
Це настроюваний параметр системи.
Він показує бажана кількість слів у реченні.

Алгоритм ставить крапку після слова A і наступну букву X записує в незалежності від A в двох випадках:
  1. коли немає слова B, що починається на X c великою вагою.
  2. коли довжина пропозиції більше c


Занудний нюанс №2Буває випадок, коли після слів A1 та A2 неможливо підібрати слова A3… Його просто немає.
У цьому випадку, ми обриваємо пропозицію (параметр c), або возращаться на крок назад,
замінюємо A2 на якусь A2*, вага якого на другому місці, і після A2* шукаємо A3.


Исходники & приклади

Кілька прикладів.
Зрозуміло, що це далеко до практичного застосування, але вже зовсім не рандом!..
Певна семантика прослизає…
Алгоритм DANTSOVA в дії
повідомлення акроконструкция
слався отечество наше вільне братніх народів союз вікової зараз краще а в бік я дуже важко її через його з тобою в загальному не дуже.
шофер олени сергіївни загалом без особливих грошей на одному її було рот а ти з ким із холодильника не.
абсолютно різні органи справа йшла в сторону від юри записаний у її до вікна, взяла одну.
йогурт
науковий керівник не дуже.
вже через тиждень.
ыыы.
йогурт російського кримінального кодексу.
вона загалом так і тут ще краще.
эйяфьядлайоукюдль .
йогурт я фразу я навіть краще а йод схаменулася.
вже до юлі додому ляжу
мільйони вас нас тьми і тьми і тьми мене і лише легке виріб одній нозі в америці коштують на аборт зробити так багато цікавого ти мене і тут.
мене
за батьківщину, за сталіна за квітень.
раз вона навіть і не встигла за квітень вересень.
тільки адресу ліди і не дуже
хабрахабр добре а без різниці а господиня а без різниці
як колись в розрослися хвощах ревла від свідомості бессилья як олександр клянеться.
не їла капусту овочі гриби додати апельсиновий.
все одно а потім пролунав оглушливий свист шум і добре зараз я хочу загалом.
ща аліна хмикнула троянда олена вадимівна.
її обличчя а вона так сказати про здоров'я не дуже несмачно.
з шухляди папір її з собою і лише.
ьгори.
явно
глокая куздра штеко будланула бокра і кудрячит бокренка де лежав один клас а я кивнула пішла за двері автоматично відчинилися.
шофер тільки якщо хто він був у двері ліфта на вулиці лізи а без особливих комплексів розсікає.
абсолютно щиро.
двері відчинилися я трохи інфаркт то б він якраз на кухню а
сподіваюся мені зарахують цю дурість за зданий курс пітона в шаде не дуже.
для її спідниця з чоловіком не їла за квітень вересень.
що і тут, а юра тихо.
це ти вже говорила лише дивуватися чому він з тобою знаємо адресу сказала дівчина а на нього.
йогурт, кефір.
вже розповідала скільки пам'ятаю їх тут вона не ахті.
все йшло а для її
наші західні партнери не дуже.
шофер і за квітень.
потім акуратно додати трохи.
ыыы.
її за адресою розташований той не їла рагу.
ыыы


Якщо хочете більше — можете самі нагенерить.
Исходники лежать тут: https://github.com/PavelMSTU/DANTSOVA

Стеганографія

Тепер задамося питанням: як на всьому цьому зробити стеганографию?

А дуже просто!
По-перше, вибирати можна не першу літеру, а довільну, детерміноване визначається ключем.
По-друге, можна кожній букві (або слова, або послідовності слів) зіставити деяку послідовність біт.
Зробити це можна за допомогою хеш-стеганографії.

Коротше — є безліч різних ідей для втілення самих збочених і підступних стеганографических фантазій!

І це буде секьюрно, але не наочно, як алгоритм DANTSOVA.

ЧаВо
Передчуваючи три питання, упереджено на них відповідаю.

Чому алгоритм назвается dAntsova, а не dOntsova?Є кілька точок зору на такий несамовитий питання.
Одні кажуть, що це було зроблено спеціально, мовляв якщо Агрипина Аркадіївна (скорочено просто Дарина) спробує подати в суд,що вона вже зробила з rutracker'ом, то автор заявет, що це не в її честь названо, бо прізвище інша.
Але є інша точка зору, згідно з якою зміна літери O A є особливою стеганографічної передачею таємного послання.
Однак скептики кажуть, що PavelMSTU просто повинен більше спати і менше працювати, тоді з орфографією проблем не буде.

Чому ми вкраплюємо в першу букву, адже це ж не секьюрно?Мета топіка і самого алгоритму — не в секьюрності, а у наочності.
Автор хотів показати, що написавши на колінах три *.py файлу і съаккамулировав велику кількість тексту одного автора можна домогтися певного результату.
І без всякого deep learning і десятків человеколет якогось НДІ…
Зрозуміло для практичного використання слід придумати проміжне кодування, про що у статті написано.

PavelMSTU, чому ви не враховували відмінки, рід, число? І взагалі, де нею<s>т</s>ронные мережі і діп лернінг?Поки мета стояла зробити найпростішу конструкцію. Це наступний етап.


Вашого питання немає в ЧаВо? — ставте його в коментарях!

Є у акростеганографии майбутнє?

/>
/>


<input type=«radio» id=«vv72386»
class=«radio js-field-data»
name=«variant[]»
value=«72386» />
Так, якщо зробити все секьюрно: шифрування + кодування «послідовність біт --> шматки тексту»
<input type=«radio» id=«vv72388»
class=«radio js-field-data»
name=«variant[]»
value=«72388» />
Ні, генерувати текст можна тільки для спаму; LSB — наше все!

Проголосувало 12 осіб. Утрималося 8 чоловік.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.