Двач.hk не отвечает.
Вы видите копию треда, сохраненную 14 июля 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
25 Кб, 450x434
Наноборды тред НаноОП !!P7AFLWRkhg # OP #169 В конец треда | Веб
Наноборда - борда, основанная на стеганографии.

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

Терминология:
нанопост - данные, содержащиеся в стеганографическом контейнере (пока что это PNG LSB), они зашифрованы с AES, но можно попробовать и другие алгоритмы.
Нанопост содержит:
- Свой SHA-256 хеш
- SHA-256 хеш того поста, на который он отвечает (хеш родителя), либо нули, если он не отвечает на какой-либо пост
- Пакет данных в формате JSON, в котором содержится таймстемп создания и текст поста, в будущем там могут содержаться любые данные, в том числе правила для других нанопостов,что угодно
- Данные аттача, если аттач есть. Аттачем может быть любой файл, который может уместиться в контейнере

правило - набор данных, по которому клиент наноборды может в будущем подбирать другие нанопосты из известных ему расположений (напр. альбомов или тредов).
Правило состоит из:
- URL страницы, на которой расположены ссылки на изображения
- Регулярное выражение, по которому будут извлекаться (обычно из HTML-кода) адреса изображений
- Имя правила
Клиент наноборды загружает все изображения, которые подходят по правилу, затем пытается декодировать их содержимое, используя ключ борды и принимая заранее тот факт, что изображение может хранить данные стеганографически. Если произошла неудача на одном из шагов (обычно это сбой проверки хеша, либо сбой при попытке дешифровать данные), то картинка не считается нанопостом и пропускается. Успешно декодированные нанопосты сохраняются в папку nanoposts и добавляются к дереву постов.

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

Исходный код доступен на гитхабе: https://github.com/Cr0s/JNanoBoard

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

Этот тред - тоже нанобордовый, ключ: anuspes
#2 #170
>>169
Зашёл по ссылке, скачал зип. И что мне теперь с ним делать чтоб ЦП? Ты бы хоть мануал запили бы в вики для тех у кого джавы нет. А этот свой пост как readme положил бы в репу что ли.

> пока что это PNG LSB


https://code.google.com/p/f5-steganography/

Или если хочется всё делать самому, то вот тебе паста для начала:

Если ради лулзов делать стеганографию в png или wav (файлы с сжатием без потерь или вообще без сжатия), то я бы поступил так:
1. Берём 24-битную картинку и представляем её в виде массива байт. Типа [R, G, B, R, G, B, R, G, B…] - назовём его с[]
2. Создаём второй массив такой же длинны, но в нём каждый элемент это порядковый номер байта в массиве c[]. То есть [0, 1, 2, 3, 4, 5, 6, 7….] - назовём его i[]
3. Данные, которые надо спрятать, помещаем в другой массив. Назовём его d[]. При этом в начале массива добавляем 4 байта в которые записываем длину данных. Получается как-то так [0, 0, 12, 130, 77, 90, 0, 3…]
4. Просим у пользователя пароль и с его помощью инициализируем наш PRNG (можно взять от пароля SHA-256 и запустить с него RC4 PRGA - для простоты. Гуглите википедию)
5. Используя PRNG перемешиваем наш i[]. Один и тот же пароль будет выдавать один и тот же перемешанный массив. К примеру такой: [135, 23567, 2, 3562, 123, 5246, 6891…]
6. Сразу после предыдущего шага, мы каждый байт в массиве d[] XOR-им с рандомным байтом возвращаемым нашим PRNG, чтобы наши данные стали больше походить на шум.
7. Теперь начинаем ПО БИТАМ обходить массив d[]. Берём первый бит. Берём первый элемент из i[] который у нас 135. Берём 135-й элемент из c[] и делаем его младший бит равным биту прочитанному из d[]. И так продолжаем пока биты в d[] не кончатся.
Что в итоге получится: если мы встраиваем в картинку сообщение длинной 100 байт (всего 104 байта), ту нас в картинке будет 832 (или чуть меньше) пикселей которые чуть-чуть отличаются от оригинала. И пикселы эти будут разбросаны по картинке "случайно". Для картинки размером 800х600 это будет около 0,15% пикселей, на глаз такое вряд ли заметишь.
И ещё совет - картинку надо выбирать такую, чтоб было как можно меньше областей залитых одним и тем же цветом. Лучше всего подойдут фотографии, так как в них и так уже есть шум.
Теперь как это всё из картинки достать:
1. Выполняем из первого алгоритма шаги 1, 2, 4, 5.
2. Используя массив i[] читаем из картинки первые 32 бита (чтобы получит длину встроенных данных).
3. XOR-им полученные байты со "случайными" байтами из нашего PRNG. Так как он инициирован из того же пароля, байты он будет выдавать те же самые, что и при встраивании.
4. Зная длину данных - создаём массив d[] и по биту заполняем его тем же методом, как и в шаге 7 первого алгоритма.
6. Получив все байты внедренных данных, XOR-им их с нашим PRNG.
What's all, folks!
Таким методом мы можем встроить в bmp-ашку весом 800кб данные размером до 100кб. Вполне внушительно. Можно впихнуть и больше используя вместо одного младшего бита два, вот только картинку это исказит сильнее и встроенные данные станут более заметными. А вот если встраивать коротенькие сообщения, то выходит вполне отлично. Дальше можно углубиться в теорию кодирования и запихивать в одно изменение бита в картинке 3-4 бита данных.
А вот с форматами использующими сжатие с потерями всё хоть и выглядит примерно так же, но вот результат визуально другой, так как там чаще всего мы работаем с частотами, а не непосредственно с пикселами. При этом изменение одного бита может повлиять на значения аж 64-х пикселов (для jpeg). Вот только сказать действительно ли эти изменения вызваны встраиванием сообщения, а не есть результат сжатия с потерями, не так-то просто. (хотя статистика довольно сурьёзная штука, всё может выпалить)
#2 #170
>>169
Зашёл по ссылке, скачал зип. И что мне теперь с ним делать чтоб ЦП? Ты бы хоть мануал запили бы в вики для тех у кого джавы нет. А этот свой пост как readme положил бы в репу что ли.

