Тег ‘всякое’

Словил бан у Феликса

Попал в клуб забаненных @FelixTheBest. Достойная компания, надо сказать.

Перечитываю вчерашние переписки в телеграме

Господи, сколько же я выпил перед тем, как обсуждать Маяковского, “Логико-философский трактат” Витгенштейна и Zen and the Art of Motorcycle Maitenance? И при чем тут карта 50 самых сложных развязок Великобритании?

https://www.ordnancesurvey.co.uk/blog/2019/07/britains-most-complex-motorway-junctions/

Юридический вопрос

Обсуждали тут очередное обострение MeToo, вспомнился сюжет из задачника по уголовному праву:

40-летний Нарциссов, работник полиграфического комбината, подходил на улице к привлекательным, но скромно одетым молодым женщинам, представлялся полковником службы внешней разведки и предлагал вместе с ним отправиться за рубеж для выполнения секретной миссии. Для пущей убедительности демонстрировал изготовленное им удостоверение сотрудника службы внешней разведки. Некоторые из женщин соглашались. Тогда Нарциссов при помощи удостоверения снимал номер “люкс” в гостинице, где дамам предлагалось пройти школу молодого бойца невидимого фронта. Занятие проводили по следующей схеме: алкоголь-тренаж, а также секс-подготовка, в ходе которой Нарциссов вступал с женщинами в половую связь. Дамы соглашались, так как им предстояло в будущем, по мысли инструктора, соблазнять президентов и премьер-министров экзотических стран.

Одна из “подготовленных” таким образом “агентесс”, продав мебель и вещи, пришла в Управление ФСБ с претензией, где найти полковника, так как она ждет его вызова.

Во время “инструктажа” очередной претендентки Нарциссов был задержан сотрудниками ФСБ, которым рассказал, что таким образом он воплощал в жизнь свою мечту – служить в органах госбезопасности.

Вопросов, собственно, два:

- правильно ли я понимаю, что ни 131, ни 133 УК РФ тут пришить нельзя?
- а вот 327 мужик с пола поднял – а если бы нарисовал ксиву несуществующего ведомства, типа “Агентства национальной безопасности” – то ничего бы ему и не было?

По мотивам очередного выступления

В эту субботу в очередной раз собрались обсуждать электронные выборы, и в этот раз ступора уже не было – то ли Шевяков не курил в камеру, то ли действительно надо привыкать к “публичным” выступлениям в Зуме :) Полную запись можно посмотреть на ютубе, а тут – перескажу свои основные тезисы.

Московская голосовалка – вопреки всем ожиданиям – отработала более-менее нормально, и это не может не радовать. О технических сбоях вроде остановки выгрузки данных и редких падениях сайта для наблюдения до меня уже сказали, я хочу добавить немного о проблемах скорее организационного характера.

Начну с того, что тайна голосования, которая волнует довольно многих избирателей и экспертов, действительно держалась на честном слове ДИТа. Это сложно назвать виной разработчиков и эксплуатантов системы – так уж получилось, что занимается этим ровно одно ведомство, а надо разделять систему как минимум на две части – чуть дальше станет понятно, почему, но Александр Исавнин действительно много раз задавал вопрос об этом, а ответов лучше, чем “поверьте нам на слово” техническая рабочая группа так и не получила. Опять же, отмечу, вслед за Олегом, что фактов нарушения тайны голосования пока никто не зафиксировал.

С другой стороны – некоторые технические меры для защиты тайны голосования были приняты. Да, при изучении кода системы заметно, что авторы попытались реализовать вариант хорошо известного “протокола двух агентств“, который защищает тайну голосования, и в принципе система позволяет разнести авторизацию пользователя и собственно голосование по разным ведомствам, что критично для этого семейства протоколов. Это в целом довольно положительно характеризует разработчиков системы – как минимум обращение к известным протоколам позволяет избавиться от всевозможных неожиданностей.

Чуть подробнее опишу протокол голосования – при этом постараюсь изложить это все максимально упрощенно. К сожалению, в Википедии описан похожий, но отличающийся протокол, а “Прикладная криптография” Шнайера есть под рукой далеко не у всех – хотя протокол, похожий на ДИТовский, там описан под названием “Голосование с двумя Центральными комиссиями”. Основаны все эти протоколы на криптографии с открытым ключом – здесь знать о ней надо лишь то, что используется пара из открытого и закрытого ключа, таких, что сообщение, зашифрованное открытым ключом, можно расшифровать только с помощью закрытого, и наоборот – если сообщение зашифровано закрытым ключом, то оно расшифровывается открытым. Закрытый ключ обычно держится в секрете, а открытый доступен всем.

Итак, для начала – подготовка к голосованию, которая с точки зрения криптографии состоит в том, что создается пара из открытого и закрытого ключа. Закрытый ключ разделяется на части, которые передаются членам избирательной комиссии – а они, как и на обычных выборах, представляют самые разные политические силы – например, в этот раз одним из членов комиссии был Григорий Мелконянц из “Голоса“. Главное здесь это то, что закрытый ключ не будет известен никому вплоть до момента его “сборки” – а открытый ключ, наоборот, будет опубликован во время голосования. Происходит процедура генерации и разделения ключей в торжественной обстановке, с банкетом, фуршетом, журналистками с декольте – в общем, “сожалею, что не был при сей баталии хотя бы мичманом!”

