11.06 // Простой способ создания неотслеживаемых коммуникаций
Многие пользователи интернета думали о том, как организовать для себя неотслеживаемый канал связи. При этом приходит в голову два решения: стеганография и сети анонимной связи.
У обоих решений есть свои недостатки. Стеганографический канал обладает малой пропускной способностью, а регулярно подбирать контент сообщений так, чтобы он не вызывал подозрение у наблюдателя — сложно. Канал анонимной связи требует от пользователей поиска и/или установки и поддержки собственных сервисов (например скрытых сервисов в сети Tor) и согласования параметров — по каким адресам искать друг друга.
Однако, многим приходило в голову как-то пытаться сочетать оба подхода, чтобы компенсировать их недостатки: по одному каналу в интернете договариваться о связи, а по другому — осуществлять передачу данных.
Исследователи Филип Беато (Кафедра электротехники, исследовательская группа по компьютерной безопасности и промышленной криптографии, кафедра перспектив здравоохранения iMind католического университета Лёвен, Бельгия), Эмилиано де Кристофаро (Университетский колледж Лондона, кафедра компьютерных наук) и Каспер Рассмусен (Оксфордский Университет, кафедра компьютерных наук) также не остались в стороне от этой темы, опубликовав работу "Undetectable Communication: The Online Social Networks Case".
Вместо использования полновесной стеганографии, они предложили и формально описали концепции низкоэнтропийной стеганографии, целью которой является передача не закодированного осмысленного сообщения, а небольшого количества энтропии через обычный текст с целью вычисления сеансовых ключей и вычисления адресов для секретной связи по другим каналам. А уже по этим адресам можно получить сколь-угодно большие сообщения, используя сети анонимной связи. При этом противник не может догадаться ни о наличии таких каналов, ни о связи с ними отправителей согласующих сообщений.
К достоинствам метода относится то, что сторонам достаточно иметь лишь совместный долговременный симметричный ключ k. Больше никаких параметров в быстроменяющемся мире интернета им согласовывать не потребуется. Сообщения для согласования связи могут иметь произвольную форму: это может быть любая фраза, из которой достаточно получить уникальный хэш.
Итак, Алиса и Боб знают k. Алиса вычисляет из него ключ шифрования kENC = H (k ║ 0) путём хэширования с нулём и ключ аутентификации kMAC = H (k ║ 1) путём хэширования с единицей. В дальнейшем, для простоты оба ключа будут обозначаться как k и различаться в формулах по смыслу операций: аутентификации или шифрования.
Алиса публикует на открытом ресурсе (например, на странице своей социальной сети) произвольное сообщение tA, скорее всего представляющее собой короткий текст. Никакой специальной формы сообщению при этом придавать не обязательно. Алиса вычисляет index = MACk (tA) — псевдослучайный адрес связи. Этот адрес связи она может использовать для создания логина на файлообменном сервисе или скрытом сервисе Tor. А для сопоставления этого адреса какому-либо реальному адресу, она анонимно (через Tor) размещает ссылку на него в сервисе отображения адресов (таком как tinyurl). Затем Алиса шифрует секретное сообщение SA посредством EK (SA) и размещает его на ранее вычисленном адресе.
Только Боб, зная ключ k может проделать такие же вычисления, как и Алиса, найти адрес размещения её скрытого сообщения и расшифровать его.
Используя такой простой протокол можно даже из одного сеанса связи вычислить массу производных ключей, которые использовать для согласования адресов, логинов, паролей для входа в сервисы и расшифровки данных. Если пользователи создают эти адреса через анонимные сети, то между ними и создаваемыми адресами не существует никакой легкообнаружимой связи. А если адреса находятся на подконтрольном им скрытом сервисе Tor, то после использования они могут уничтожать эти адреса, не оставляя следов обмена информацией даже если сам факт этого будет заподозрен или раскрыты секретные параметры связи.
Исследователи создали тестовую реализацию простейшей версии такого протокола, способного работать в виде JavaScript-плагина к браузеру для сетей Facebook, Twitter и Google+.
Данная публикация будет представлена на 12-ой международной конференции по приватности, безопасности и доверию PST2014 в Торонто, Канада, 23-24 июля 2014 года на базе кафедры компьютерных наук университета Райерсона при технической поддержке компьютерного сообщества Института инженеров электротехники и электроники.
Источник: Университетский колледж Лондона, кафедра компьютерных наук, группа информационной безопасности
комментариев: 9796 документов: 488 редакций: 5664
Положим, MD5 нестоек и к поиску коллизий, и к атакам дополнения. Но для стойкой хэш функции поиск выражения H(M) = (M ║ H(M)) равносилен взлому.
Атака на первый вариант вроде такая: клиент предъявляет серверу валидные salt и hash, не зная правильного пароля. Делается это так: он крадёт валидные hashold и saltold с предыдущей сессии, потом генерит новую saltnew и вычисляет хэш от новой соли, являющейся конкатенацией с предыдущей:
Там, наверно, ещё важно, сколько дописывается к конец текста, от которого берётся хэш, но смысл, думаю, вам понятен.
комментариев: 9796 документов: 488 редакций: 5664
С нормальным хэшем, типа Keccak, претендующем на полноценную PRF, такие извращённые схемы, по крайней мере, частично — будут не нужны. HMAC уже точно, не нужен. Я упоминал об этом на примере Blinker.
комментариев: 9796 документов: 488 редакций: 5664
Это какие-то неправильные хэши. Не представляю себе такого без коллизии внутренней функции хэширования.
Каждый поданный на вход блок меняет внутреннее состояние хэша. А каждый последующий блок сцепляется с внутренним состоянием от предыдущего блока. И в хэше учитывается длина сообщения.
Это обычные хэши предыдущего поколения (те что были до KeccaK'а).
Всё так, вот только внутреннее состояние хэша выдается наружу на последней итерации, стало быть можно взять результат хэша и досчитать его для каких-то дополнительных данных — это называется «length extension attack», и есть готовые проги, которые это делают. Это тривиальная практическая атака, она работает для MD5, SHA-1 и SHA-2.
Проблема хэшей в том, что они выдают всё внутреннее состояние, поэтому такая атака и возможна. KeccaK выдает только часть, поэтому против него не работает.
Я тут плохо написал — это не двойное хеширование hash(hash()). Там используется внутренняя функция от хэша, а не хэш в неизменном виде. Грубо говоря, можно пояснить так: есть старый хэш от неизвестных данных, и есть данные, которые надо дописать. Мы можем вычислить такой новый хэш, который был бы равен хэшу от (неизвестные данные + блок паддинга + дополняющие данные):
z = hash(x + padding + new_data)
Хэш z можно вычислить, не зная x.
attack_function — это не сам хэш, а производная от него функция. z — итоговый новый хэш, получающийся в результате атаки (x нам неизвестен). padding — блок дополнения, который неизбежно придется добавить к потоку, и который нами не
контролируется. После блока дополнения к потоку добавляем уже произвольные данные. Т.е., padding вычисляется (его нельзя изменять произвольно), а new_data — произвольные данные, навязанные нами.
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 9796 документов: 488 редакций: 5664
Вот такой вот смайлик. Старые коменты уже не поправить, но это не пошаговое руководство к действию, а только пример, как можно реализовать идею подручными средствами.
-n do not output the trailing newline
комментариев: 9796 документов: 488 редакций: 5664
echo "123" | md5sum
echo -n "123" | md5sum