> пока что это PNG LSB


https://code.google.com/p/f5-steganography/

Или если хочется всё делать самому, то вот тебе паста для начала:

Если ради лулзов делать стеганографию в png или wav (файлы с сжатием без потерь или вообще без сжатия), то я бы поступил так:
1. Берём 24-битную картинку и представляем её в виде массива байт. Типа [R, G, B, R, G, B, R, G, B…] - назовём его с[]
2. Создаём второй массив такой же длинны, но в нём каждый элемент это порядковый номер байта в массиве c[]. То есть [0, 1, 2, 3, 4, 5, 6, 7….] - назовём его i[]
3. Данные, которые надо спрятать, помещаем в другой массив. Назовём его d[]. При этом в начале массива добавляем 4 байта в которые записываем длину данных. Получается как-то так [0, 0, 12, 130, 77, 90, 0, 3…]
4. Просим у пользователя пароль и с его помощью инициализируем наш PRNG (можно взять от пароля SHA-256 и запустить с него RC4 PRGA - для простоты. Гуглите википедию)
5. Используя PRNG перемешиваем наш i[]. Один и тот же пароль будет выдавать один и тот же перемешанный массив. К примеру такой: [135, 23567, 2, 3562, 123, 5246, 6891…]
6. Сразу после предыдущего шага, мы каждый байт в массиве d[] XOR-им с рандомным байтом возвращаемым нашим PRNG, чтобы наши данные стали больше походить на шум.
7. Теперь начинаем ПО БИТАМ обходить массив d[]. Берём первый бит. Берём первый элемент из i[] который у нас 135. Берём 135-й элемент из c[] и делаем его младший бит равным биту прочитанному из d[]. И так продолжаем пока биты в d[] не кончатся.
Что в итоге получится: если мы встраиваем в картинку сообщение длинной 100 байт (всего 104 байта), ту нас в картинке будет 832 (или чуть меньше) пикселей которые чуть-чуть отличаются от оригинала. И пикселы эти будут разбросаны по картинке "случайно". Для картинки размером 800х600 это будет около 0,15% пикселей, на глаз такое вряд ли заметишь.
И ещё совет - картинку надо выбирать такую, чтоб было как можно меньше областей залитых одним и тем же цветом. Лучше всего подойдут фотографии, так как в них и так уже есть шум.
Теперь как это всё из картинки достать:
1. Выполняем из первого алгоритма шаги 1, 2, 4, 5.
2. Используя массив i[] читаем из картинки первые 32 бита (чтобы получит длину встроенных данных).
3. XOR-им полученные байты со "случайными" байтами из нашего PRNG. Так как он инициирован из того же пароля, байты он будет выдавать те же самые, что и при встраивании.
4. Зная длину данных - создаём массив d[] и по биту заполняем его тем же методом, как и в шаге 7 первого алгоритма.
6. Получив все байты внедренных данных, XOR-им их с нашим PRNG.
What's all, folks!
Таким методом мы можем встроить в bmp-ашку весом 800кб данные размером до 100кб. Вполне внушительно. Можно впихнуть и больше используя вместо одного младшего бита два, вот только картинку это исказит сильнее и встроенные данные станут более заметными. А вот если встраивать коротенькие сообщения, то выходит вполне отлично. Дальше можно углубиться в теорию кодирования и запихивать в одно изменение бита в картинке 3-4 бита данных.
А вот с форматами использующими сжатие с потерями всё хоть и выглядит примерно так же, но вот результат визуально другой, так как там чаще всего мы работаем с частотами, а не непосредственно с пикселами. При этом изменение одного бита может повлиять на значения аж 64-х пикселов (для jpeg). Вот только сказать действительно ли эти изменения вызваны встраиванием сообщения, а не есть результат сжатия с потерями, не так-то просто. (хотя статистика довольно сурьёзная штука, всё может выпалить)
НаноОП !!P7AFLWRkhg #3 #171
>>170
Установи JRE 1.7
Скачай релиз с гитхаба, распакуй.
Потом запусти JNanoBoard.jar
Например командой:
java -jar JNanoBoard.jar