Дальше происходит собственно голосование – пройдя авторизацию на “Госуслугах” или mos.ru, избиратель получает от сервера регистрации уникальный номер (GUID) и перенаправляется на сервер голосования, по адресу “$host/election/check/$guid” (строка 94 файла Ballot.php в приложении form, опубликованном в ДИТовском гитхабе).

Сервер голосования – это приложение ballot (обратите внимание, что работало оно на другом домене – авторизация происходила на 2020og.ru, а собственно голосование – на elec.moscow, можно считать это демонстрацией возможности разделения авторизации и голосования), и там нам очень интересно содержимое файла election.js – точнее, то, что начинается после 243 строки. Там происходит следующее: с помощью библиотеки NaCl создается пара из “пользовательского” открытого и закрытого ключа, случайным образом выбирается значение nonce, сообщение из выбора избирателя и nonce зашифровывается сначала с помощью закрытого ключа избирателя, а затем – с помощью открытого ключа системы голосования. Пара из зашифрованного таким образом сообщения и открытого ключа избирателя обладает следующим очень полезным свойством – зная закрытый ключ системы голосования, можно убедиться, что сообщение (голос) зашифровано именно закрытым ключом избирателя, и никаким другим; не зная закрытого ключа избирателя, невозможно “подменить” голос; не зная закрытого ключа системы голосования – нельзя сделать с этим сообщением вообще ничего.

Затем пара из GUID и зашифрованного голоса отправляется на сервер голосования, где GUID проверяется на достоверность – что он действительно был выдан сервером регистрации, и по нему еще не голосовали, а зашифрованный голос в случае успешной проверки сохраняется – в данном голосовании в блокчейн, но в принципе это может быть любая база данных или вообще файлик на диске. Списки проголосовавших избирателей доступен наблюдателям, список зашифрованных голосов – вообще всем (в ходе голосования на специальном сайте транслировались транзакции блокчейна, а раз в полчаса они выгружались в файлы csv).

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

Попробуем теперь перечислить свойства такой системы.

  • Получить GUID и проголосовать могут лишь зарегистрированные избиратели – это обеспечивается не только криптографией, но и тем, что авторизацией пользователей занимаются “Госуслуги”;
  • Cервер голосования не может «вбрасывать» в хранилище голоса по своему усмотрению – их не может быть больше, чем на сервере авторизации было создано GUID’ов (список избирателей с отметками, кто голосовал, а кто нет, доступен для просмотра наблюдателям, как и на обычных «бумажных» выборах);
  • В ходе голосования голос пользователя расшифровать нельзя (и, допустим, отклонить его под видом технической ошибки);
  • После голосования голос пользователя нельзя изменить (так как никому, кроме самого пользователя, неизвестен закрытый ключ – и то для его сохранения надо предпринять некие усилия);
  • Каждый голосовавший может найти свой голос в опубликованных результатах;
  • Каждый может самостоятельно проверить правильность подсчета голосов;
  • Если сервер авторизации не сохраняет выданные пользователям GUID’ы, а сервер голосования не сохраняет связку между GUID и голосом (тут придется поверить разработчикам и эксплуатантам на слово – но скорее всего, это так) – никто не может узнать, какой голос принадлежит какому пользователю. Кстати, обращу внимание, что для раскрытия тайны голосования требуются согласованные действия операторов сервера авторизации и голосования – собственно, поэтому этот протокол и называется “протоколом двух агентств”.

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

Теперь перейду к плохому. Во-первых – зачем я полез смотреть код? Полез я туда именно для того, чтобы посмотреть, какой конкретно протокол голосования там реализован, и повторюсь, остался более-менее доволен увиденным – но хочу сказать, что программистом на PHP и Javascript я не являюсь, и гораздо проще было бы прочитать описание алгоритма голосования в более явном виде. Те же ГОСТы 34 серии предусматривают документ под названием “Описание алгоритма” – и может быть, я бы успокоился, увидев его и сравнив с реализацией. Кстати, еще две шпилечки в адрес ДИТа – во-первых, на вопрос “где же, все-таки, предусмотренная ГОСТами документация”, был дан ответ в духе “ну мы систему запустили, документацию напишем потом”. Хочу заметить, что у них на сайте выложен ГОСТ 34.201-89, а жить по нему они не хотят – там ясно сказано, что документ под названием “Описание алгоритма”, например, пишется на этапе технического проекта, еще до разработки каких-либо программ, и уж точно – до ввода в эксплуатацию. Точно так же хотелось бы напомнить о существовании ГОСТ РД 50-34.698-90, где можно увидеть мои хотелки в плане описания криптографических протоколов в разделе 7.1.

