Когда смотрел видео геймплеея, постоянно цепляла мысль, что голос вступает слишком рано.
Мне кажется, к некоторым репликам хорошо бы добавить небольшую паузу вначале.
Иначе получается, что «всё разбили нахрен» звучит одновременно со взрывом танка или даже чуть раньше.
Человеки не умеют так быстро реагировать. И небольшая задержка, на мой взгляд, добавила бы озвучке реализма.
Хотя, в запале игры это всё, быть может, и не имеет значения.
Но если очередная буква совпадает с первой буквой следующего слова, то надо переходить к сравнению следующей буквы со второй буквой следующего слова и т.д. В итоге, получим квадратичную сложность.
Например:
Unnnnnnnnnnnnnnniversity Nnnnnnnnnnnnichego Nnnnnnnnnnnnne Delanya
Или менее тривиальный вариант:
Uninininininininininiversity Ninininininininininichego Nininininininininini Delanya
на torrentz.eu, кстати, раздача засветилась уже 15 часов назад
там, правда, на английском большинство раздач, зато появляются очень оперативно: вечером в эфире, на следующее утро в раздаче
Может, знает кто…
Нельзя ли с помощью intent'ов (или ещё как) делать sign in / sign out в Hangouts?
Я бы хотел настроить это по расписанию в какой-нть Llama.
Так объясните тёмному, что же именно не так с «терциалом»?
Ну вот выше вы написали про гайки, провода и выключатель. Если последнее ещё и правда может быть аргументом в плане удобства, то «некрасивый провод», уж простите, это какое-то пижонство. Вам же лампа эта для работы нужна, а не для «обстановки».
Я отнюдь не хочу сказать, что лучше IKEA нет ничего. Но честно пытаюсь понять, что же именно в этой лампе так плохо?
Я писал выше в коментах: под винду есть ManicTime
А под линукс есть Project Hamster — только он сам не записывает программы, надо все занятия вводить руками.
Пришлось сдуть пыль с компилятора для C (на удивление, ни в одном более высокоуровневом языке нельзя подсунуть в MD5 начальный контекст).
Я немного изменил формат передачи сообщения серверу, чтобы пример был более наглядным.
MD5_CTX seed;
// оригинальный запрос к серверу:
// example.com/?msg=status:protected&sig=039f220db17cebe441bc4d34e6683963
MD5_Init(&seed);
// секрет + тело сообщения
char *msg = "900150983cd24fb0d6963d7d28e17f72" \
"status:protected";
printf("%s\n", md5(msg, strlen(msg), &seed));
// = 039f220db17cebe441bc4d34e6683963 - это и есть подпись для исходного сообщения
MD5_Init(&seed);
// та самая исходная подпись, порезанная на части
seed.A = 0x0d229f03;
seed.B = 0xe4eb7cb1;
seed.C = 0x344dbc41;
seed.D = 0x633968e6;
// длина исходного сообщения с секретом в битах, округлённая вверх до кратного 512 значения
seed.Nl = 512;
seed.Nh = 0;
// вычисляем новый хэш (= подпись), исходя из начального значения и нашей "добавки"
char *extension = ",status:hacked";
printf("%s\n", md5(extension, strlen(extension), &seed));
// = 164bc99c345fd21e1e810bf9a41222b
// подделанный запрос к серверу:
// example.com/?msg=status:protected%80%00%00%00%00%00%00%00%80%01%00%00%00%00%00%00,status:hacked&sig=164bc99c345fd21e1e810bf9a41222b
// а вот так будет считать хэш сервер
// я специально порезал строку на части, чтобы лучше была видна структура:
// секрет, исходное сообщение, паддинг, длина исходного сообщения с секретом, "добавка"
MD5_Init(&seed);
char *msg2 = "900150983cd24fb0d6963d7d28e17f72" \
"status:protected" \
"\x80\x00\x00\x00\x00\x00\x00\x00" \
"\x80\x01\x00\x00\x00\x00\x00\x00" \
",status:hacked";
printf("%s\n", md5(msg2, 78, &seed)); // strlen() тут не сработает - потому 78
// = 164bc99c345fd21e1e810bf9a41222b - наша подпись подошла!
Единственный оставшийся здесь момент — неизвестная длина секрета. Но она, скорее всего, либо одинаковая для всех пользователей, либо варьируется не сильно.
А что такое этот «контейнер» в контексте, например, HTTP запроса?
Предлагаете придумать какой-то свой формат передачи параметров и заново реализовывать формирование запроса на клиенте и парсинг на сервере? А также обработку специальных случаев (мульти-значения, искейпинг) и пр. Т.е., по сути, отказаться от всех удобств работы с параметрами, предоставляемых используемым фреймворком (никаких больше params[:user_id] «из коробки»).
Именно так — не получится.
Суть Length extension в том, что к сообщению добавляются новые байты. Заменить исходные не выйдет.
Т.е. в лучшем случае, у вас получится что-то вроде site.com/?param=protected\x80\x00\x00...\x00\xNN¶m=hacked
Вы правы. Разобрался с chosen prefix / preimage. Спасибо.
Но, насколько я понимаю, это всё равно не отменяет уязвимости схемы H(message | key):
appending the key using MAC = H(message | key), suffers from the problem that an attacker who can find a collision in the (unkeyed) hash function has a collision in the MAC
Именно о ней я и писал в самом начале этой ветки.
Собственно, потому в HMAC и выбрали другую схему — H(key1 | H(key2 | message))
Мне кажется, к некоторым репликам хорошо бы добавить небольшую паузу вначале.
Иначе получается, что «всё разбили нахрен» звучит одновременно со взрывом танка или даже чуть раньше.
Человеки не умеют так быстро реагировать. И небольшая задержка, на мой взгляд, добавила бы озвучке реализма.
Хотя, в запале игры это всё, быть может, и не имеет значения.
это ведь чистейшей воды подстава: получил пачку СМС-спама — бабки на бочку
(там в шапке список других аналогичных программ)
Например:
Unnnnnnnnnnnnnnniversity Nnnnnnnnnnnnichego Nnnnnnnnnnnnne Delanya
Или менее тривиальный вариант:
Uninininininininininiversity Ninininininininininichego Nininininininininini Delanya
там, правда, на английском большинство раздач, зато появляются очень оперативно: вечером в эфире, на следующее утро в раздаче
Нельзя ли с помощью intent'ов (или ещё как) делать sign in / sign out в Hangouts?
Я бы хотел настроить это по расписанию в какой-нть Llama.
качаешь этот пакет, заливаешь его в телефон через adb sideload и апдейтишься себе, как будто он сам пришёл через OTA
правда, работает это, как я понимаю, только с официальным 4.2.2 — на кастомную прошивку такое накатить не получится
вот тут, кстати, аналогичный пакет для Nexus 4
Ну вот выше вы написали про гайки, провода и выключатель. Если последнее ещё и правда может быть аргументом в плане удобства, то «некрасивый провод», уж простите, это какое-то пижонство. Вам же лампа эта для работы нужна, а не для «обстановки».
Я отнюдь не хочу сказать, что лучше IKEA нет ничего. Но честно пытаюсь понять, что же именно в этой лампе так плохо?
А под линукс есть Project Hamster — только он сам не записывает программы, надо все занятия вводить руками.
Есть аналогичная под Windows — ManicTime
Я немного изменил формат передачи сообщения серверу, чтобы пример был более наглядным.
Единственный оставшийся здесь момент — неизвестная длина секрета. Но она, скорее всего, либо одинаковая для всех пользователей, либо варьируется не сильно.
Предлагаете придумать какой-то свой формат передачи параметров и заново реализовывать формирование запроса на клиенте и парсинг на сервере? А также обработку специальных случаев (мульти-значения, искейпинг) и пр. Т.е., по сути, отказаться от всех удобств работы с параметрами, предоставляемых используемым фреймворком (никаких больше
params[:user_id]
«из коробки»).Суть Length extension в том, что к сообщению добавляются новые байты. Заменить исходные не выйдет.
Т.е. в лучшем случае, у вас получится что-то вроде
site.com/?param=protected\x80\x00\x00...\x00\xNN¶m=hacked
Но, насколько я понимаю, это всё равно не отменяет уязвимости схемы
H(message | key)
:Именно о ней я и писал в самом начале этой ветки.
Собственно, потому в HMAC и выбрали другую схему —
H(key1 | H(key2 | message))