Сейчас один байт пишется в R, G, B сразу, в первых двух в 3 бита, а в последнем в 2. Но детектируется легко сильной заливкой, ибо пикселы искажаются заметно, если картинка с фоном и без шума. Есть куда шагать в плане улучшения скрытности.

Какая-то хуйня не даёт скачивать картику с сосача, с других сайтов качается хорошо, странно. Исключений никаких не вылетает нигде.
#4 #173
>>171
Сосач портит картинку, чтобы не работал рарджепег.

Для маскировки надо лить в пикчи для хипстоты, там шума дофига
755 Кб, 812x670
НаноОП !!P7AFLWRkhg #5 #174
Починил загрузку картинок, теперь наноборда берёт протокол загрузки из урла правила, а не просто подставляет http://, ибо сосач, например, не котирует http:// и перенаправляет на https://.
#6 #175
>>174
Таки работает?
1066 Кб, 926x713
НаноОП !!P7AFLWRkhg #7 #176
>>173
Нет, не портит, всё работает.
186 Кб, 933x408
НаноОП !!P7AFLWRkhg #8 #177
Сделал релиз с фиксами и новым правилом для сосача с этим тредом Ключ борды: anuspes.

https://github.com/Cr0s/JNanoBoard/releases/tag/2.1a
#9 #178
>>176
Значит починили, месяца полтора назад работало в усеченном варианте VI
#10 #182
Нажал начать синхронизацию, а пароль забыл ввести, следовательно написало что постов нет. Но после ввода пароля посты не обновились.
Баг или фича?
575 Кб, 500x586
#11 #185
>>182
Фича, программа запоминает урлы уже проверенные. Удали файл urls.txt из папки nanoposts
917 Кб, 616x600
#12 #193
>>185
без мануала никак.
еле понял что и как жать надо.

может интерфейс программы упростить?
564 Кб, 467x700
#13 #194
>>185

ну тогда дайте кнопку очистки этого закешированного говна.
я понимаю, что оно для того, что бы не делать повторно расшифровку, но все же, иногда надо все совсем по свежачку.
1527 Кб, 853x901
#14 #197
1277 Кб, 1014x684
#15 #198
>>194
а вместо того что бы скрывать уже полученные урлы - может просто их все же показывать, но с какой нибудь галочкой "синхринизировано"
#16 #206
ОП, а может запилишь подробное описание и гайд для тех, кто немного с зубочисткой? А то я ничего не понял.
604 Кб, 1000x1200
#17 #219
>>206
оп-хуй