Вообще, в плане открытости и прозрачности электронного голосования есть куда расти. Это вовсе не какие-то абстрактные соображения, информация о работе системы и том, как в ней все устроено, должна быть доступна для широкого круга заинтересованных лиц, а не избранных “экспертов” – с которыми еще и делились информацией крайне неохотно. В противном случае мы получаем, например, пресловутую публикацию “Медузы” о том, что оказывается, если знать ключи шифрования и случайное число (то самое nonce), выбранное браузером пользователя при подготовке зашифрованного бюллетеня к отправке, можно проверить, правильно ли учтен этот бюллетень в итоговом протоколе. Открытие это сродни торжественной констатации факта “вода – мокрая”.

Вообще, во многих алгоритмах тайного голосования возможность проверить правильность учета своего бюллетеня, найдя его в итоговом протоколе, предусмотрена штатно (к ним относятся и вышеназванные) – хотя тот же Шнайер все же намекает, что такая возможность при неправильном ее использовании – прямой путь к организованной скупке голосов. Здесь же получилось так, что из-за некоторой скрытности авторов системы голосования возможность проверить правильность своего голоса журналисты объявили “уязвимостью”.

Довольно странно была организована и публикация исходных кодов системы – опубликованы были лишь два обеспечивающих голосование веб-приложения и код смарт-контрактов блокчейна, причем некоторые особенно интересные с точки зрения стойкости шифрования и сохраняемой информации места в исходном коде были почищены. Примерно так же выглядела и переданная рабочей группе “документация”, причем местами доходило до смешного – цитирую один из документов: “хеш длиной YYY кодируется в XXX для сохранения целостности”. При этом узнать длину хеша и способ его кодирования можно было совершенно тривиальным образом – например, открыв отладчик страницы во время голосования или заглянув в опубликованные исходники. Стоит еще сказать, что местами исходный код производит впечатление полуготового прототипа, к примеру, в некоторых местах остались комментарии в духе “удалить после тестирования”.

Кстати, к вопросу об отладчике – получить представление о работе системы голосования можно было бы во время тестирования. К сожалению, тестовое голосование было доступно лишь для избирателей, уже имеющих право голоса на реальном голосовании – то есть жители Московской области, желающие посмотреть, как что там устроено, оказались в пролете. К настоящему тестированию, с другой стороны, это не имело никакого отношения – возможность проголосовать давалась лишь один раз, так что сделать несколько попыток и посмотреть, “что будет, если” было невозможно.

Еще одно странное явление – это подключение некоей “системы антифрода” (по словам представителей ДИТ), которая изначально не была заявлена. Фактически на каждую веб-страницу голосования внедрялся посторонний код на Javascript, не выложенный в публичный доступ заранее.

Скажу еще немного о блокчейне. Довольно часто говорят, что именно благодаря блокчейну эта система голосования надежна и безопасна. Вот даже на ютубе в комментариях задали вопрос – “СМИ писали, что система надёжно защищена и использование блокчейна гарантирует от подмены голосов и деанонимизации, так ли это?” – на самом деле это не совсем так. Блокчейн обеспечивает хранение уже принятых голосов, и существенно затрудняет какие-либо изменения данных постфактум – но в “модели угроз” для электронного голосования это лишь один из многих рисков. О том, как система защищена от подмены голосов и деанонимизации я сказал выше, блокчейн как таковой для этого не нужен. Впрочем, если в этот раз блокчейн работал почти хорошо (за исключением его “падения” на несколько часов в первый день голосования) – то почему бы и нет? С другой стороны, представляется, что блокчейн в целом – это “узкое место” системы, Александр Щербаков высказывал свои соображения по этому поводу.

Наблюдение за выборами – еще один не до конца проработанный вопрос. Например, не опубликован исходный код веб-приложения для наблюдателей – но скорее всего, каких-либо попыток скрыть попадающую в блокчейн информацию не предпринималось, по трудозатратам это эквивалентно созданию еще одной, “параллельной” системы голосования. Был довольно длительный период, когда не работала выгрузка данных о голосовании – по причинам, которые были попросту не предусмотрены или забыты в момент разработки. В теории это могло бы стать основанием не доверять голосам, поданным в этот период – с другой стороны, каких-либо аномалий там обнаружено не было, наоборот, было два заметных скачка голосов “против”.

Это все может показаться придирками – но не устану ссылаться на опыт Эстонии, где описания системы электронного голосования для любой аудитории – от обывателей до специалистов – совершенно официально опубликованы на сайте тамошнего избиркома, а полный – вплоть до возможности собрать свою работающую систему голосования, полностью повторяющую настоящую – комплект исходных кодов выложен на все тот же гитхаб. Это очень полезно с “исследовательской” точки зрения, а один из основных принципов современной криптографии состоит именно в открытости криптографических систем для изучения.

В целом, конечно, вопросы к разработчикам имеющейся системы голосования – скорее не технические, а организационные. Повторюсь, что с точки зрения используемых протоколов голосования система довольно адекватна, а с точки зрения реализации – к сожалению, пока приходится верить на слово, что используемая система голосования совпадает с тем, что было показано публике. В будущем, конечно, хотелось бы иметь возможность изучить систему голосования не только по кускам кода на Github, а еще и по более-менее нормальной документации, причем целиком, а не отдельными частями “тут покажем, тут не покажем”.

