Криптосеть на базе решетки
Nov. 14th, 2021 01:57 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я как-то придумал эту идею и хотел реализовать на какой-то ролевой игре. Но так и не собрался.
Представим себе, что у нас есть n субъектов которые хотят иметь возможность обмениваться защищенными сообщениями каждый с каждым, причем совершенно не представляют себе, кто через некоторое (небольшое) время будет союзником, а кто врагом.
Предлааемое решение - некая n+1 сторона привозит и продает руководителям этих n партий шифроблокноты. Блокноты - пронумерованы. И в каждом n (лучше n+m, есть несколько запасных блокнотов на случай компрометации или утраты) страниц.
Каждая страница представляет собой поворотную решётку 10x10 или 12x12. Соответсвенно, если мы хотим отправить письмо владельцу блокнота i (а список владельцев доверенная сторона-организатор сети распространяет по своим абонентам абсолютно открыто. Более того, если список сторон известен заранее. его можно прям на форзаце напечать, а там уже вопрос только в том, выкупила соответсвующая партия свой блокнот или нет), мы открываем i-тую страницу нашего блокнота и шифруем этой решеткой письмо.
Получаетель письма смотрит список абонентов, находит там нас (j) открывает j-тую страницу своего блокнота и расшифровыает посление.
n+1 сторона-организатор криптосети мамой клянется, что у неё нет копий решёток, содержащихся в проданных блокнотах.
n, кстати, может быть достаточно большим. Количество возможных решеток равно 4m2/4 где m - сторона квадрата, т.е для решетки 10x10 - 250. А число нужных для шифрования решеток (n2-n)/2. Так что можно еще и при генерации решеток спокойно выкидывать те, у которых расположение дырок не обеспечивает механической прочности или слишком много подряд идущих дырок, позволяющих увидеть кусок открытого текста.
Тут поскольку у любого участника сети есть как противники, так и союзники, а блокнот работает и с теми, и с другими, информация о компрометации блокнота скорее всего будет распространяться достаточно быстро.
А вот, собственно как можно нагенерировать кучу поворотных решеток
#!/usr/bin/env python3
import secrets
SIZE = 10
def bits(random):
for byte in random:
m = int(byte)
for n in range(4):
yield m & 3
m = m >> 2
rand = secrets.token_bytes(int((SIZE*SIZE / 2 + 7) / 8)+1)
matrix = [['.'] * SIZE for i in range(SIZE)]
getbits = bits(rand)
for i in range(SIZE >> 1):
for j in range(SIZE >> 1):
quarter = next(getbits)
if quarter == 0:
matrix[i][j] = 'x'
elif quarter == 1:
matrix[SIZE - j - 1][i] = 'x' # clockwise
elif quarter == 2:
matrix[SIZE - i - 1][SIZE - j - 1] = 'x' #upside down
else:
matrix[j][SIZE - i - 1] = 'x' # anticlockwise
print('\n'.join([ ' '.join(matrix[i]) for i in range(SIZE)]))
no subject
Date: 2021-11-14 11:30 am (UTC)no subject
Date: 2021-11-14 02:25 pm (UTC)Тут нет врагов, кроме участников данной сети. Так что у любого врага есть свой блокнот, посредством которого он ведет переписку с нейтралами и своими союзниками. А поскольку сегодня враг,завтра союзник, (а в масштабах ролевой игры перед завтраком враг, после обеда -союзник), то полный список адресов есть у всех. Мало ли, понадобится врагу предложение о сепаратном мире послать так, чтобы нынешние союзники не прочитали.
Соответственно если участник сети k протоптал свой блокнот и он попал к участнику сети l, то l может читать шифровки, отправленные k до утраты блокнота (если он их ранее перехватил) и шифровки, отправленные кем либо в адрес k до того, как они узнают что блокнот k скомпрометирован. (есди сумеет их пероехватить. Впрочем если блокнот захвачен во время штурма города, то есть шансы что несколько таких шифровок придут в город до того как корреспондентры узнают о компрометации).
no subject
Date: 2021-11-14 03:14 pm (UTC)Может ли утеря блокнота и адресов привести к ликвидации сети?
Вот решит товарищ майор, что эту гидру надо уничтожить. Может ли он для этого воспользоваться списком адресов и блокнотом?
no subject
Date: 2021-11-14 03:25 pm (UTC)Это решение для ролевой игры. Там нет товарища майора.
А так вообще-то не может. Потому что списока адресатов - это не более чем список никнеймов, которые достаточны для идентификации отправителя/получателя участником сети, а не список адресов.
no subject
Date: 2021-11-15 09:23 am (UTC)no subject
Date: 2021-11-15 10:56 am (UTC)А смысл такого использования? Если вся групаа собрана на одном и том же квадратном километре леса? А полигоны ролевых игр обычно примерно такой размер имеют.
no subject
Date: 2021-11-15 01:26 pm (UTC)no subject
Date: 2021-11-15 02:01 pm (UTC)Для групп сопротивления такой блокнот не годится. Слишком заметен в случае обыска. Опять же в наше время наличие мощного вычислительного устройства (например смартфона) и наличие в нем продвинутого криптографического софта инкриминирущим наоборот, не является. Потому что у всех есть.
no subject
Date: 2021-11-15 02:27 pm (UTC)no subject
Date: 2021-11-15 02:47 pm (UTC)Что на интересующей меня платформе эта штука не работает, а значит нет никакого резона разбираться дальше, что они там накрутили. В моем предсавтелении средство защиты данных и понятие "подписка" сочетаются плохо.
no subject
Date: 2021-11-15 04:54 pm (UTC)no subject
Date: 2021-11-14 12:14 pm (UTC)no subject
Date: 2021-11-14 02:19 pm (UTC)Решетки тут как раз в силу простоты применения на игре.
no subject
Date: 2021-11-14 12:18 pm (UTC)Сейчас я так уже не могу ("бароны стареют"), сейчас мне уже минут десять нужно. Правда, с параллельной имитацией осмысленной беседы, что несколько осложняет задачу. Но всё равно не то. :-(
... Эч ба мЕ? Элтай ба сэтай? ...
no subject
Date: 2021-11-14 02:19 pm (UTC)Ну это как раз потому что к применению чего-то сложнее простого подстановочного шифра надо готовиться. А обычно при подготовке к игре не об этом думают.
Тут как раз даная технология просится в игру где есть какая-то независимая от большинства политических игроков организация почтальонов (только не такая, как в калашниковском "Неучтенном факторе" - у тех точно копии всех блокнотов будут в надежном месте прикопаны, а Ветка откопает).
no subject
Date: 2021-11-14 08:33 pm (UTC)no subject
Date: 2021-11-15 04:53 am (UTC)В случае перехвата гонца вражеским патрулем он обязан по правилам выдать имеющиеся при нем игровые записки - типа обыскали.