Pull to refresh
76
0
Alexey @hellman

User

Send message
Да, я накосячил :( Гамма зависит от шифротекста и можно так узнать только rand0 от клиента, после него гамма изменится.
> возможно это шифрование, достаточно безопасное

А возможно, позволит взломать сервер. Это кому-нибудь надо? Почему кто то должен полагаться на ваши крипто изыскания?
Вот как раз пару месяцев назад попался какой то dell latitude, «бизнес класса», дорогущий. Железо средненькое, дисплей просто ужасный (никогда не воротил носом от дисплеев, но тут глаза просто вытекают, особенно на слабоконтрастных текстах; подкручивание контраста/гаммы слегка улучшает читаемость но от изображения ничего не остаётся; возможно я слишком привык к тынкпадовскому IPS). Обрадовался что тоже есть трекпоинт — оказалось что кнопки тачпада расположены под дико неудобным углом, одновременно держать трекпоинт и нажимать их нереал. Зато качество сборки просто идеальное… (в моем thinkpad x230 люфтят usb и порт для зарядки, неприятно но не страшно). Наверное ещё батарею круто держит, но мне это не нужно.

За ASUSPRO спасибо, заценю. Раньше пользовался только асусами, хотя и были проблемы (быстро дохнут б/п, один раз вымерла матрица, клавиатуры тоже дохнут).

Макбуки не моё. Да и за адекватное железо ценник у них нехилый.
Я так понимаю вы про TLS. Там тоже используется MAC.

С sha1 у вас получилось hash-then-encrypt. Правильно делать encrypt-then-mac. Сил столько же, зато секурно. Одну из возможных атак я описал выше.
Пример атаки:
1. Атакер снифает одну сессию. Из неё узнает кусок гаммы (pyra-poster + версия + хедер бинаря + паттерны в бинаре и т.д. и т.д.). Затем выбирает, например, 5й блок шифротекста в качестве «злого» IV.
2. Потом MITMом атакер вклинивается и подсовывает клиенту свой IV (он же rand1). Из структуры AES-CFB следует, что гамма просто «сдвинулась» назад на 5*16 байт. Поэтому атакер может расшифровать ранее неизвестные ему куски бинаря, используя известные ему части гаммы. Более того, он узнаёт новые части гаммы из того же запроса по предыдущей методике и расшифровывает куски из первого запроса.

Затем атакер может перехватывать каждую последующую сессию и подсовывать клиенту тот же IV и вытаскивать данные новых бинарей.

3. Атакеру всё мало, он запрашивает у сервера новый rand1. Отдаёт клиенту свой старый IV для которого он умудрился вычислить большую часть гаммы. Клиент шифрует свой бинарь. Бинарь вышел небольшим, и атакер восстанавливает его весь, а значит он знает его sha1 хэш. Клиент получает «ошибка, рандом протух. перезапустите скрипт». Клиент перезапускает скрипт а атакер подсовывает ему новый, реальный rand1 от сервера. Клиент шифрует тот же бинарь. Но атакер знает теперь всё что после rand0, поэтому узнаёт всю нужную гамму. И допивая рутбир зафигачивает реверс-шелл на сервачок.

PS: В идеале нужно использовать библиотечное Authenticated Encryption. Иначе, самое простое и надежное что можно придумать — encrypt-then-mac (что и является по сути AE, главное именно в таком порядке). Шифруем только бинарь, затем навешиваем (H)MAC. На сервере первым делом проверяем MAC. Для ограничения реплеев можно использовать тот самый «rand1» но ни в коем случае не в качестве IV/параметра шифра, а просто закинуть под HMAC (можно даже не шифровать). Можно обойтись без первого GETa, используя в качестве rand1 таймстамп. Хотя девелоперы могут расстроиться из-за расстроеного времени на сервере.

RSA тут не нужно, т.к. ключ клиент заливает на сервер по защищенному каналу (будем надеяться..). Хотя в качестве подписи это надежнее в том плане, что если кто то читанет исходники на сервере — узнает только публичный ключ.
В CFB не нужен padding, поэтому «padding oracle» конечно же не в тему. SHA1 по моему тут используется тупо как хэш («хеш исполняемого файла»). Автор пусть почитает про MAC/HMAC.
Если про X220+ — то как два пальца об асфальт.

В какую сторону смотреть?
Так в конце получается команда «cat<<<'Happy new year'», которую я и запускаю. Почему не «echo» или «printf»? Они просто длиннее — каждая лишняя буква это морока с переменными и операциями.


echo 'Happy new year' короче же на 1 символ? Да и можно без кавычек:

cat<<<'Happy new year'
echo Happy new year
Вообще аргумент можно взять в кавычки и тогда вся строка будет в sys.argv[1]. Если оочень лень вводить кавычки и хочется, чтобы несколько аргументов сливались самим скриптом — делаем " ".join(sys.argv[1:]). Но основная проблема — экранировать нужно не только пробел. Банальные примеры: ; ! () < >. Так что часть аргументов все равно придется брать в кавычки. Это по поводу bash -> python.

Модуль commands Deprecated since version 2.6:. getoutput если и использовать, то только в скриптах для себя. В идееале нужно вызывать subprocess.check_output() с командой в виде списка (если передавать строкой то будет тот же getoutput):
check_output(["zenity", "--entry", "--title=Напоминалка", "--text=Введите напоминание", "--entry-text=%s" % arg1, "--width=400"])

Да, это неудобно, зато аргументы будут переданы корректно и не нужно ничего экранировать. +Нету лишнего вызова bash'а, zenity будет вызван напрямую. +Наверняка есть библиотеки для таких вызовов по типу prepared statements в SQL.

PS: ещё заменчание по регэкспам: [0-9][0-9][0-9][0-9] никто не пишет, надо \d{4}. (Только к строке-регэкспу добавить префикс r, чтобы слеш не утек).
arg1=string.join(sys.argv[1:],'\\ ') # получаем переменную из соседнего файла bash


Шта?

Автору советую сделать напоминание ;rm -rf /;1 через 15 минут и идти учить питон.
Мелькнула мысль, что если ГПСЧ выдает полностью состояние (допустим 32 бита), либо инъективную функцию от состояния, то его можно с большой вероятностью «отличить от рандома» простым общим статистическим тестом — у «правильного» рандома из примерно 2**17 выходов хотя бы два должны совпасть. У описанного ГПСЧ совпасть выходы так быстро не могут, т.к. тогда образуется период и его тоже легко вычислить.

Про криптографическую стойкость таких ГПСЧ говорить нет смысла, но это может быть проблемой и для различных экспериментов со «случайными» данными.
Про неё в статье писали, но я не понял чем же она хуже losetup:
Те же, кому не так повезло с дистрибутивом, могут воспользоваться программой kpartx
Советую ещё заценить версию под мобильные девайсы, там управление чутка другое плюс куча режимов (бег с препятствиями, прыжок в длину, ходьба 50км).
Отличная статья! Теорема Ван дер Вардена чем то похожа на гипотезу (нерешенную) «Erdos discrepancy problem».

Есть бесконечная последовательность из {-1, 1}, гипотеза утверждает, что для любого C, найдется (конечная) однородная арифметическая прогрессия индексов, такая что сумма последовательности по этим индексам >C. Для неоднородного случая гипотеза вроде доказана.

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

Кстати, один из экспериментальных результатов по этой гипотезе тоже был получен с помощью SAT-солвера.
Наоборот, NP-полная задача — та, к которой сводится другая NP-полная задача (плюс наша задача еще сама должна лежать в NP).
Дык частный случай же. Да и NP-полные задачи необязательно решаются «полным перебором».
a^p == a (mod p) верно при любом a, p — простое.
Если a делится на p, то очевидно a^p == 0^p == 0 == a (mod p). Если не делится, тогда умножим на a обе стороны a^(p-1) == 1 (mod p), получим тоже a^p == a (mod p).
Малая теорема Ферма: a^p == a (mod p).

(n + 1)^p — n^p — 1 == n + 1 — n — 1 == 0 (mod p) — значит делится нацело на p.

Information

Rating
Does not participate
Location
Голицыно (Московская обл.), Москва и Московская обл., Россия
Date of birth
Registered
Activity