А вот вам красивый график

Взял и от нечего делать разобрал файлик с выгрузкой данных по электронному голосованию:

http://observer2020.mos.ru/observer/downloads/ballots_decrypted_2020-07-01T19:47:00.csv

Получился такой вот забавный график (кликабельно):

e-voting

Интересно было бы сопоставить явно видимые на графике “скачки” с разными событиями прошедшей недели – например, резкий прирост голосов “за” в Москве в 17:00 25 июня, или синхронные скачки “против” в Москве и Нижнем в 16:00 26 июня и в 14:00 29 июня.

Наговняканный за полчаса код прилагается:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct voteblock {
	int time; // time in seconds since day start
	int res[2][2];
};

voteblock votes[2300000]; // max. block number is about 2.27M

int gettime(char *token){
	token[2] = '\0';
	token[5] = '\0';

	int hours = atoi(token);
	int minutes = atoi(token + 3);
	int seconds = atoi(token + 6);

	return hours * 60 * 60 + minutes * 60 + seconds;
}

void process_vote(char *buf){
	char *token;
	int district, res;

	token = strtok(buf, "\";"); // номер голоса
	int n = atoi(token);

	token = strtok(NULL, "\";"); // избир. округ
	if (strcmp(token, "77") == 0){
		district = 0;
	} else if (strcmp(token, "52") == 0) {
		district = 1;
	} else {
		fprintf(stderr, "Unknown district %s\r\n", token);
		return;
	}

	strtok(NULL, "\";"); // адрес голоса в блокчейне
	token = strtok(NULL, "\";#"); // блок голоса
	int block = atoi(token);

	token = strtok(NULL, "\";"); // время записи блока голоса
	int time = gettime(token);

	strtok(NULL, ";"); // зашифрованный голос
	token = strtok(NULL, "\";"); // расшифрованный голос
	if (strcmp(token, "2212294583") == 0){
		res = 0;
	} else if (strcmp(token, "450215437") == 0) {
		res = 1;
	} else {
		fprintf(stderr, "Unknown vote result %s\r\n", token);
		return;
	}

	strtok(NULL, "\";"); // блок расшифровки
	strtok(NULL, "\";"); // время записи блока расшифровки

	strtok(NULL, "\";"); // транзакция

	votes[block].time = time;
	votes[block].res[district][res]++;
}

void print_votes_table(){
	int day = 0;
	int starttime = 7 * 3600; // 10:00:00 MSK = 7:00:00 UTC
	int delta = 10 * 60; // 10 minutes granularity
	int allvotes[2][2] = { 0 };

	// to put the last line
	votes[sizeof(votes) / sizeof(voteblock) - 1].time = INT_MAX;

	for (int i = 0; i < sizeof(votes) / sizeof(voteblock); i++){
		if (votes[i].time >= 0){
			if ((votes[i].time > starttime + delta) || (votes[i].time < starttime)) {
				/* either end of current stats block or end of day*/
				if (votes[i].time < starttime)	{
					starttime = 0;
					day++;
				} else {
					starttime += delta;
				}

				// finalize this line
				printf("%i\t%i\t%i\t%i\t%i\t%i\r\n", day, starttime, allvotes[0][0], allvotes[0][1], allvotes[1][0], allvotes[1][1]);
			}

			allvotes[0][0] += votes[i].res[0][0];
			allvotes[0][1] += votes[i].res[0][1];
			allvotes[1][0] += votes[i].res[1][0];
			allvotes[1][1] += votes[i].res[1][1];
		}
	}
}

int main(void){
	char buf[1024]; // should be enough

	fgets(buf, sizeof(buf), stdin); // skip first line

	while (!feof(stdin)){
		fgets(buf, sizeof(buf), stdin);
		process_vote(buf);
	}

	print_votes_table();
	return 0;
}

После драки кулаками не машут, или что хотелось еще сказать

Ну или будем считать это развернутым комментарием к описанию голосовалки на Хабре :)

Начну с того, что ее авторы вовсе не изобрели велосипед – подобного рода системы довольно известны, в “Прикладной криптографии” Шнайера нечто очень похожее названо “голосованием с двумя центральными комиссиями”, а вообще в той же русскоязычной википедии приводятся примеры “протокола двух агентств” и “протокола Фудзиока-Окамото-Охта”, а в Эстонии такая система довольно широко внедрена и даже обсуждается в публикациях, как пример успешной криптографически защищенной системы голосования. Это, на самом деле, довольно положительно характеризует предложение – как минимум, в современной криптографии принцип security by obscurity не приветствуется, а тут для оценки стойкости системы и возможных рисков можно воспользоваться всем массивом знаний человечества, накопленным с 1990-х годов (когда, собственно, и были описаны основные протоколы тайного голосования).

