Я недавно написал пост о том как я настраивал систему, избавляя её от лишних с моей точки зрения программ, и о том что меня возмутил сервис, генерирующий случайные числа. Пост был эмоциональный, но не очень понятный. Многие жаловались и требовали объяснений. Так что небольшая воскресная проповедь о природе случайного. Компьютер чем-то напоминает демона Лапласа: если начать с определенных условий - результат всегда получается одинаковый, и это проблема.
В Интернете древности (и сейчас иногда тоже) можно просто заменить IP адрес отправителя, прикинувшись кем-то другим. И послать, например, вам пакет RST, разрывающий соединение, пока вы тянете здоровенный файл. Чтобы этого не происходило, счетчики в TCP-соединении начинаются со случайного числа, чтобы атакующий не смог его угадать. Любое шифрование, в том числе TLS, защищающий вас прямо сейчас от майора-в-середине, просто не будет работать без случайных чисел, и это касается не только ключей, но и всеми любимых цифровых подписей. Sony гарантирует это.
Где взять случайность и как померять насколько она случайная? Уже в 1870 году Больцманн и Гиббс сформулировали понятие энтропии, такая смесь статистики и термодинамики S = -k * \sum p_i \ln p_i, где p_i вероятность того, что система окажется в i-ом состоянии из всех возможных, а k - постоянная Больцманна. Вас наверняка мучали такими формулами в школе, но не всем объяснили зачем они нужны. Энтропия количество "беспорядка". И эта стервь не убывает, пока не достигнет максимального значения и система не придёт в равновесие. Гроб, гроб, кладбище, тепловая смерть вселенной.
А в сороковых годах прошлого века, замечательный Клод Шеннон решил применить тот же подход к информации, так появилась теория информации (и на ней основана и криптография, сжатие данных, коммуникации и даже лингвистика). Энтропия по Шеннону H = \sum p_i log p_i, где p_i вероятность для i-го сообщения из всех возможных. Если все вероятности равны, то H = \log |M| (M - множество всех сообщений) Попробуем погонять одно и тоже сообщение через зашумленный канал по кругу, и энтропия будет расти, пока сообщение не превратится в случайный мусор. Физику не наебёшь
Только у компьютера нет таких "шумящих" штук, и в обиход вошли псевдо-случайные генераторы. Один из самых распространенных линейный конгруэнтный генератор LCG: s_i = a * s_(i-1) + b mod m, достаточно выбрать относительно "случайное" начальное значение s_0 (как правило, текущую дату) и при правильно подобранных значениях a, b, m, формула выдаст долго не повторяющийся ряд чисел похожих на случайные. Если вы знакомы с основами теории групп, то должно быть понятно почему. https://bit.ly/2VBDx0k Многие языки программирования и библиотеки используют LCG по умолчанию.
Достаточно ли этого? Возьмем генератор из Borland C (2^32, 22695477, 1) сгенерируем 1000 чисел и измерим энтропию. Entropy = 7.966828 bits per byte. Вроде бы неплохо, пока мы не сменили уютный пледик программиста на логово злодеев, заваленное костьми людей с благими намерениями. Вся последовательность полностью предсказуема, если мы знаем начальное значение (seed). Мы его можем просто подобрать перебором, для современных компьютеров не проблема. Какой-то крипто-локер генерировал так ключи. Его тут же взломали.
Более того, если у нас есть возможность сгенерировать несколько чисел, то мы можем восстановить значения a, b, m с вероятностью 1 / \zeta(2), где \zeta - функция Римана, 6 / \pi ^ 2, по мере наблюдений за генератором, вероятность взлома будет расти. И расти быстро. Так мы получим все следующие значения после того, как узнаем текущий seed. Зная параметры, мы можем обратить формулу, и получить и внутреннее состояние генератора, и все предыдущие значения тоже. Что делать?
В Интернете древности (и сейчас иногда тоже) можно просто заменить IP адрес отправителя, прикинувшись кем-то другим. И послать, например, вам пакет RST, разрывающий соединение, пока вы тянете здоровенный файл. Чтобы этого не происходило, счетчики в TCP-соединении начинаются со случайного числа, чтобы атакующий не смог его угадать. Любое шифрование, в том числе TLS, защищающий вас прямо сейчас от майора-в-середине, просто не будет работать без случайных чисел, и это касается не только ключей, но и всеми любимых цифровых подписей. Sony гарантирует это.
Где взять случайность и как померять насколько она случайная? Уже в 1870 году Больцманн и Гиббс сформулировали понятие энтропии, такая смесь статистики и термодинамики S = -k * \sum p_i \ln p_i, где p_i вероятность того, что система окажется в i-ом состоянии из всех возможных, а k - постоянная Больцманна. Вас наверняка мучали такими формулами в школе, но не всем объяснили зачем они нужны. Энтропия количество "беспорядка". И эта стервь не убывает, пока не достигнет максимального значения и система не придёт в равновесие. Гроб, гроб, кладбище, тепловая смерть вселенной.
А в сороковых годах прошлого века, замечательный Клод Шеннон решил применить тот же подход к информации, так появилась теория информации (и на ней основана и криптография, сжатие данных, коммуникации и даже лингвистика). Энтропия по Шеннону H = \sum p_i log p_i, где p_i вероятность для i-го сообщения из всех возможных. Если все вероятности равны, то H = \log |M| (M - множество всех сообщений) Попробуем погонять одно и тоже сообщение через зашумленный канал по кругу, и энтропия будет расти, пока сообщение не превратится в случайный мусор. Физику не наебёшь
Только у компьютера нет таких "шумящих" штук, и в обиход вошли псевдо-случайные генераторы. Один из самых распространенных линейный конгруэнтный генератор LCG: s_i = a * s_(i-1) + b mod m, достаточно выбрать относительно "случайное" начальное значение s_0 (как правило, текущую дату) и при правильно подобранных значениях a, b, m, формула выдаст долго не повторяющийся ряд чисел похожих на случайные. Если вы знакомы с основами теории групп, то должно быть понятно почему. https://bit.ly/2VBDx0k Многие языки программирования и библиотеки используют LCG по умолчанию.
Достаточно ли этого? Возьмем генератор из Borland C (2^32, 22695477, 1) сгенерируем 1000 чисел и измерим энтропию. Entropy = 7.966828 bits per byte. Вроде бы неплохо, пока мы не сменили уютный пледик программиста на логово злодеев, заваленное костьми людей с благими намерениями. Вся последовательность полностью предсказуема, если мы знаем начальное значение (seed). Мы его можем просто подобрать перебором, для современных компьютеров не проблема. Какой-то крипто-локер генерировал так ключи. Его тут же взломали.
Более того, если у нас есть возможность сгенерировать несколько чисел, то мы можем восстановить значения a, b, m с вероятностью 1 / \zeta(2), где \zeta - функция Римана, 6 / \pi ^ 2, по мере наблюдений за генератором, вероятность взлома будет расти. И расти быстро. Так мы получим все следующие значения после того, как узнаем текущий seed. Зная параметры, мы можем обратить формулу, и получить и внутреннее состояние генератора, и все предыдущие значения тоже. Что делать?
👍3
Сформулируем требования к генератору. Resilience. Все значения должны выглядеть случайными, и атакующий не должен по выхлопу генератора узнать его внутреннее состояние. Forward security. Если состояние потекло, атакующий не должен узнать предыдущие значения генератора. Если внутреннее состояние обновляется, то атакующий не должен узнать и последующие состояния генератора тоже - break-in recovery (восстановление после взлома).
И мы снова возвращаемся к энтропии. У дядь и тёть криптографов есть простая и интересная игра для проверки шифров. Атакующий даёт вам два сообщения m0 и m1, вы шифруете одно из них и отдаёте назад. Всё тот же Шеннон переформулоировал принцип Керкгоффса (требования к шифрам): враг знает систему, ему известно всё кроме ключа. Если шифр хороший, то враг не может узнать какое именно из его сообщений вы зашифровали m0 или m1. Из зашифрованного текста нельзя извлечь информацию, у шифровок равная (или почти равная) вероятность. Если не протекает совсем, то такое свойство называется perfect secrecy (опять Шеннон, 1948 год), а если протекает с пренебрежимо малой вероятностью, то semantic security.
Для хорошего генератора нам понадобится любой (вменяемый) шифр E и небольшой источник настоящих случайных чисел для начального значения, генератор будет выглядеть вот так E(s) -> s, r, мы обновляем внутреннее состояние, и генерируем следующее случайное число. Фарш невозможно прокрутить назад. Для того, чтобы восстановить состояние нужно взломать шифр. Чтобы защититься от утечки, периодически подмешиваем в состояние дополнительную случайность E(s ^ x) -> s, где x - собранная по крупицам энтропия (движения мыши, нажатия клавиатуры, аппаратные прерывания, сеть и прочий хаос). Вся конструкция описана Бараком и Халеви.
А теперь от теории к практике. Примерно так как в предыдущем абзаце работает генератор в OpenBSD. Система накапливает немного "настоящей энтропии" для инициализации криптографически стойкого генератора (CSRNG), и после этого псевдо-случайные числа идут сплошным потоком и без запинок, по мере накопления в состояние подмешивается новая энтропия, чтобы обеспечить backward security. В Линуксе всё гораздо интереснее.
В ядро генератор добавил Theodore Ts'o в 1996 году, когда в США еще бушевала первая крипто-война с товарищем майором и линуксовый генератор построен весьма замысловатым образом (он даже тогда занимал полторы тысячи строк, а не двести как во вменяемых системах). Подход основан на том, что энтропия ценный ресурс (и это действительно так) и он "истощается" (как нефть), потому есть два устройства /dev/random и /dev/urandom с "настоящими" и псевдо-случайными числами. И тут наблюдается очень странный ход мысли.
Если "энтропия" в CSRNG плохая, то значит лежащей в его основе криптографии нельзя доверять. Она вся похакана АНБ (именно так и написано в исходниках). Тем не менее, так как значения которые ядро добавляет в резервуар случайности (entropy pool) не совсем случайны, то ядро использует ту же самую "похаканную" криптографию, чтобы смешивать новые данные с уже имеющимися. Чтобы генерировать ключи для шифрования "которому нельзя доверять", потому что АНБ. Л. Логика. И у подобного решения есть крайне неприятные последствия.
Когда параноидально-настроенная программа (PGP) читает настоящую случайность из random, то она может закончится и программа заблокируется без видимых причин, а если вменяемая программа (OpenSSL) читает случайность из urandom, то заначка может действительно оказаться пустой, потому что её уже кто-то выжрал, и числа полученные неблокирующим CSRNG не будут случайными. Насколько оправдана паранойя линуксовых разработчиков мы обсуждать не будем, но тут на арену цирка выходят совсем уж удивительные клоуны.
И мы снова возвращаемся к энтропии. У дядь и тёть криптографов есть простая и интересная игра для проверки шифров. Атакующий даёт вам два сообщения m0 и m1, вы шифруете одно из них и отдаёте назад. Всё тот же Шеннон переформулоировал принцип Керкгоффса (требования к шифрам): враг знает систему, ему известно всё кроме ключа. Если шифр хороший, то враг не может узнать какое именно из его сообщений вы зашифровали m0 или m1. Из зашифрованного текста нельзя извлечь информацию, у шифровок равная (или почти равная) вероятность. Если не протекает совсем, то такое свойство называется perfect secrecy (опять Шеннон, 1948 год), а если протекает с пренебрежимо малой вероятностью, то semantic security.
Для хорошего генератора нам понадобится любой (вменяемый) шифр E и небольшой источник настоящих случайных чисел для начального значения, генератор будет выглядеть вот так E(s) -> s, r, мы обновляем внутреннее состояние, и генерируем следующее случайное число. Фарш невозможно прокрутить назад. Для того, чтобы восстановить состояние нужно взломать шифр. Чтобы защититься от утечки, периодически подмешиваем в состояние дополнительную случайность E(s ^ x) -> s, где x - собранная по крупицам энтропия (движения мыши, нажатия клавиатуры, аппаратные прерывания, сеть и прочий хаос). Вся конструкция описана Бараком и Халеви.
А теперь от теории к практике. Примерно так как в предыдущем абзаце работает генератор в OpenBSD. Система накапливает немного "настоящей энтропии" для инициализации криптографически стойкого генератора (CSRNG), и после этого псевдо-случайные числа идут сплошным потоком и без запинок, по мере накопления в состояние подмешивается новая энтропия, чтобы обеспечить backward security. В Линуксе всё гораздо интереснее.
В ядро генератор добавил Theodore Ts'o в 1996 году, когда в США еще бушевала первая крипто-война с товарищем майором и линуксовый генератор построен весьма замысловатым образом (он даже тогда занимал полторы тысячи строк, а не двести как во вменяемых системах). Подход основан на том, что энтропия ценный ресурс (и это действительно так) и он "истощается" (как нефть), потому есть два устройства /dev/random и /dev/urandom с "настоящими" и псевдо-случайными числами. И тут наблюдается очень странный ход мысли.
Если "энтропия" в CSRNG плохая, то значит лежащей в его основе криптографии нельзя доверять. Она вся похакана АНБ (именно так и написано в исходниках). Тем не менее, так как значения которые ядро добавляет в резервуар случайности (entropy pool) не совсем случайны, то ядро использует ту же самую "похаканную" криптографию, чтобы смешивать новые данные с уже имеющимися. Чтобы генерировать ключи для шифрования "которому нельзя доверять", потому что АНБ. Л. Логика. И у подобного решения есть крайне неприятные последствия.
Когда параноидально-настроенная программа (PGP) читает настоящую случайность из random, то она может закончится и программа заблокируется без видимых причин, а если вменяемая программа (OpenSSL) читает случайность из urandom, то заначка может действительно оказаться пустой, потому что её уже кто-то выжрал, и числа полученные неблокирующим CSRNG не будут случайными. Насколько оправдана паранойя линуксовых разработчиков мы обсуждать не будем, но тут на арену цирка выходят совсем уж удивительные клоуны.
В любой современной системе у пользовательских программ нет прямого доступа к железу (из которого можно выжать немного случайного), система разделена на пространство пользователя и пространнство ядра. И тут для служения культу "истощающейся энтропии" появляются две программы haveged и rnd-tools, которые пытаются собирать в пользовательском режиме энтропию из железа, не имея к нему прямого доступа, и запихивают её обратно в ядро, чтобы наполнять два бассейна для генераторов random и urandom. И еще гордятся тем, что из random теперь можно читать без блокировок.
Правильный вариант - накопить немного настояшей случайности из разных источников (включая аппаратный генератор процессора), чтобы полностью инициализировать нормальный CSRNG, периодически обновлять состояние и перестать бояться, что энтропия закончится. Каменный век закончился, не потому что закончились камни, да и второй закон термодинамики смотрит на линуксоидов как на говно. Либо криптография работает, либо нет - нужно выбрать что-то одно из двух. Если же АНБ "взломало всё", то у нас куда более серьёзные проблемы, чем случайность случайности.
P.S. Раньше мои посты на подобные темы выглядели примерно так: "уёбки непрерывно пихают энтропию из юзерспейса в ядро, снёс хуйню". Человеческим языком получилось немного длиннее, но может быть кого-нибудь развлечёт.
Правильный вариант - накопить немного настояшей случайности из разных источников (включая аппаратный генератор процессора), чтобы полностью инициализировать нормальный CSRNG, периодически обновлять состояние и перестать бояться, что энтропия закончится. Каменный век закончился, не потому что закончились камни, да и второй закон термодинамики смотрит на линуксоидов как на говно. Либо криптография работает, либо нет - нужно выбрать что-то одно из двух. Если же АНБ "взломало всё", то у нас куда более серьёзные проблемы, чем случайность случайности.
P.S. Раньше мои посты на подобные темы выглядели примерно так: "уёбки непрерывно пихают энтропию из юзерспейса в ядро, снёс хуйню". Человеческим языком получилось немного длиннее, но может быть кого-нибудь развлечёт.
👍1
Под технические посты сложно подбирать картинки. Светящиеся клавиатуры, трехметровые экраны, капюшончики, черепа и знаки биологической угрозы вырвиглазных цветов уже настолько всех достали, что в фильмах "про компьютеры" украдкой показывают краешек nmap, как намёк на порно, а документалисты ограничиваются руками на клавиатуре (светящейся) и экраном ноутбука (с nmap) в расфокусе. Пока записывал интервью для документалок, я стал провессиональным открывателем дверей. Один из фондов даже конкурс объявил "Cybersecurity Visuals Challenge", небезынтересный, да.
Но техномагия по-прежнему остаётся магией, что мне в ней и нравится. Я недавно нашел статью Каргера и Шелла 1974 года, в которой описывается бэкдор вставленный в компилятор таким образом, что не остаётся следов в исходниках. Меня всегда интересовали программы, которые пишут и переписывают другие программы. Желательно ещё чтобы господа программисты и безопасники под ногами не путались. Чем бесполезней программа - тем лучше! На заднем фоне начинает мигать зелёный череп с оранжевым знаком биологической угрозы на лбу - бесполезные программы, которые переписывают что-то сами по себе - компьютерные вирусы.
В последнее время я с сожалением наблюдаю за вырождением этой разновидности современного искусства. По-настоящему прорывные идеи встречаются редко. Уже в 1990 году Марк Вошберн придумал прицепить к вирусу случайно сгенерированный расшифровщик и появились полиморфные вирусы, и они, не смотря на простоту идеи, надолго озадачили антивирусные компании. Интересным был переход от вирусов и червей к ботнетам, что привело к поглощению антивирусной индустрии и появлению комплексных решений, а со стороны противника к новым (а точнее традиционным) формам организации труда - высокоуровневые языки, проектирование, тестирование, менеджмент. Никакого выпиливания лобзиком, промышленный подход.
Меня же больше интересует, тот момент когда белые шляпы достигли пика в имеющихся на тот момент технологиях и развитие остановилось. Stuxnet, X-Agent, RCS - просто скучный шлак. Да, дорогостоящий из-за пачек эксплоитов, да, объемный по времени затраченному на рзработку, и чудовищно скучный. А в 2002 году появились два метаморфных вируса ZMist и MetaPHOR - вирусы способные проанализировать свой код, изменить и собрать его заново. Занятно, что и вирмейкеры и антивирусники боялись и надеялись соответственно, что если выдрать из вируса анализатор кода, то можно получить его минимизированную форму (zeroing) для детектирования. Что неосуществимо в теории, но вполне реализуется на практике.
Про бесплатные завтраки в поиске и оптимизации поговорим в другой раз, а неосуществимость "зануления" можно доказать с помощью старой, доброй машины Тьюринга - такое воображаемое устройство, с помощью которого можно проэмулировать решение любой задачи, более того, если МТ нельзя запрограммировать на решение задачи, то такая задача называется алгоритмически неразрешимой (не то чтобы такую задачу нельзя решить, но для её решения нельзя написать программу). Формализм Тьюринга, наравне с лямбда-исчислением Черча - это и есть определение алгоритма. Если алгоритм нельзя описать в рамках формального определения, то это - не алгоритм.
И теоретическое доказательство невозможности детекта метаморфиков оптимизацией очень простое. В случае с вирусом нужно доказать, что две программы идентичны, то есть дают одинаковый результат для всех возможных начальных условий. Так как мы не знаем остановится ли когда-нибудь машина Тьюринга или зациклится, то задача алгоритмически неразрешима. А на практике такой фокус действительно можно провернуть, потому что мутации в известных метаморфных вирусах очень простые и нацелены на отдельные инструкции и базовые блоки без учета "смысла" заложенного в программу.
Но техномагия по-прежнему остаётся магией, что мне в ней и нравится. Я недавно нашел статью Каргера и Шелла 1974 года, в которой описывается бэкдор вставленный в компилятор таким образом, что не остаётся следов в исходниках. Меня всегда интересовали программы, которые пишут и переписывают другие программы. Желательно ещё чтобы господа программисты и безопасники под ногами не путались. Чем бесполезней программа - тем лучше! На заднем фоне начинает мигать зелёный череп с оранжевым знаком биологической угрозы на лбу - бесполезные программы, которые переписывают что-то сами по себе - компьютерные вирусы.
В последнее время я с сожалением наблюдаю за вырождением этой разновидности современного искусства. По-настоящему прорывные идеи встречаются редко. Уже в 1990 году Марк Вошберн придумал прицепить к вирусу случайно сгенерированный расшифровщик и появились полиморфные вирусы, и они, не смотря на простоту идеи, надолго озадачили антивирусные компании. Интересным был переход от вирусов и червей к ботнетам, что привело к поглощению антивирусной индустрии и появлению комплексных решений, а со стороны противника к новым (а точнее традиционным) формам организации труда - высокоуровневые языки, проектирование, тестирование, менеджмент. Никакого выпиливания лобзиком, промышленный подход.
Меня же больше интересует, тот момент когда белые шляпы достигли пика в имеющихся на тот момент технологиях и развитие остановилось. Stuxnet, X-Agent, RCS - просто скучный шлак. Да, дорогостоящий из-за пачек эксплоитов, да, объемный по времени затраченному на рзработку, и чудовищно скучный. А в 2002 году появились два метаморфных вируса ZMist и MetaPHOR - вирусы способные проанализировать свой код, изменить и собрать его заново. Занятно, что и вирмейкеры и антивирусники боялись и надеялись соответственно, что если выдрать из вируса анализатор кода, то можно получить его минимизированную форму (zeroing) для детектирования. Что неосуществимо в теории, но вполне реализуется на практике.
Про бесплатные завтраки в поиске и оптимизации поговорим в другой раз, а неосуществимость "зануления" можно доказать с помощью старой, доброй машины Тьюринга - такое воображаемое устройство, с помощью которого можно проэмулировать решение любой задачи, более того, если МТ нельзя запрограммировать на решение задачи, то такая задача называется алгоритмически неразрешимой (не то чтобы такую задачу нельзя решить, но для её решения нельзя написать программу). Формализм Тьюринга, наравне с лямбда-исчислением Черча - это и есть определение алгоритма. Если алгоритм нельзя описать в рамках формального определения, то это - не алгоритм.
И теоретическое доказательство невозможности детекта метаморфиков оптимизацией очень простое. В случае с вирусом нужно доказать, что две программы идентичны, то есть дают одинаковый результат для всех возможных начальных условий. Так как мы не знаем остановится ли когда-нибудь машина Тьюринга или зациклится, то задача алгоритмически неразрешима. А на практике такой фокус действительно можно провернуть, потому что мутации в известных метаморфных вирусах очень простые и нацелены на отдельные инструкции и базовые блоки без учета "смысла" заложенного в программу.
Отличить "простое" от "сложного" нам поможет иерархия Хомского (он вобще-то на английский язык целился, но и нам тоже пригодится). На самом дне (тип три) живут знакомые многим программистам и администраторам регулярные выражения, что-то вроде "<[a-z]+>[^>]*</[a-z]+> должно ловить открывающий и закрывающий HTML-тэги, но нет никакого способа, кроме поного перечисления всех вариантов, объяснить команде grep, что строки внутри тэгов одинаковые. Язык L=a^n c b^n, в котором количество букв "a" и "b" одинаковое, нельзя описать регулярным выражением.
Переходим на уровень выше, тип два, контекстно-свободные грамматики описывают большую часть формальных языков, таких как Си или Лисп. Предыдущая задача в этом классе языков решается элементарно: expr :- ( expr ) | ..., и такая грамматика распознаёт правильно вложенные скобки в арифметических выражениях. И это та вершина, до которой с трудом доползли вирусописатели. К примеру замену инструкции MOV a, b можно описать как mov a, b :- mov tmp, b; mov a, tmp | ... и получается та же самая матрешка как с HTML-тэгами и скобками в выражениях. Все остальные замены в метаморфных зверюшках описываются регулярками и интереса не представляют.
При этом даже формальный язык, типа Си, не исчерпывается своей грамматикой. Предположим, что у нас есть строка "main() { f = 199; }", скомпилируется она или нет зависит от того, объявлена ли переменная "n". В обожаемом быдлокодерами пых-пыхе, видимо именно по этой причине появилось ключевое слово "global", но задачу оно не только не решает, но и приводит к весьма неочевидным ошибкам. Так что следующий шаг в иерархии, тип один, контекстно-зависимые. В большинстве языков, "контекст" спрятан в таблице символов и намертво прибит гвоздями, не в виде формального описания, а набором правил "вы должны объявить переменную прежде чем её использовать". А про тип ноль мы говорить пока не будем, потому что там возможно всё.
Берроуз как-то сказал, что язык - это вирус из глубокого космоса (чтобы заражать людей и подчинять их инопланетной воле), и мне эта идея прямо-таки запала в душу, раз язык - это вирус, то и правильный вирус - это язык. Бензинчику в огонь подлил Ричард Гебриел, который как-то заметил ("Worse is better"), что язык Си и Юникс, распространяются словно вирус они просты и эволюционируют со временем. Прекрасный пример для подражания. Как именно происходит эволюция компьютерных программ, наглядно показал Кен Томпсон со своим "самовоспроизводящимся багом" и примером бутстрепинга компилятора, который буквально по шагам "обучается" новым конструкциям. Нигде в коде компилятора не прописано соответствие между строкой "\n" и кодом "10" - знание передаётся по наследству.
Я как-то с одним знакомым обсуждал все эти темы, и он с огоньком принялся за написание метаморфного компилятора, в том что компилятор должен быть написан на том языке, который он транслирует я его убедить не смог. Бедняга дошел до того, что написал вполне работающую вещицу написанную целиком и полностью на ассемблере. "Real coderz use asm", LOL. Что случилось потом? Потом ему нужно было переписать компилятор на новом языке, чтобы он мог компилировать сам себя, и вот тут-то он и сломался. Чтобы упростить задачу лучше взять уже существующий язык и дополнить его недостающими фичами. Yonkie как-то переписал кодогенератор TCC, но кодогенератор по-пржнему живёт на уровне инструкций и блоков, тоже самое можно сделать и проще. Всё тот же вариант, что у Mental Driller и Zombie, peep-hole obfuscation.
Переходим на уровень выше, тип два, контекстно-свободные грамматики описывают большую часть формальных языков, таких как Си или Лисп. Предыдущая задача в этом классе языков решается элементарно: expr :- ( expr ) | ..., и такая грамматика распознаёт правильно вложенные скобки в арифметических выражениях. И это та вершина, до которой с трудом доползли вирусописатели. К примеру замену инструкции MOV a, b можно описать как mov a, b :- mov tmp, b; mov a, tmp | ... и получается та же самая матрешка как с HTML-тэгами и скобками в выражениях. Все остальные замены в метаморфных зверюшках описываются регулярками и интереса не представляют.
При этом даже формальный язык, типа Си, не исчерпывается своей грамматикой. Предположим, что у нас есть строка "main() { f = 199; }", скомпилируется она или нет зависит от того, объявлена ли переменная "n". В обожаемом быдлокодерами пых-пыхе, видимо именно по этой причине появилось ключевое слово "global", но задачу оно не только не решает, но и приводит к весьма неочевидным ошибкам. Так что следующий шаг в иерархии, тип один, контекстно-зависимые. В большинстве языков, "контекст" спрятан в таблице символов и намертво прибит гвоздями, не в виде формального описания, а набором правил "вы должны объявить переменную прежде чем её использовать". А про тип ноль мы говорить пока не будем, потому что там возможно всё.
Берроуз как-то сказал, что язык - это вирус из глубокого космоса (чтобы заражать людей и подчинять их инопланетной воле), и мне эта идея прямо-таки запала в душу, раз язык - это вирус, то и правильный вирус - это язык. Бензинчику в огонь подлил Ричард Гебриел, который как-то заметил ("Worse is better"), что язык Си и Юникс, распространяются словно вирус они просты и эволюционируют со временем. Прекрасный пример для подражания. Как именно происходит эволюция компьютерных программ, наглядно показал Кен Томпсон со своим "самовоспроизводящимся багом" и примером бутстрепинга компилятора, который буквально по шагам "обучается" новым конструкциям. Нигде в коде компилятора не прописано соответствие между строкой "\n" и кодом "10" - знание передаётся по наследству.
Я как-то с одним знакомым обсуждал все эти темы, и он с огоньком принялся за написание метаморфного компилятора, в том что компилятор должен быть написан на том языке, который он транслирует я его убедить не смог. Бедняга дошел до того, что написал вполне работающую вещицу написанную целиком и полностью на ассемблере. "Real coderz use asm", LOL. Что случилось потом? Потом ему нужно было переписать компилятор на новом языке, чтобы он мог компилировать сам себя, и вот тут-то он и сломался. Чтобы упростить задачу лучше взять уже существующий язык и дополнить его недостающими фичами. Yonkie как-то переписал кодогенератор TCC, но кодогенератор по-пржнему живёт на уровне инструкций и блоков, тоже самое можно сделать и проще. Всё тот же вариант, что у Mental Driller и Zombie, peep-hole obfuscation.
Наиболее разумным мне кажется другой вариант - пишем новый компилятор на хорошо знакомом языке, Си подходит как нельзя лучше из-за своей простоты. Для начала отрываем от него фазу лексического анализа. После парсинга у нас есть абстрактное синтаксическое дерево и таблица символов. Обычные компиляторы стараются оптимизировать дерево, а потом уже и промежуточное представление. И не существует "идеальной оптимизации". No free lunch. А вирусный компилятор может и оптимизировать код, и делать его менее оптимальным. Зеркальные правила для AST вида (* c (+ a b)) :- (+ (* c a) (*с b)) - дистрибутивный закон умножения в LISP-подобной записи, относятся к типу 0, в иерархии Хомского, и для распознавания языка понадобится машина Тьюринга, которая как мы помним, может и не остановится, а значит что детектирование такого вируса - алгоритмически неразрешимая задача.
Лисповая запись дерева выражений появилась тут не случайно, как гласит десятое правило программирования Гринспуна: Любая достаточно сложная программа на Си или Фортране содержит написанную по случаю, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. Всё потому что Лисп очень близок к лямбла-исчислению, а значит и к определению "алгоритма" как такового. Постепенно в вирусном языке можно отказаться не только от лексического, но и от синтаксического анализа. И даже от хранения синтаксического дерева в данных (его можно заменить на декомпиляцию, аннотированную типами в "сложных" местах). А поверх добавляются не просто правила для работы с деревом, а правила изменяющие правила. Мета-язык, язык следующего порядка. Где-то рядом маячит теорема о неполноте.
Turtles all the way up.
P.S. И чем вместо этого приходится заниматься? Я вот просто не понимаю, у меня в голове не помещается: мир необыкновенно сложен, познаваем, а следовательно и интересен, и пока космические корабли Маска бороздят просторы веннской оперы, какие-то прости господи, ушлепки, которые в слове "хуй" делают по три ошибки - строят народную, сука, республику. Про мусоров и лживых вороватых державников я просто молчу, иногда они хуже сепаров. Блядь. Да, приходи ж к нам, мать Эбола, кого хочешь выбирай!
Лисповая запись дерева выражений появилась тут не случайно, как гласит десятое правило программирования Гринспуна: Любая достаточно сложная программа на Си или Фортране содержит написанную по случаю, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. Всё потому что Лисп очень близок к лямбла-исчислению, а значит и к определению "алгоритма" как такового. Постепенно в вирусном языке можно отказаться не только от лексического, но и от синтаксического анализа. И даже от хранения синтаксического дерева в данных (его можно заменить на декомпиляцию, аннотированную типами в "сложных" местах). А поверх добавляются не просто правила для работы с деревом, а правила изменяющие правила. Мета-язык, язык следующего порядка. Где-то рядом маячит теорема о неполноте.
Turtles all the way up.
P.S. И чем вместо этого приходится заниматься? Я вот просто не понимаю, у меня в голове не помещается: мир необыкновенно сложен, познаваем, а следовательно и интересен, и пока космические корабли Маска бороздят просторы веннской оперы, какие-то прости господи, ушлепки, которые в слове "хуй" делают по три ошибки - строят народную, сука, республику. Про мусоров и лживых вороватых державников я просто молчу, иногда они хуже сепаров. Блядь. Да, приходи ж к нам, мать Эбола, кого хочешь выбирай!
В феврале 2016, RUH8 уже был, а UCA ещё нет, мне в личку на форуме VX Heaven написал пользователь с ником Авраам (даже, если бы имена не были бы выдуманными, они бы всё равно не имеют никакого значения) и настойчиво предложил встретиться лично, что довольно не типично для хакеров вобще и для американских хакеров в частности. Но чем-то он меня заинтриговал, хотя письма были настолько же расплывчаты, как и пакостная киевская погода.
Проходит месяц и "Авраам" пишет, что прилетает через пару дней, местный телефонный номер он каким-то образом приобрёл заблаговременно, видимо у них там на юге у наших мобильных операторов дела идут неплохо, и где-нибудь в Канзасе или Неваде украинскую симку можно купить на любой заправке.
Встречаемся на Майдане, накрапывает отвратительно мелкий холодный дождик. "Авраам", превратившийся в подтянутого, по-американски приветливого парня неопределенного возраста по имени Джек, заводит разговоры в лениво-доброжелательной манере о своих публикациях в 2600 (что-то типа российского "Хакера", только левее и лет на пятнадцать старше), на темы столь же туманные как и цель его визита. Легенда на отъебись просто.
Проехали остановочку до бара, где уже окопался Tim, гость вместо пива заказывает себе колу, ссылаясь на то, что он завязавший алкоголик и теперь - ни капли в рот, ни сантиметра в жопу. И, по-прежнему, ловко уворачивается от любых технических деталей - вроде бы и хакер, и системный администратор, и даже немного вирмейкер, но на самом деле он пролетел через полмира, чтобы показать кусочек некой "очень важной информации".
Достаёт ноутбук, и используя его в качестве планшетки для письма, начинает писать в блокноте обычной ручкой, что неким образом к нему попал массив данных одного из контракторов американского министерства обороны. Охуенно крупного. А уж секретная разработка-то, как цвет трусов Гувера, потому-то и приходится разговаривать путём переписки на бумаге. И непременно в Украине, самая что ни на есть подходящая страна.
Лежит инфа прямо вот в этом самом маке, зашифрованном в три слоя PGP, чтобы американская военщина до своих собственных wrongdoing (сложное слово, где-то между ошибкой и преступлением) никак не добралась. Такой себе "Сноуден"-разоблачитель. И что, и с Vice он уже договорился, но в начале - к нам, а то мало ли, вдруг журналисты в политике хуже разбираются чем безопасники? Но нас-то не информация интересует, а причины.
Мы ему буквально перекрестный допрос устроили, силясь понять его мотивацию. Зачем нам собственно вмешиваться не в свои дела и вштыривать одного из основных союзников Украины? И пытались показать, что в Украине левые заезды в стиле анонимус, не очень популярны, и что для такого есть Викиликс, Беллинги, а мы тут при чем? Одним словом, посидели, поговорили и посоветовали Джеку упаковать свой ноутбучек и прогуляться, посмотреть на обгоревшую российскую военную технику, для лучшего понимания момента.
Фейсбук, сука такая, потом подтянул профиль Джека в раздел "вы можете их знать". Такой же фейковый как и всё остальное. Или может настоящий, но не совсем. Бывает и так. Ясное ж дело, приезжаете на другой конец планеты, берёте симку страны третьего мира и сразу привязываете к ней свой основной аккаунт. Все так делают. У этой истории есть мораль, во-первых, АНБ занимается тем, что втыкается в розетку, а ЦРУ - тем что шевелится, во-вторых, культурнейшая нация - не чета нашим дуболомам, со спецназом и одной извилиной на весь департамент.
Проходит месяц и "Авраам" пишет, что прилетает через пару дней, местный телефонный номер он каким-то образом приобрёл заблаговременно, видимо у них там на юге у наших мобильных операторов дела идут неплохо, и где-нибудь в Канзасе или Неваде украинскую симку можно купить на любой заправке.
Встречаемся на Майдане, накрапывает отвратительно мелкий холодный дождик. "Авраам", превратившийся в подтянутого, по-американски приветливого парня неопределенного возраста по имени Джек, заводит разговоры в лениво-доброжелательной манере о своих публикациях в 2600 (что-то типа российского "Хакера", только левее и лет на пятнадцать старше), на темы столь же туманные как и цель его визита. Легенда на отъебись просто.
Проехали остановочку до бара, где уже окопался Tim, гость вместо пива заказывает себе колу, ссылаясь на то, что он завязавший алкоголик и теперь - ни капли в рот, ни сантиметра в жопу. И, по-прежнему, ловко уворачивается от любых технических деталей - вроде бы и хакер, и системный администратор, и даже немного вирмейкер, но на самом деле он пролетел через полмира, чтобы показать кусочек некой "очень важной информации".
Достаёт ноутбук, и используя его в качестве планшетки для письма, начинает писать в блокноте обычной ручкой, что неким образом к нему попал массив данных одного из контракторов американского министерства обороны. Охуенно крупного. А уж секретная разработка-то, как цвет трусов Гувера, потому-то и приходится разговаривать путём переписки на бумаге. И непременно в Украине, самая что ни на есть подходящая страна.
Лежит инфа прямо вот в этом самом маке, зашифрованном в три слоя PGP, чтобы американская военщина до своих собственных wrongdoing (сложное слово, где-то между ошибкой и преступлением) никак не добралась. Такой себе "Сноуден"-разоблачитель. И что, и с Vice он уже договорился, но в начале - к нам, а то мало ли, вдруг журналисты в политике хуже разбираются чем безопасники? Но нас-то не информация интересует, а причины.
Мы ему буквально перекрестный допрос устроили, силясь понять его мотивацию. Зачем нам собственно вмешиваться не в свои дела и вштыривать одного из основных союзников Украины? И пытались показать, что в Украине левые заезды в стиле анонимус, не очень популярны, и что для такого есть Викиликс, Беллинги, а мы тут при чем? Одним словом, посидели, поговорили и посоветовали Джеку упаковать свой ноутбучек и прогуляться, посмотреть на обгоревшую российскую военную технику, для лучшего понимания момента.
Фейсбук, сука такая, потом подтянул профиль Джека в раздел "вы можете их знать". Такой же фейковый как и всё остальное. Или может настоящий, но не совсем. Бывает и так. Ясное ж дело, приезжаете на другой конец планеты, берёте симку страны третьего мира и сразу привязываете к ней свой основной аккаунт. Все так делают. У этой истории есть мораль, во-первых, АНБ занимается тем, что втыкается в розетку, а ЦРУ - тем что шевелится, во-вторых, культурнейшая нация - не чета нашим дуболомам, со спецназом и одной извилиной на весь департамент.
Давайте разбираться, откуда берутся данные, как они утекают и что делать в этой связи, а то у меня личка уже просто раскалилась от сообщений. Докомпьютерные системы работали медленно, но со своеобразным изяществом, и были документ-ориентированными. У вас был документ (например паспорт), устанавливающий факты "вас зовут так-то и вы гражданин Украины". Копия информации хранилась в архиве, в паспортном столе. До неё не так-то легко было добраться.
"База" была децентрализованная и доступ к ней жестко контролировался. За подделку документов или внесение недостоверной информации карали не то, чтобы сильно жестоко, но что более важно - неотвратимо. Риск попасться для чиновника был велик. И даже полицейские вынуждены были рассылать запросы, чтобы получить нужную информацию. В запросе указывалась причина и он оставлял за собой бумажный след. Что позволяло быстрее находить виновных, а значит снижало риск злоупотреблений и утечек.
Затем различные министерства и ведомства ударились в реестроманию и начали собирать данные централизовано. Ревностно охраняя монопольный доступ к "своим данным" от конкурентов. Что повышало стоимость данных и незаменимость чиновника для "порешать". Где-то контроль за тем кто и зачем обращается есть, а где-то нету. И нечистые на руку чиновники тут же принялись базы выносить и продавать на Петровке. Иногда их конечно на этом ловят, но редко.
А минцифра решила сделать следующий шаг, но почему-то не в ту сторону. Они стремятся объединить все дырявые реестры в одну гигантскую мега-базу. И если уж она потечёт (а от чего бы ей спрашивается не течь?), то ущерб будет колоссальный. И пытаются наладить автоматический документооборот, таким интересным способом, что крайних потом будет просто не найти. Потому их затеи порочны, не смотря на наличие или отсутствие в Дие дыр. Тут организационная дыра, а не техническая.
Потекло ли в этот раз именно из "Дии"? А черт его знает. Может быть потекло из самих реестров, путём старого доброго подкупа. А может и из "Дии", чтобы не говорила минцифра, у серверной части Дии есть прямой доступ к реестрам, и уже не важно хранится ли что-то на серверах или нет. Наличие или отсутствие у Дии базы ничего принципиально не меняет.
И небольшое дополнение про документы и реестры. У некоторых из вас есть ID-карта, которая вполне защищенный документ (которому правда не хватает графы "кем выдан" и других важных особенностей PKI здорового человека). И тогда реестр просто не нужен. Первичные документы, на случай утери карточки, должны быть спрятаны за семью засовами от ментов же. А ментам достаточно проверить подлинность документа, а в базу заносить отметки, сопоставленные с номером.
Бывают реестры, по китайскому образцу - тогда вам не нужен документ и достаточно записать номер прав или паспорта на бумажке, сказать его полицейскому, и он подтянет все данные на планшет из центральной базы (и каждое обращение к ней, должно быть подписано личной подписью мента, не считая дополнительных мер безопасности, чтобы этого мента потом расстреляли на стадионе за "я только посмотреть").
"Дия" - это и не документ и не реестр, а противоестественный гибрид ужа с ежом, данные сваленные в кучу посреди дороги.
Бороться с утечками можно и нужно очень простым способом - персональной ответственностью чиновника за те данные, которые ему доверили. "Если что-то вытечет, то ты сядешь". Только таким способом можно навести порядок. Их туда специально наняли, чтобы они данные охраняли, а не носили продавать. Как-то так.
"База" была децентрализованная и доступ к ней жестко контролировался. За подделку документов или внесение недостоверной информации карали не то, чтобы сильно жестоко, но что более важно - неотвратимо. Риск попасться для чиновника был велик. И даже полицейские вынуждены были рассылать запросы, чтобы получить нужную информацию. В запросе указывалась причина и он оставлял за собой бумажный след. Что позволяло быстрее находить виновных, а значит снижало риск злоупотреблений и утечек.
Затем различные министерства и ведомства ударились в реестроманию и начали собирать данные централизовано. Ревностно охраняя монопольный доступ к "своим данным" от конкурентов. Что повышало стоимость данных и незаменимость чиновника для "порешать". Где-то контроль за тем кто и зачем обращается есть, а где-то нету. И нечистые на руку чиновники тут же принялись базы выносить и продавать на Петровке. Иногда их конечно на этом ловят, но редко.
А минцифра решила сделать следующий шаг, но почему-то не в ту сторону. Они стремятся объединить все дырявые реестры в одну гигантскую мега-базу. И если уж она потечёт (а от чего бы ей спрашивается не течь?), то ущерб будет колоссальный. И пытаются наладить автоматический документооборот, таким интересным способом, что крайних потом будет просто не найти. Потому их затеи порочны, не смотря на наличие или отсутствие в Дие дыр. Тут организационная дыра, а не техническая.
Потекло ли в этот раз именно из "Дии"? А черт его знает. Может быть потекло из самих реестров, путём старого доброго подкупа. А может и из "Дии", чтобы не говорила минцифра, у серверной части Дии есть прямой доступ к реестрам, и уже не важно хранится ли что-то на серверах или нет. Наличие или отсутствие у Дии базы ничего принципиально не меняет.
И небольшое дополнение про документы и реестры. У некоторых из вас есть ID-карта, которая вполне защищенный документ (которому правда не хватает графы "кем выдан" и других важных особенностей PKI здорового человека). И тогда реестр просто не нужен. Первичные документы, на случай утери карточки, должны быть спрятаны за семью засовами от ментов же. А ментам достаточно проверить подлинность документа, а в базу заносить отметки, сопоставленные с номером.
Бывают реестры, по китайскому образцу - тогда вам не нужен документ и достаточно записать номер прав или паспорта на бумажке, сказать его полицейскому, и он подтянет все данные на планшет из центральной базы (и каждое обращение к ней, должно быть подписано личной подписью мента, не считая дополнительных мер безопасности, чтобы этого мента потом расстреляли на стадионе за "я только посмотреть").
"Дия" - это и не документ и не реестр, а противоестественный гибрид ужа с ежом, данные сваленные в кучу посреди дороги.
Бороться с утечками можно и нужно очень простым способом - персональной ответственностью чиновника за те данные, которые ему доверили. "Если что-то вытечет, то ты сядешь". Только таким способом можно навести порядок. Их туда специально наняли, чтобы они данные охраняли, а не носили продавать. Как-то так.
Не перестаю удивляться тому почти маниакальному упорству, с которым узеленского рвутся сломать избирательную систему в Украине. Он и сам об этом говорил в своем видосике (кстати, по-вьетнамски годовщина называется "зё"), и Федоров уже пытается приспособить к выбором свою злодию. Я понимаю, что у них последняя прочитанная книга - журнал "Мурзилка" за 1985 год, но могли бы хотя бы в 71 статью Конституции заглянуть, не говоря уж про Википедию.
Я уже как-то фантазировал на тему, как можно было бы попытаться провести "выборы на блокчейне", если бы задача была поставленна именно так и не иначе, и пришел к довольно очевидному выводу о том, что блокчейн - пятая нога https://bit.ly/2Z54M5s Теперь попытаемся представить, как могла бы работать система удаленного электронного голосования, например для тех, кто физически не может попасть на участок в нужный день.
Точно так же как и бюллетени, на бумаге печатаются случайные ключи, например в виде QR-кодов. Распределение ключей в онлайне, задача с моей точки зрения не решаемая. Приходите на участок, показываете паспорт, расписываетесь в журнале и выбираете себе запечатанный конверт. И тут же, в присутствии наблюдателей распечатываете (это нужно, чтобы предотвратить скупку голосов, у скупщика не должно быть доказательств, что он владеет бюллетенем единолично). И уходите.
Потом, в любой понравившийся день, приходите еще раз и регистрируете свой ключ в ЦИК. Да, ещё раз ногами, чтобы сложнее было сопоставить ключ и избирателя, и предотвратить массовую регистрацию "левых ключей". Перед выборами регистрация закрывается, и есть возможность проверить сколько бумажных е-бюллетеней осталось, соответствует ли их количество журналам регистрации и бьётся ли с количеством зарегистрированных ключей. Восстановить потерянный бюллетень нельзя. Он анонимен. Вы просто не сможете доказать, что он утрачен безвозвратно. И если вы получили е-бюллетень, то обычным способом вы проголосовать уже не сможете, что бьет по принципу равного участия в выборах.
И так, наступил день "В". Вы выбираете кандидата из списка, дописываете к нему большое случайное число, шифруете своим анонимным ключом, и отправляете через микс-сеть (чтобы скрыть своё положение в сети) на сервер ЦИК. Должно использоваться исключительно deniable шифрование, потому что если у вас есть подтверждение ЦИК, то вы раскрываете свой nonce (то самое случайное число) скупщику и он сможет проверить, что вы проголосовали "как надо". ЦИК подтверждений не даёт. Проверить, что голос учтен правильно, даже с помощью доказательств с нулевым разглашением тоже нельзя. Потому что это то самое подтверждение. (А вот с обычными бюллетенями ZKP может и получилось бы провернуть)
Голосовать можно сколько угодно раз. Естественно, так как в ход идут микс-сети со своими протоколами и довольно сложные вычисления, то такая система не является software independent по Ривесту. Убедить среднестатистического читателя журнала "Мурзилка" в том, что его не обманывают практически невозможно.
Сам факт того, что министерство со своим мутным софтом, как часть исполнительной власти вмешивается в выборный процесс уже грубейшее нарушение основов демократических выборов. Конфликт интересов в чистом, незамутненном виде. При этом, чтобы сохранить (частично) требования к идентификации и анонимности, пришлось пожертвовать проверяемостью. Гарантировать правильность подсчета голосов, по-прежнему, нельзя.
Получившаяся система оказалась почему-то ещё хуже существующей. Я бы посоветовал цифровизаторам свернуть свои безбумажные фантазии в трубочку и засунуть себе в специально предназначенное для них место. В спокойные времена, в стране с устоявшейся демократией что-то подобное можно было бы использовать с очень большими предосторожностями. Но не у нас.
Я уже как-то фантазировал на тему, как можно было бы попытаться провести "выборы на блокчейне", если бы задача была поставленна именно так и не иначе, и пришел к довольно очевидному выводу о том, что блокчейн - пятая нога https://bit.ly/2Z54M5s Теперь попытаемся представить, как могла бы работать система удаленного электронного голосования, например для тех, кто физически не может попасть на участок в нужный день.
Точно так же как и бюллетени, на бумаге печатаются случайные ключи, например в виде QR-кодов. Распределение ключей в онлайне, задача с моей точки зрения не решаемая. Приходите на участок, показываете паспорт, расписываетесь в журнале и выбираете себе запечатанный конверт. И тут же, в присутствии наблюдателей распечатываете (это нужно, чтобы предотвратить скупку голосов, у скупщика не должно быть доказательств, что он владеет бюллетенем единолично). И уходите.
Потом, в любой понравившийся день, приходите еще раз и регистрируете свой ключ в ЦИК. Да, ещё раз ногами, чтобы сложнее было сопоставить ключ и избирателя, и предотвратить массовую регистрацию "левых ключей". Перед выборами регистрация закрывается, и есть возможность проверить сколько бумажных е-бюллетеней осталось, соответствует ли их количество журналам регистрации и бьётся ли с количеством зарегистрированных ключей. Восстановить потерянный бюллетень нельзя. Он анонимен. Вы просто не сможете доказать, что он утрачен безвозвратно. И если вы получили е-бюллетень, то обычным способом вы проголосовать уже не сможете, что бьет по принципу равного участия в выборах.
И так, наступил день "В". Вы выбираете кандидата из списка, дописываете к нему большое случайное число, шифруете своим анонимным ключом, и отправляете через микс-сеть (чтобы скрыть своё положение в сети) на сервер ЦИК. Должно использоваться исключительно deniable шифрование, потому что если у вас есть подтверждение ЦИК, то вы раскрываете свой nonce (то самое случайное число) скупщику и он сможет проверить, что вы проголосовали "как надо". ЦИК подтверждений не даёт. Проверить, что голос учтен правильно, даже с помощью доказательств с нулевым разглашением тоже нельзя. Потому что это то самое подтверждение. (А вот с обычными бюллетенями ZKP может и получилось бы провернуть)
Голосовать можно сколько угодно раз. Естественно, так как в ход идут микс-сети со своими протоколами и довольно сложные вычисления, то такая система не является software independent по Ривесту. Убедить среднестатистического читателя журнала "Мурзилка" в том, что его не обманывают практически невозможно.
Сам факт того, что министерство со своим мутным софтом, как часть исполнительной власти вмешивается в выборный процесс уже грубейшее нарушение основов демократических выборов. Конфликт интересов в чистом, незамутненном виде. При этом, чтобы сохранить (частично) требования к идентификации и анонимности, пришлось пожертвовать проверяемостью. Гарантировать правильность подсчета голосов, по-прежнему, нельзя.
Получившаяся система оказалась почему-то ещё хуже существующей. Я бы посоветовал цифровизаторам свернуть свои безбумажные фантазии в трубочку и засунуть себе в специально предназначенное для них место. В спокойные времена, в стране с устоявшейся демократией что-то подобное можно было бы использовать с очень большими предосторожностями. Но не у нас.
А что можно сделать с избирательной системой? Помимо видеонаблюдения, сканеров бюллетеней и прочих е-штучек? Очень пригодится статистика и аудиты снижения риска (risk limiting audit), вот один из возможных примеров подобной проверки https://bit.ly/3dGWdSz В принципе, думаю можно было бы добавить проверяемость (counted as cast) к существующей системе, но не вместо неё. А ещё, я бы не торопился, это не та технология, где экспериментировать можно безнаказанно, в случае ошибки, придётся проводить повторное голосование, если failed state, резня и хаос не начнутся раньше.
Сегодня The Security Service of Ukraine вместе с более скромной Кіберполіція под загадочную и тревожную музыку (и процессуальный акомпанимент прокуратуры) отчиталась о поимке мега-хакера, "крупнейшая утечка в истории" и вот это вот все https://bit.ly/2WKpciE Посмотрите на картинку, интересная оптическая иллюзия. Вам кажется, что хакер Нео вершит чОрные дела в симулякре "даркнета". На самом деле, появись Нео на настоящем хакерском форуме, то его бы забанили через несколько дней, как и Саникса. Почему так? И почему СБ Украины иногда называют "службой брелков"?
Дело в том, что черный рынок устроен несколько сложнее (и немного скучнее), чем показывают в фильмах. Он во многом похож на реальный мир, там есть свои платежные системы, свои обменные пункты, репутация, профессиональные и как правило честные посредники ("гаранты"), страхование сделок ("депозиты"), и быстрый, независимый и справедливый суд ("арбитраж"). Иногда даже, небольшие и справедливые налоги. Я уже слышу как вы вздыхаете. Иначе рынок не работает. Любой. Есть свои правила, их немного, потому что рынок не страдает регуляцией в погоне за мифическим "качеством" и "безопасностью" - называется личная ответственность.
Человек, который выдает публичный материал за товар или выдаёт чужой товар за свой называется "барыга", а тот кто продаёт то чего у него на самом деле нет - "кидала". И то, и другое немедленно карается как администрацией, так и соборно. Саникс из Ивано-Франковска как раз и есть такой барыга, он выкупал базы перефасовывал их и продавал за мелкий прайс. В паблик обычно уходит или отработанный шлак или огрызки от взрослых хакеров, набивающих себе репу. О чем он сам честно и рассказал журналистам BBC https://bbc.in/2XeBaAb Когда он упомняул "микрокредит" (на покупку товара) и игру в танчики я уже смеялся в голос.
Интерес такие базы представляют в основном для безопасников вроде Троя Ханта. (Отсюда и хайп) К крупным торговцам они и близко подобраться не могут, а компиляции и сборники дают представление о том, что происходит внутри, и помогают безопасникам оценивать угрозы. Очень сомневаюсь, что по предъявленным статьям получится что-то доказать. Саникс возможно виновен (если это вобще он), но это пограничный раздел уголовного кодекса. И ничего особенно секретного в этом посте нет. Если бы Служба Барыг Украины читала те статьи, которые появляются в видео, то они бы об этом знали.
Особенно меня насмешили предложения взять Саникса на работу или воспользоваться его опытом или базами. Я даже перестал икать и начал каким-то совсем уж неприличным образом похрюкивать. Как будто бы в Службе своих барыг не хватает.
Дело в том, что черный рынок устроен несколько сложнее (и немного скучнее), чем показывают в фильмах. Он во многом похож на реальный мир, там есть свои платежные системы, свои обменные пункты, репутация, профессиональные и как правило честные посредники ("гаранты"), страхование сделок ("депозиты"), и быстрый, независимый и справедливый суд ("арбитраж"). Иногда даже, небольшие и справедливые налоги. Я уже слышу как вы вздыхаете. Иначе рынок не работает. Любой. Есть свои правила, их немного, потому что рынок не страдает регуляцией в погоне за мифическим "качеством" и "безопасностью" - называется личная ответственность.
Человек, который выдает публичный материал за товар или выдаёт чужой товар за свой называется "барыга", а тот кто продаёт то чего у него на самом деле нет - "кидала". И то, и другое немедленно карается как администрацией, так и соборно. Саникс из Ивано-Франковска как раз и есть такой барыга, он выкупал базы перефасовывал их и продавал за мелкий прайс. В паблик обычно уходит или отработанный шлак или огрызки от взрослых хакеров, набивающих себе репу. О чем он сам честно и рассказал журналистам BBC https://bbc.in/2XeBaAb Когда он упомняул "микрокредит" (на покупку товара) и игру в танчики я уже смеялся в голос.
Интерес такие базы представляют в основном для безопасников вроде Троя Ханта. (Отсюда и хайп) К крупным торговцам они и близко подобраться не могут, а компиляции и сборники дают представление о том, что происходит внутри, и помогают безопасникам оценивать угрозы. Очень сомневаюсь, что по предъявленным статьям получится что-то доказать. Саникс возможно виновен (если это вобще он), но это пограничный раздел уголовного кодекса. И ничего особенно секретного в этом посте нет. Если бы Служба Барыг Украины читала те статьи, которые появляются в видео, то они бы об этом знали.
Особенно меня насмешили предложения взять Саникса на работу или воспользоваться его опытом или базами. Я даже перестал икать и начал каким-то совсем уж неприличным образом похрюкивать. Как будто бы в Службе своих барыг не хватает.
На днях прокурор Барр в очередной раз наехал на Apple, за то что компания якобы придерживается "двойных стандартов" и не хочет помогать министерству юстиции шпионить за пользователями. Противостояние, его называют криптовойнами, началось конечно не вчера, но этой весной произошел очередной виток.
Начиная со второй мировой войны для шифрования использовались роторные машины вроде "Энигмы", и пользовались ими в основном шпионы, дипломаты и военные. И так всё шло ни шатко, ни валко до семидесятых годов, когда с одной стороны необходимость в шифровании появилась у бизнеса, а с другой, появились новые способы шифрования, которые в том или ином виде используются до сих пор - DES, DH, RSA.
Когда мне рассказывают про величие советской (а теперь уже украинской) науки, то я сразу вспоминаю как Советы спиздили у американцев DES и сделали из него ГОСТ. Не сумев разобраться с генерацией S-боксов (важная часть цепей Фейстеля, от которой во многом зависит устойчивость шифра) - увеличили количество раундов, длину ключа, и сделали секретные S-боксы; "два раза будет надежнее", очень боялись что американцы знают что-то такое об этом шифре чего не знает Союз.
Удивительно, но боялись зря. Через двадцать лет после принятия стандарта, выяснилось что АНБ спроектировала S-боксы так, чтобы сопротивляться атакам, о которых в 1975 году никто не знал. А чтобы насолить советам - ввели экспортные ограничения, и поставка любого товара "двойного назначения", включая криптографию, приравнивалась к торговле оружием. Со всеми вытекающими.
Для бизнес-пользователей ключ урезали до 56 бит. Изначально DES должен был быть 128-битным, то что 56 бит недостаточно все прекрасно понимали уже тогда. С начала 80-х информация о современной криптографии становилась всё более доступной (в первых юниксах использовался "роторный" шифр), они становились всё дешевле и дешевле. А ненадежность стандарта DES становилась всё более угрожающей. Экспортный контроль продолжал действовать.
В начале 1990-х началась началась первая криптовойна. Американские власти предложили сделку. Компромисс выглядел следующим образом. Чекисты разрешают пользоваться более длинными ключами шифрования, в обмен на то, что часть ключа будет сохранятся для правоохранительных надобностей, чтобы спецслужбы не оглохли ("going dark"). Для телефонов АНБ сделала чип Clipper.
AT&T согласилась сделать телефоны с бэкдором только в обмен на обещание, что правительство купит большую партию шифро-телефонов по $1000 за штуку. (Именно так выглядит частно-государственное партнерство, а не силовое давление, взятки, секретные закладки и вот это вот всё к чему мы привыкли.
АНБшники пришли в Bell labs, и так как они прекрасно понимали, что сопротивление гражданского общества будет беспощадным, то они попытались убедить инженеров Bell в том, что предложенная схема безопасна. Рассказали все несекретные детали о протоколе и шифре, предоставили тестовые устройства, разрешили обсудить разработку в Интернете, и опубликовать результаты исследования. Впечатляющий пример открытости для конторы, чье существование долго отрицалось и её называли No Such Agency ("Нет такого агентства")
Из объяснений Мэту Блейзу, исследователю Белл стало понятно, что вместе с зашифрованными данными передаётся специальное поле LEAF (Law enforcement access field - поле доступа для правоохранительных органов). В нем закодирован серийный номер устройства, сессионный ключ и контрольная сумма. Всё в зашифрованном виде. Без LEAF невозможно ничего передать, чип откажется расшифровывать данные.
Идея в следующем - менты получают ордер, записывают зашифрованную сессию, достают из неё LEAF, расшифровывают его с помощью "семейного ключа", общего для всех устройств, достают серийник, с ордером получают из двух разных агентств (чтобы не было злоупотреблений), две половинки ключа устройства, и с его помощью расшифровывают сессионный ключ и расшифровывают данные.
Начиная со второй мировой войны для шифрования использовались роторные машины вроде "Энигмы", и пользовались ими в основном шпионы, дипломаты и военные. И так всё шло ни шатко, ни валко до семидесятых годов, когда с одной стороны необходимость в шифровании появилась у бизнеса, а с другой, появились новые способы шифрования, которые в том или ином виде используются до сих пор - DES, DH, RSA.
Когда мне рассказывают про величие советской (а теперь уже украинской) науки, то я сразу вспоминаю как Советы спиздили у американцев DES и сделали из него ГОСТ. Не сумев разобраться с генерацией S-боксов (важная часть цепей Фейстеля, от которой во многом зависит устойчивость шифра) - увеличили количество раундов, длину ключа, и сделали секретные S-боксы; "два раза будет надежнее", очень боялись что американцы знают что-то такое об этом шифре чего не знает Союз.
Удивительно, но боялись зря. Через двадцать лет после принятия стандарта, выяснилось что АНБ спроектировала S-боксы так, чтобы сопротивляться атакам, о которых в 1975 году никто не знал. А чтобы насолить советам - ввели экспортные ограничения, и поставка любого товара "двойного назначения", включая криптографию, приравнивалась к торговле оружием. Со всеми вытекающими.
Для бизнес-пользователей ключ урезали до 56 бит. Изначально DES должен был быть 128-битным, то что 56 бит недостаточно все прекрасно понимали уже тогда. С начала 80-х информация о современной криптографии становилась всё более доступной (в первых юниксах использовался "роторный" шифр), они становились всё дешевле и дешевле. А ненадежность стандарта DES становилась всё более угрожающей. Экспортный контроль продолжал действовать.
В начале 1990-х началась началась первая криптовойна. Американские власти предложили сделку. Компромисс выглядел следующим образом. Чекисты разрешают пользоваться более длинными ключами шифрования, в обмен на то, что часть ключа будет сохранятся для правоохранительных надобностей, чтобы спецслужбы не оглохли ("going dark"). Для телефонов АНБ сделала чип Clipper.
AT&T согласилась сделать телефоны с бэкдором только в обмен на обещание, что правительство купит большую партию шифро-телефонов по $1000 за штуку. (Именно так выглядит частно-государственное партнерство, а не силовое давление, взятки, секретные закладки и вот это вот всё к чему мы привыкли.
АНБшники пришли в Bell labs, и так как они прекрасно понимали, что сопротивление гражданского общества будет беспощадным, то они попытались убедить инженеров Bell в том, что предложенная схема безопасна. Рассказали все несекретные детали о протоколе и шифре, предоставили тестовые устройства, разрешили обсудить разработку в Интернете, и опубликовать результаты исследования. Впечатляющий пример открытости для конторы, чье существование долго отрицалось и её называли No Such Agency ("Нет такого агентства")
Из объяснений Мэту Блейзу, исследователю Белл стало понятно, что вместе с зашифрованными данными передаётся специальное поле LEAF (Law enforcement access field - поле доступа для правоохранительных органов). В нем закодирован серийный номер устройства, сессионный ключ и контрольная сумма. Всё в зашифрованном виде. Без LEAF невозможно ничего передать, чип откажется расшифровывать данные.
Идея в следующем - менты получают ордер, записывают зашифрованную сессию, достают из неё LEAF, расшифровывают его с помощью "семейного ключа", общего для всех устройств, достают серийник, с ордером получают из двух разных агентств (чтобы не было злоупотреблений), две половинки ключа устройства, и с его помощью расшифровывают сессионный ключ и расшифровывают данные.
Блейз обратил внимание на то, что корректность поля LEAF не может зависеть от зашифрованного сессионного ключа, и от серийного номера тоже. Вторая сторона не знает ни серийника, ни секретного ключа удаленного устройства. Значит только контрольная сумма из двух байт, что даёт 2^16 вариантов. А значит, если поверх LEAF записать случайное 128 битное значение, то с вероятностью 1 / 65536 устройство его примет. И прослушка становится бесполезной.
И это без стачивания чипов (что очень любили делать советы), без информации о шифре! Даже без всякой оптимизации, на доисторической технике Блейзу понадобилось 42 минуты на подбор. Для телефонного звонка многовато, а вот для базы данных - вполне. Не говоря уже о том, что идея, что потенциальные преступники будут пользоваться государственным и довольно дорогим чипом, слишком уж оптимистическая.
Про злоключения Фила Циммермана рассказывают много и часто, отмечу только что в конце концов ему удалось опубликовать исходный код PGP в виде книги. Книги накрыты первой поправкой и экспортный контроль на них не распространяется. Клиппер-чип с треском провалился (АНБ в 1998 году опубликовала шифр для этого чипа, им оказался Skipjack, очень редкий случай когда контора что-то публикует), а дешевое программное шифрование стало доступно всем.
Так закончилось первая криптовойна.
(продолжение следует: золотая эра шпионажа, Сноуден, Going dark, Section 230, CALEA II, EARN IT, евросоюзное говноедство и сложности аппликативного переноса).
И это без стачивания чипов (что очень любили делать советы), без информации о шифре! Даже без всякой оптимизации, на доисторической технике Блейзу понадобилось 42 минуты на подбор. Для телефонного звонка многовато, а вот для базы данных - вполне. Не говоря уже о том, что идея, что потенциальные преступники будут пользоваться государственным и довольно дорогим чипом, слишком уж оптимистическая.
Про злоключения Фила Циммермана рассказывают много и часто, отмечу только что в конце концов ему удалось опубликовать исходный код PGP в виде книги. Книги накрыты первой поправкой и экспортный контроль на них не распространяется. Клиппер-чип с треском провалился (АНБ в 1998 году опубликовала шифр для этого чипа, им оказался Skipjack, очень редкий случай когда контора что-то публикует), а дешевое программное шифрование стало доступно всем.
Так закончилось первая криптовойна.
(продолжение следует: золотая эра шпионажа, Сноуден, Going dark, Section 230, CALEA II, EARN IT, евросоюзное говноедство и сложности аппликативного переноса).
Вспомнил занятную историю, которая в очередной раз напоминает о том, что если вы ни от кого не прячетесь, то совершенно непонятно, кто именно за вами следит и зачем. Самые яростные стычки происходят не между спецслужбами (частенько у них всё заканчивается лютым скандалом из-за их беспредельной наглости), а между хакерами. После очередного наброса в нашу сторону, включая специально сделанные сайты для помоев - всё как мы любим, меня заинтересовал Izee из Electrical Ordered Freedom, группа существовала с 2006 по 2011 год. Я немного порылся у него в почте и нашел письмо от абсолютно фантастического типа по имени Павел Ильин.
История была громкая. в 2000 году ФСБ заявила о том, что контрразведка арестовала литоовского хакера-шпиона в Калининграде, его обвинили в работе на CIA, MI-6 и VSD. Путину лично докладывали об успехах, в прессу организовали контролируемую утечку. По версии ФСБ он должен был втереться в доверие к чекистам и стать двойным агентом, чтобы затем выманить фейсов в Польшу. Литва вначале всё отрицала, но потом признали, что Ильин консультировал отдельных сотрудников. И его отпускают!
Затем он пытался получить политическое убежище в Швеции, но после нескольких месяцев в лагере для беженцев его вернули в Литву. Снова он появился в 2003 году, когда его обвинил в вымогательстве банк SEB, после чего он сбегает в Россию, куда ему якобы запрещен въезд после шпионского скандала. Потом еще будут обвинения в прослушке высокопоставленных чиновников и наркоту. Несколько лет назад его вытащили из Британии международным ордером. Я уже даже не знаю на какую из разведок Ильин работал, когда ему написал Рамиз / Izee.
А вот что мне особенно нравится, так это способ, с помощью которого удалось добраться до почты. Я нашел резервный ящик на Yahoo, и у Yahoo есть неприятная особенность - они не только удаляли ящики из-за неактивности, но и позволяли их регистрировать повторно. Дальше осталось только восстановить доступ к основному аккаунту, чтобы обзавестись сувениром на память https://pastebin.com/9jKTJCHS
История была громкая. в 2000 году ФСБ заявила о том, что контрразведка арестовала литоовского хакера-шпиона в Калининграде, его обвинили в работе на CIA, MI-6 и VSD. Путину лично докладывали об успехах, в прессу организовали контролируемую утечку. По версии ФСБ он должен был втереться в доверие к чекистам и стать двойным агентом, чтобы затем выманить фейсов в Польшу. Литва вначале всё отрицала, но потом признали, что Ильин консультировал отдельных сотрудников. И его отпускают!
Затем он пытался получить политическое убежище в Швеции, но после нескольких месяцев в лагере для беженцев его вернули в Литву. Снова он появился в 2003 году, когда его обвинил в вымогательстве банк SEB, после чего он сбегает в Россию, куда ему якобы запрещен въезд после шпионского скандала. Потом еще будут обвинения в прослушке высокопоставленных чиновников и наркоту. Несколько лет назад его вытащили из Британии международным ордером. Я уже даже не знаю на какую из разведок Ильин работал, когда ему написал Рамиз / Izee.
А вот что мне особенно нравится, так это способ, с помощью которого удалось добраться до почты. Я нашел резервный ящик на Yahoo, и у Yahoo есть неприятная особенность - они не только удаляли ящики из-за неактивности, но и позволяли их регистрировать повторно. Дальше осталось только восстановить доступ к основному аккаунту, чтобы обзавестись сувениром на память https://pastebin.com/9jKTJCHS