1) качаешь сборочку
https://github.com/Cr0s/JNanoBoard/releases/tag/2.1a

2) запускаешь батником в консоли:
java -jar JNanoBoard.jar

3) в первом окне вводишь пароль (внизу оп поста)

4) в 1 окне жмешь кнопку
синхронизировать

5) в 4 окне жмешь кнопку
рефреш.

6) чтоб ответить в тренд, в 4 окне жмешь "реплай"

7) в 3 окне пишешь текст, выбираешь фоточку в пост, и PNG в который будешь заливать свой пост с картинкой.

8) после того как охуеешь все это нажимать, и при отсутствии ошибок, пиздуешь в корень папки куда распаковал, переходишь в "outbox" и ищешь свой стеганографированный файл вида 5da19............8b83dddc.nanopost.png, который и засылаешь в открытый инет.
#18 #230
>>219
А может прикрутить автоматическую заливку файла на чаны?
#19 #232
>>230
1) а сможешь прикрутить?
2) на какую борду конкретно заливать будешь? на какую то одну - глупо. надо готовить и поддерживать тогда список стабильно работающих борд.
- 4чан
- сосач
- кайзерчан

а вопрос то все тот же - шифрование паролем
#20 #233
Отлично, нанооп жив. Только зря отказался от первичной идеи распространять архив доски, а не отдельные нанопосты. И на java перешел. Параноики завопят, начнут критиковать реализацию. А так отлично. Есть архив 8 альфы, которую еще через синк пускали
145 Кб, 835x542
НаноОП !!P7AFLWRkhg #21 #236
>>233
Могу тебя огорчить, я, скорее всего, не тот нанооп, о котором ты думаешь. Я - одиз из немногих продолжателей идеи.

>>232
Контейнер шифруется встроенной в джаву реализацией AES/CBC/PCKS7Padding, да, знаю, что может быть подвержена закладкам, но я не настолько спец, чтобы реализовывать криптографию вручную. Ключ шифрования - ключ борды (даже не хеш от него).

>>232
Для этого потребуется сделать двжок, который будет иметь набор правил для постинга на разные борды.
#22 #241
>>232
>а сможешь прикрутить?
С программированием у меня не сложилось, если только анон насоветует мне с чего начать (у меня затык на уровне понятий класса, цикла итд, в школе вместо информатики был ворд+эксель+клац+клац)
#23 #242
>>233
Да, джава - зашквар, посоны
#24 #243
>>236

>Я - одиз из немногих продолжателей идеи


Идея не может умереть.
НаноОП !!P7AFLWRkhg #25 #245
>>242
Чем аргументируешь?
inb4: кококо сисярп лучше

Сейчас основная задача это разработать окончательный формат нанопоста и протоколов стеганографии/шифрования. То, что PoC написан на жабе ни о чём не говорит и камнем ни в чей огород не является, важна идея и архитектура, которую следует продумать и провести её анализ на предмет фундаментальных косяков, а реализовать её потом можно хоть на крестах, асме, хоть в железе на ПЛИС, было бы желание и возможности.
#26 #246
>>245
жаба - дуршлаг.
Но тут ты прав - сначала делаем как работает, потом переписываем.
0 Кб, 320x432
sage #27 #255
123
#29 #269
>>255
>>256
Вам кота в треде не хватает?
#30 #274
>>236

> но я не настолько спец, чтобы реализовывать криптографию вручную



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

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

т.е. каждое правило - каждый новый пароль
#31 #279
>>274

>хоть сертификатом


=файл-ключ?
21 Кб, 800x460
#32 #285
>>169

Про ДДТ слышал?
#33 #288
>>285
В последнююю ооооосееенььь!
#34 #332
Прет крас)
#37 #352
>>334
>>351
Это бамп или вайп?
#38 #357
>>352
По ту сторону нанопостов идёт общение, ты видишь лишь картинки.
#39 #358
>>357
Торможу
#40 #371
>>285

Нанооп опять съебал по-английски?
#41 #373
>>371
Анус твой съебал, пёс.
#42 #374
>>373