Естественно, если почитать википедию или книжки “чуть дальше”, можно найти примеры более сложных протоколов голосования – например, требование разделения “регистратора” и “счетной комиссии” кажется невыполнимым, соответственно, в некоторых модификациях этого протокола можно от этого отказаться – но проблема в том, что это требует значительного усложнения протокола, но не закрывает одной из самых больших проблем, о которой авторы алгоритмов голосования иногда, такое впечатление, и не подозревают. Нет, они все, конечно, грамотные специалисты – но когда вершиной применения твоего протокола становятся выборы в студенческий совет в университете (пусть даже это Гарвард!), о “мертвых душах” как-то не задумываются – а зря! “Регистратор” может довольно легко создать сколько угодно “виртуальных” избирателей – или еще лучше, “привести на выборы” существующих, но неактивных. Для этого у него есть и техническая возможность, а в случае, когда он видит результаты – еще и необходимые данные. В случае же разделения регистратора и счетчика первому, во-первых, придется устраивать вбросы “вслепую” – довольно рискованная все-таки штука, а во-вторых – “счетчик” может обнаружить и аномалии в поведении избирателей.

Добавлю еще один технический момент – требование уже к реализации этого всего. Даже аккуратная реализация самого лучшего алгоритма может потерять все свои хорошие свойства из-за утечек по “скрытым каналам”. В частности, голосование с объединенным “регистратором” и “счетчиком” почти полностью теряет “тайну голосования”, если избиратель пользуется для связи с сервером каким-нибудь там HTTP и даже HTTPS (а чем еще можно пользоваться, когда у избирателей зоопарк из компьютеров с 3 популярными семействами ОС и смартфонов самых диких марок?). Пусть даже регистратор раздает избирателям ключи по протоколу ANDOS, который, в теории, не позволит регистратору узнать, какой ключ он кому выдал – но он при этом знает fingerprint браузера избирателя, который авторизовался, как “Иван Петрович Сидоров”, и знает fingerprint браузера избирателя, который прислал бюллетень “За кандидата N.”; сопоставить одно с другим совершенно несложно.

Маленькое отступление – да, полностью анонимных каналов связи у нас, скорее всего, нет (за исключением “распечатайте QR-код и отправьте его открыткой по почте” – но это уже не совсем электронное голосование), но деанонимизация избирателей методом “вычислю по IP” потребует уж слишком больших ресурсов, вряд ли доступных какому-нибудь одномандатнику.

Что особенно важно при электронном голосовании – это работа наблюдателей, причем в двух аспектах – как обеспечение такой возможности (нет, принтер, печатающий чеки, падающие в урну – это совсем не то, что надо), так и готовность заинтересованных сторон эту возможность использовать. “Бумажные” выборы довольно просты и понятны – как минимум на уровне здравого смысла “раздали бюллетени и аккуратно их посчитали” – так что наблюдатель на избирательном участке может работать после минимальной подготовки (и даже без нее, хотя будет плавать во многих процедурных вопросах). Электронное голосование – совсем другое дело! Если предъявить этому “минимально подготовленному” наблюдателю базу данных с бюллетенями – то вряд ли он сможет в ней что-то понять. Впрочем, на “круглом столе” озвучивался опыт Эстонии, где для такого “наблюдения” на выборах партии нанимают квалифицированных специалистов в области программирования и защиты информации – и в случае электронного голосования придется делать именно так. При этом “избирком” не должен отмалчиваться, когда ему задают “технические” вопросы, и даже больше – он должен быть готов продемонстрировать интересующие специалистов компоненты системы.

Есть тут еще один интересный момент – никто в принципе не мешает (и это даже было бы правильно) максимально широко опубликовать перед выборами API авторизации и голосования, а после выборов – базу данных с результатами голосования. Людям хочется потрогать систему голосования – и если они имеют подходящую квалификацию, то почему бы и нет? Любой выпускник трехмесячных курсов по data science, лично прошедшийся питоновским скриптом по базе голосов и обнаруживший в ней не только свой бюллетень, но и что его результаты подсчета совпали с официально объявленными, добавит доверия к системе голосования попросту личным примером.

В общем, выступил

Если честно – как-то слабовато. Вроде готовился, посмотрел-почитал что-то по теме, вплоть до описания эстонской голосовалки – а как дошло собственно до непосредственно публичного выступления, так сказал пару-тройку фраз и дальше как отрезало, какой-то полный ступор. Сам себе даже не понравился :(

Круглый стол в субботу

Завтра в 12:00 меня можно будет увидеть на организованном Партией Прямой Демократии “круглом столе“, посвященном вопросу дистанционного электронного голосования:

Нажми на кнопку: теория и практика электронных голосований

Суббота, 30 мая, 12:00 по московскому времени

Если в прошлом году дистанционное голосование граждан рассматривалось, скорее как курьёз или эксперимент, выводы из которого будут сделаны когда-то потом, то в 2020-м мы все внезапно обнаружили, что это — реальность, с которой нам предстоит столкнуться скоро и в полном объёме. В значительной степени к этому подтолкнули карантинные ограничения — проведение выборов оказалось под вопросом, а жизнь политических партий встала на паузу.

Как было организовано электронное голосование на выборах в Московскую городскую думу в 2019 году, можно ли обобщить этот опыт на всю страну, а также возможно ли вообще построение надёжной цифровой электоральной системы, устойчивой к манипуляциям и внешним воздействиям — обсуждаем на еженедельном круглом столе с участием экспертов, математиков и политологов.

Трансляция будет доступна на YouTube-канале партии: https://youtu.be/0N8_DQw3hOs

Вопросы спикерам можно задавать в комментариях к трансляции или через Телеграм-канал партии

Участники:
• Алёна Август, политтехнолог
• Кирилл Азарченко, электоральный юрист
• Олег Артамонов, член ВКС Партии прямой демократии
• Александр Исавнин, член Пиратской партии России, независимый эксперт, член рабочей группы при Правительстве Москвы по проведению электронных выборов в МГД в 2019 году
• Вячеслав Макаров, генеральный секретарь ВКС Партии прямой демократии
• Олег Молчанов, электоральный юрист
• Александр Подшивалов, математик
• Павел Рассудов, кандидат психологических наук, бывший председатель Пиратской партии России
• Роман Смирнов, политтехнолог
• Алексей Щербаков, приглашенный эксперт команды Романа Юнемана по подготовке доклада «Электронное голосование. Риски и уязвимости»

Модератор круглого стола — Тимофей Шевяков, член ВКС Партии прямой демократии.

Читаю вот творчество ДИТа на хабре

moscow-state-duma

Нет ли в этой опечатке состава статьи 280.1 УК РФ?

Сталинские методы против плоской иерархии

В одном высшем учебном заведении решили вместо обычных курсовых перейти на “проекты”, причем – что особо смешно – групповые. Ну вы представляете себе, что происходит, когда три-четыре студента, да к тому же с дерьмом в голове в виде сказок про flat hierarchy (”как в Silicon Valley!”), пытаются делать что-то вместе. Херня получается. По этому поводу дал одному из участников такой “проектной группы” несколько советов, как всех построить и заставить работать.

Но начну издалека, с описания “управленческой” структуры советского государства образца 30-х годов – она по-своему занимательна. Для начала, вооружившись Конституцией 1936 года, попробуем понять, кто мог бы по ней считаться главой государства. Так как власть у нас – советская, то в 30 статье провозглашалость, что высшим органом государственной власти является Верховный Совет СССР – этакий двухпалатный парламент, состоящий из Совета Союза (1 депутат на 300 тысяч человек населения) и Совета Национальностей (25 депутатов от каждой союзной республики, 11 депутатов от каждой автономной республики и так далее по убывающей). Нетрудно догадаться, что “совет” из тысячи с лишним человек полностью недееспособен – поэтому в 48-49 статье вводится Президиум Верховного Совета, состоящий из председателя, 11 его заместителей, секретаря и 24 членов; согласитесь, что 37 человек скорее смогут о чем-то договориться, нежели 1000. Исполнительная власть – Совет Народных Комиссаров – подотчетна Верховному Совету (точнее, его президиуму, так как сам совет – не постоянно действующий орган). Председатель Совета Народных Комиссаров, по нашим понятиям – глава правительства. В принципе, нормальная такая парламентская республика.

Так вот, где в этой системе место И. В. Сталина? А его там и нет; председатель президиума (иностранцы считали его “президентом”) – “всесоюзный староста” Михаил Иванович Калинин, председатель СНК – Вячеслав Михайлович Молотов. Сталин станет председателем СНК только в 1941 году, накануне войны. Но параллельно “государственной” системе управления, существовала еще и “партийная”, про которую в Конституции – буквально три строчки (из 126 статьи):

наиболее активные и сознательные граждане из рядов рабочего класса и других слоев трудящихся объединяются во Всесоюзную коммунистическую партию (большевиков), являющуюся передовым отрядом трудящихся в их борьбе за укрепление и развитие социалистического строя и представляющую руководящее ядро всех организаций трудящихся, как общественных, так и государственных

И здесь не обходится без странностей – РСДРП/РКП(б)/ВКП(б) с самого начала – партия с “внутренней демократией”, без должности “председателя партии”, но так или иначе, руководящий орган в ней образовался, хотя назывался крайне странно – вдумайтесь – “Секретариат Центрального Комитета”. С 1922 по 1934 год должность Сталина – “Генеральный секретарь”, с 1934 до 1953 года Сталин – лишь один из нескольких секретарей ЦК ВКП(б). И в 1922 году секретариат ЦК действительно занимался канцелярской и организационной работой. Думаю, “старые большевики” неоднократно потешались над тем, как горячий грузинский парень яростно изъявляет желание “порулить” секретариатом партии, то есть секретаршами и машинистками. Зря смеялись – благодаря этому уже в конце 1922 года в “Письме к съезду” Ленин пишет, что “тов. Сталин, сделавшись генсеком, сосредоточил в своих руках необъятную власть”; в том же абзаце критикуется его “чрезмерное увлечение чисто административной стороной дела”.

В чем же состояла “необъятная власть”? Плавненько “секретариат” из чисто вспомогательного, административного органа превратился в “руководящий” (хотя в конце 20-х все еще занимался организационной работой, вплоть до распределения путевок на отдых среди членов ЦК), а “генеральный секретарь” из секретаря превратился, фактически, в главу государства. Так вот, метод “генерального секретаря” прекрасно уничтожает любую “плоскую иерархию” за крайне малое время.

Что можно сделать применительно к такому вот “студенческому проекту”? Для начала – прикинуться дурачком, то бишь грузином или блондинкой. Старательно законспектировать трехчасовой треп в Zoom о судьбах проекта, выделить основные тезисы и разослать всем в качестве meeting minutes. Первый шаг сделан – особенно удачно было бы сопроводить его неким недоумением, мол, правильно ли я все понял? Остальные участники проекта решат, что вы действительно туповаты и не будут воспринимать вас всерьез.

На втором шаге – пожалуйтесь, что вот этот ежедневный/еженедельный треп отнимает массу времени и предложите заранее, перед созвоном определять обсуждаемые вопросы. Можно попытаться ввести регламент – зачитываем вопрос, каждый высказывается (не более 5 минут), формулируем решение или откладываем до следующего раза. За соблюдением регламента следите, разумеется, вы – вряд ли кто-то пожелает заниматься подобной скучной работой, а вы дурачок/грузин/блондинка, вам только это доверить и можно. Любая “бюрократия” – от “слушали … постановили” (хотя так явно палиться не надо) до похожих на веселые игры ритуалов Scrum (всякие там stand-up meeting, planning poker и так далее) вам тут на руку.

Уже к третьему-четвертому такому созвону вы будете знать о проекте больше любого другого участника, сможете формировать “повестку дня” и предъявлять другим участникам претензии за несделанную работу – то есть в бывшей плоской иерархии превратитесь в полноценного “менеджера проекта”. Как вы распорядитесь доставшейся вам необъятной властью – уже другое дело, погоны генералиссимуса вы вряд ли получите, но попробовать стоит.

Уверенное второе место

covid-2nd

Самое время догнать и перегнать Америку.

Обновления турнирной таблицы

Не удовлетворившись победой над Германией еще 7 мая и досрочным выполнением обязательств, российская сборная еще вчера ворвалась в Top-5, а сегодня вступила в борьбу за третье место:

covid-top5

Хроники с полей

Россия уверенно обошла Турцию и приближается к группе лидеров по заболеваемости COVID-19. Опередим ли Германию к 9 мая?

covid-germany-vs-russia

Про антиквариат

Набрел на прекрасный тред на форуме часовщиков: мужик нашел где-то старинные каминные часы (причем не вполне комплектные), пришел на форум с просьбой “оценить”, а когда ему сказали, что это французский ширпотреб конца XIX века, уже в те времена довольно массовый, особой исторической и художественной ценности не имеющий, и оценили в 250 евро – сильно обиделся:

http://forum.watch.ru/showthread.php?t=311275

Вообще не первый раз вижу, что советские и постсоветские люди совершенно неадекватно оценивают любой “антиквариат” (особенно, когда он относится к категории “нашел в гараже” – заодно . То, что какой-то вещи больше сотни лет, еще не делает ее владельца обладателем редкого сокровища – особенно сейчас, когда любой может зайти на тот же немецкий или французский eBay и обнаружить там все это барахло конца XIX века по вполне приемлемым ценам (скажем, те же каминные часы будут действительно стоить 250-300 евро). Сложно однозначно сказать, в чем корень такого заблуждения – тут и две войны, и революция, и 70 лет советской власти, не особо способствовавшие сохранности всякого барахла – но как-то пора бы уже научиться понимать, что вряд ли ширпотреб, пусть и столетней давности, превратится вдруг в невероятное сокровище.

Электронный документооборот

А вот сейчас я расскажу, как в одном НИИ Говна и Торфа была организована отправка электронной почты. Представьте себе, что какому-то из подразделений предприятия нужно отправить e-mail контрагенту. Как это делается у нормальных людей? Ответственный за работу с этим контрагентом менеджер открывает Outlook, пишет письмо, нажимает “Отправить”. Все!

Но совсем не так это происходило в структурах Роскомикса! Для начала – вести какую-либо переписку “от имени предприятия” были уполномочены лишь начальники довольно крупных структурных подразделений (отставные полковники и выше :) ). Разумеется, в отделе из 50-100 человек вести переписку нужно многим – и если кому-то надо было отправить e-mail официально, то вначале писался “черновик”, который подавался начальнику отдела. Естественно, вносилось некоторое количество правок – от стилистических, например, нельзя писать “сотрудники НИИГиТ” (сотрудники бывают только в милиции), нужно писать “специалисты”, до более существенных. Черновик, разумеется, печатался на принтере, правки вносились карандашом – во-первых, отставному полковнику совершенно “не по чину” пользоваться этим вашим комплюктором, во-вторых, зрение уже не то, неудобно читать с экрана. Уходило на это три-четыре листочка А4 и несколько часов времени.

Когда текст получал одобрение – из отдельной папочки извлекался листочек с фирменным бланком предприятия. Получить эти бланки можно было в канцелярии (про нее речь будет дальше), но выдавалось их немного, были они в некотором дефиците и запоротый фирменный бланк считался небольшим ЧП. Печаталось три или даже четыре копии будущего письма – одна на фирменном бланке, официальная, вторая – с “бегунком” на обратной стороне (требовалось три подписи – начальника подразделения, начальника “дирекции проектов” и сотрудника канцелярии), копия для канцелярии и “личная” копия для собственного “архива” – чтобы в случае чего сунуть ее недоброжелателям в морду. Ставилась первая подпись и начинался небольшой забег по инстанциям.

Дальше письмо утверждалось начальником “дирекции проектов” – уже в генеральском звании. Генералу комплюктор вообще не нужен, зато полагается сидящая в приемной секретарша – которая до обеда собирала бумажки в папку “На подпись”, а в обед несла ее подписывать. Так как подписывать надо много – желательно было приклеить к месту подписи бумажный ярлычок. Не знаю, были ли случаи, когда письмо заворачивали на этом уровне – но это был еще не главный квест.

Основной барьер на пути всей переписки – это канцелярия предприятия. Не знаю, какой была ее численность в 194* году, когда предприятие было основано под названием “Завод № ***” – один или все же два человека, но 70 лет спустя она разрослась до четырех кабинетов и 8 человек. Для отправки электронных писем был выделен отдельный кабинетик, где сидела пизда, вся работа которой состояла в:

- внести в журнал запись об исходящем письме;
- написать следующий номер на бланке в поле “Исх. №”;
- поставить на бланке сегодняшнюю дату;
- поставить на бланке печать;
- расписаться в “бегунке” и забрать одну из копий письма.

По факту пизде всегда хотелось докопаться до каких-то типографских огрехов, типа “здесь должно быть два отступа, а у вас один” или “заголовок пишется 13 шрифтом Comic Sans MS, а у вас 14 Times New Roman, а в конце должна стоять точка, а не запятая”. Аргументы вроде “генерал же подписал, ваше дело присвоить исходящий номер” на нее не действовали – а так как правила оформления менялись дважды в год, ругани было предостаточно.

Наконец, фирменный бланк с исходящим номером возвращался в подразделение, где наконец сканировался и в виде прикрепленного к письму pdf отправлялся кому надо через все тот же Outlook. Весь квест требовал минимум 4 листов бумаги (а то и десятка) и занимал минимум день – если повезет, а то и два.

PS Естественно, при молчаливом одобрении начальства (уровня начальников отдела, официально это было строжайше запрещено, спиздят секреты же!) немалая часть переписки с более-менее вменяемыми контрагентами велась с личных email-ов.

Турнирная таблица на сегодня

Российская сборная по ковидле уверенно входит в десятку и готова на следующей неделе бороться с Китаем, Ираном и Турцией.

covid-tournament

В более дальней перспективе – сборные Великобритании, Германии, Франции, Италии и Испании. Догнать и перегнать Америку будет сложно, но если партия прикажет…

Про “Индустрию 4.0″

Когда я работал на одном из предприятий “Роскосмоса”, это самое предприятие с большим пафосом продемонстрировало свою приверженность идеологии “Индустрии 4.0″. В “выставочном” исполнении это выглядело так – ставился какой-то “тонкий клиент”, посаженный за него инженер рисовал что-то в Альтиуме, и подразумевалось, что как только он нажмет волшебную кнопочку “сделать зашибись”, проект тут же улетит на производство. Нельзя сказать, что за этим прямо уж ничего не стояло – за пару лет до этого предприятие с не меньшим пафосом обзавелось линией для производства печатных плат, а “тонкие клиенты” очень нравились айтишникам предприятия – впрочем, довольно быстро выяснилось, что схемотехников такое решение еще устраивает, а программистов – уже не очень.

Но несмотря на все демонстрации этой “Индустрии 4.0″ – курьеры из “Резонита” все равно ездили в наш адрес каждое утро, как на работу.

Про ковидлу

Как думаете, догоним и перегоним Китай на следующей неделе? Вот ссылки, если интересно:

https://www.worldometers.info/coronavirus/country/russia – Россия, на 19 апреля 42 тысячи случаев, ежедневный прирост свыше 5000 и 361 умерший;
https://www.worldometers.info/coronavirus/country/china – Китай, 42 тысячи случаев было 10 февраля, на этот же день – прирост заболевших снизился уже до 2500/день, общее число умерших составило 1113.

Возвращаем ru_politics людям

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

http://ru-politics.ru/

Обещают олдскул в духе жжшного [info]ru_politics образца 2005 года – впрочем, оно и правильно.

Спасибо Герману Оскаровичу

Кстати, а вы не заметили, что “Где карту открывали – туда и идите” – это прекрасная отмазка для желающих шастать по Москве в период “самоизоляции”?