Иди нахуй.
#43 #376
>>374
Сам иди, пёс!
#44 #391
>>169
Хочу настроить прокси, но как?
#45 #394
>>391
java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 -jar JNanoBoard.jar
Как-то так запускай.
#46 #395
А куда посоветуешь учиться криптографии ?
#47 #396
>>395
В мозг.
#48 #397
>>395
Начни с Брюс Шнаер "Прикладная Криптография"
#49 #398
>>397
К слову - понятная книга. Даже для меня, который не дружит с логикой, алгеброй и подобным
217 Кб, 1366x676
#50 #401
Нахуя если есть ddt?
#51 #469
>>401
DDT опирается на куклу, которой теперь нет места тут.
#52 #471
>>469
Форкни куклу и сам проверяй коммиты.
#53 #478
>>469
1. Пишу с куклы.
2. Для некоторых движков работа без куклы уже запилена.
#54 #482
>>471
Все равно иметь альтернативу неплохо. Спасибо наноопу.
26 Кб, 460x349
#55 #496
А почему на жаве?
#57 #502
Ну есть и другие ЯП
>>499
#58 #503
>>502
Да я просто рандомную пикчу выбрал.
153 Кб, 305x434
#59 #504
>>502
Например..
#61 #511
>>505

Писать на Джаве - себя не уважать.
#62 #512
>>502
>>511
Охуенные аргументы против джавы, прям уровня /pr/, ничего не скажешь.
#63 #701
>>504
Очкопетух Кудах, ты?
#64 #710
#65 #944
Заглохло всё
sage #66 #1021
>>944
Анус твой заглох, от вас всех толку ноль, клоуны.
#67 #1065
>>1021

Спасибо на добром слове.
Я вот активно раскручиваю тут борду, дабы обеспечить приток новых людей.
#68 #1133
>>1065
Лол, это не нанооп как какой-то клоун, у наноопа трип же.
#69 #1135
>>169
пилю диплом на тему стеганографии, алсо исследую сохранение контейнера при сжатии изображения.
У кого есть соображения какие?
#70 #1137
>>1135

> исследую сохранение контейнера при сжатии изображения


Сам бы хотел в этом поковыряться. Видимо начинать надо с ватермарков, они такое переживают. вот только вместимость резко упадёт.
#71 #1138
>>1133
Я и не говорил, что я ОП.
#72 #2112
>>169
Если бы стег был бы незаметен...
НаноОП !!P7AFLWRkhg #73 #3188
Буду переделывать алгоритм, чтобы равномерно разбрасывать стегопиксели по картинке, ёмкость уменьшится, но здесь важна незаметность.
#74 #3189
>>3188
Было бы круто. Ещё бы и заголовки все выпилить...
НаноОП !!P7AFLWRkhg #75 #3191
>>3189
О каких заголовках речь?
#76 #3192
>>3191

Нахуй ты говоришь:

>Буду



Ещё до того, как что-то сделал? Ты уже показал себя знатным пиздоболом, так зачем продолжаешь позориться?
НаноОП !!P7AFLWRkhg #77 #3195
>>170
Неплохой алгоритм, но в нём фундаментальный косяк - чтобы узнать длину данных, нужно знать длину данных.
А всё потому, что для того, чтобы правильно перемешать массив индексов, нужно знать его длину. Иначе перемешанный массив будет отличаться от того, который был создан при записи в изображение.

А создавать массив индексов для всего изображения целиком это идиотизм и будет работать очень и очень медленно и жрать очень много
НаноОП !!P7AFLWRkhg #78 #3196
>>3192
Иди туши зад
Ты не понимаешь смысла слов или для тебя не существует времени и пространства? Буду - значит собираюсь делать, а не уже сделал.
88 Кб, 1059x498
НаноОП !!P7AFLWRkhg #79 #3218
Иллюстрация нового алгоритма.

Стеганография детектится заливкой минимальной чувствительности на сплошном фоне. Меняется один младший бит случайно выбранного R, G или B байта случайно выбранного пиксела. При этом можно обнаружить только единичные биты. Нулевые, разумеется, обнаружить невозможно.

Противодействие -- использовать картинки с большим числом шумов и без сплошных областей одного цвета.

ГПСЧ -- RC4, инициализируется SHA-256 хешем от пароля.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 14 июля 2015 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /crypt/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски