что jimichi не защищает

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

mailbox
два клиента переписываются под сквозным слоем, поэтому mailbox на выходе хранит только записи постоянного размера, которые не может прочитать. но он видит обе цепочки разговора и связывает их через очереди: время каждого put и забора, исход put, вид и номер записи. вместе с наблюдателем каналов обоих входов он может связать двух клиентов; насколько это удаётся, не измерено. у клиента без сквозного слоя сообщения по-прежнему читает выход.
украденный ключ клиента
у хэш-ратчета нет шага диффи-хеллмана, поэтому восстановления после компрометации нет: тот, кто взял текущий ключ цепочки направления, читает его следующие записи до нового рукопожатия. прошлые записи остаются закрытыми. держатель закрытого ключа личности клиента может проводить рукопожатия от его имени и подделать первую запись рукопожатия как запись его собеседника; это сбрасывает только сессию, которой нет, неподтверждённую или устаревшую, и не открывает ни одной прошлой записи.
глобальный наблюдатель
модель не покрывает нарушителя, который видит все каналы сразу.
скомпрометированное устройство
если ваш работающий телефон или компьютер захвачен, jimichi не поможет. файл контейнера в покое, изъятый или скопированный, входит в модель. атаки по сторонним каналам на реализацию примитивов тоже вне модели.
root на машине с узлом
от выгрузки в swap заблокированы только буферы ключей, а от привилегированного чтения блокировка не защищает. против root на машине с узлом меры уровня процесса не работают.
кооперативное представление памяти
ключевой эксперимент наблюдает только три выбранных ключа ячеек клиента как точные байты в добровольно экспортированных данных объектов. защищённые первичные буферы вне представления даже при жизни. отсутствие совпадений не доказывает ни стирания, ни стойкости к привилегированному чтению.
моменты соединений
каждая цепочка открывает и закрывает свои tcp-соединения по всей цепочке. эти моменты совпадают и видны глобальному наблюдателю; атака в работе их пока не измеряет.
активная временная метка
измеренный стенд временной метки не устанавливает стойкость к произвольным активным атакам или порог периода узлов. основная метрика требует верного указания цели и отзывчивой исходной цепочки. закрытие всех шести цепочек при 75 мс означает потерю доступности; неверные активные указания и указания sham остаются в отчёте.
отказ в обслуживании
узел даёт одному адресу не больше его доли каналов, рукопожатий и установок и ограничивает время жизни цепочек. нагрузка с числа адресов, достаточного для общих пределов, заполнение кэша меток установки со временем, один адрес, который держит занятыми несколько пар узлов и так влияет на то, какие цепочки выживут, и остановка узла не предотвращаются и не измеряются. любой узел любой из двух цепочек или mailbox останавливает разговор, пока продолжает.
принуждение
контейнер клиента даёт легенду, а не иммунитет: у любого контейнера две области, поэтому принуждающий, который знает программу, потребует второй пароль. выданный пароль вместе с файлом отдаёт ключ личности, право забора и карточку контакта этого тома на всё время жизни контейнера.

где кончаются результаты.

стенд

  • в кластере узлы это контейнеры на одной машине. серии корреляции идут не там: все узлы и все клиенты работают в одном процессе и соединены через loopback. сетевые задержки, потери и джиттер не воспроизводятся и не эмулируются.
  • разнесённость операторов моделируется только числом подставных узлов при выборе цепочки.
  • атака корреляции работает там, где известна истинная разметка потоков. оценки переносятся на реальную сеть с осторожностью.
  • датасет синтетический: трафик сообщений генерируется, сообщения одного размера с экспоненциальными паузами между ними, а не снят с реальных пользователей.
  • замер задержки требует часов точнее миллисекунды, поэтому прогоны с задержкой идут в linux, а не на хосте windows.
  • серии корреляции идут с числом узлов, равным числу хопов, в постоянном порядке, без сертификатов и ротации онион-ключа, с неаутентифицированными каналами между узлами и с выключенными ограничениями на один адрес. выбор цепочки измеряется отдельно и без трафика.

измерения

  • базовая атака пассивна: наблюдатель считает кадры по окнам на входном канале и на последнем канале между узлами и коррелирует эти числа, только в прямом направлении. auc около 0.5 означает, что не сработала эта атака, а не что не сработает более сильная.
  • историческая серия временной метки c25519 f0f1885 задерживает один зашифрованный поток клиент-вход и оценивает завершённые кадры вперёд к последнему узлу, включая заполнение. известны эпоха и общие часы loopback, фиксированы кандидаты и поиск кода/сдвига. основная метрика объединяет верную атрибуцию с открытой исходной цепочкой и эхом отдельной пробы. неверные активные указания и указания sham сохранены; при 75 мс все шесть исходных цепочек закрылись в каждом запуске. независимая единица: блок повтора. общий хост, обратное давление и закрытия влияют на признаки; калибровка без метки не ограничивает ошибочную атрибуцию с меткой. нагрузка наблюдалась без исключений после просмотра данных, её эффект отдельно не выделен. ноль наблюдённых основных исходов не означает нулевую вероятность или безопасный порог периода.
  • неудачные попытки, закрытые и пустые кандидаты остаются в учёте. цепочка отзывчива, только если остаётся открытой и отдельная проба получает эхо до границы захвата. успешный возврат отправки сам по себе не доказывает доставку. опубликованные пассивные таблицы не содержат частоты обнаружения для активного эксперимента. порог стойкости не установлен.
  • моменты соединений и обучаемый коррелятор пока не измерены. опубликованная таблица связывания потоков использует пассивную атаку; выбор цепочек измерен, а из цены только круговая задержка, множитель полосы и бенчмарки примитивов. кооперативная серия ключей ячейки клиента завершена, с отдельным ограниченным представлением данных объектов. внешнее получение памяти, диск/swap/история, другие секреты и расшифрование записанного трафика остаются неизмеренными за v0.4.0. оставшиеся полные наблюдения узлов обязательны для v0.4.0, проектируются и не реализованы; измерения контейнера клиента остаются в плане.
  • серии корреляции идут на эхо-топологии: последний узел возвращает каждое сообщение обратно. разговор двух клиентов через mailbox в числа не входит, а измерение этой топологии, двух входов и mailbox, в плане.
  • подделка разговора в лаборатории показывает офлайн-отрицаемость на конкретных ключах и ничего не измеряет. отрицаемость отправки не измерена: различитель полезных и фоновых ячеек есть, но он меряет узлы, которые пересылают сразу, а не настройку, при которой свойство заявлено. отсутствие того, что можно выдать после сессии, пока не измерено.

сообщения и доставка

  • сообщение должно помещаться в одну ячейку: не больше 444 байт на трёх хопах. более длинное отклоняется с ошибкой и не отправляется; фрагментации и классов размера нет. длина на проводе ничего не говорит о сообщении только потому, что сообщение не занимает больше одной ячейки. между двумя клиентами тело записи не больше 368 байт, текст сообщения стенда не больше 363.
  • доставка не гарантируется. при постоянной скорости клиент без сквозного слоя держит в очереди не больше 256 сообщений и новое при полной очереди отбрасывает без ошибки; сообщение в очереди или в пути теряется, когда его цепочка закрывается. подтверждений и повторной отправки нет.
  • клиент -peer надёжной доставки тоже не даёт. отказ put только задерживает сообщение, но запись, которую mailbox сохранил, снова не кладётся, поэтому сообщение теряется вместе с ней, если истёк её срок в mailbox, её очередь вытеснена или она потерялась в ответе на забор. тело с неизвестным исходом put отправляется снова, поэтому возможен дубликат, а порядок сообщений при отказах не сохраняется.
  • изоляции по контактам нет. у клиента -peer один контакт на процесс, одна цепочка и одна очередь; второму контакту нужен второй процесс. цепочки и очереди на каждый контакт в плане. групп и нескольких устройств нет.

разговор через mailbox

  • mailbox видит обе цепочки разговора и связывает их через очереди: по каждой цепочке право забора в открытом виде, очередь put, время каждой заявки, исход put, вид записи, её номер и копии одной записи. вместе со входами он получает граф пары, а вместе с наблюдателем каналов обоих входов может связать двух клиентов атакой корреляции. насколько это удаётся, не измерено. очереди без постоянного идентификатора и цепочки на контакт в плане.
  • выход клиента -peer закреплён на mailbox: подставной mailbox есть в каждом разговоре своих клиентов, а вместе с подставным входом держит оба конца цепочки, на стенде с вероятностью 1/4. что такой mailbox, следуя протоколу, знает о маршруте, выведено из протокола: на стороне клиента -peer он называет только середину. что он видит и связывает, не измерено.
  • до сессии put несут только записи рукопожатия, поэтому mailbox видит момент рукопожатия. с покрывающими put, а они включены по умолчанию, клиент кладёт запись на каждом тике, пустую, если сообщения нет, и mailbox не отличает настоящую запись от пустой. без них он видит ещё момент и число настоящих сообщений. отказ put показывает собеседнику и mailbox, что другая сторона не забирает.
  • с покрывающими put каждая сторона на каждом тике кладёт одну запись и забирает одну, поэтому накопившийся хвост ничто не разбирает: каждый тик, на котором сторона не забирает, во время пересборки её цепочки или паузы её процесса, оставляет в её очереди ещё одну запись собеседника, и каждая следующая его запись ждёт на столько же тиков дольше. хвост ограничен глубиной очереди, по умолчанию 16 записей: сверх неё put получает отказ и собеседник отправляет снова, возможно не по порядку, так что запись ждёт не больше чем на 16 тиков дольше, 3.2 с при скорости 200 мс.
  • mailbox снимает запись при выдаче, а запись снова не кладётся, если одна её копия уже сохранена: запись, все сохранённые копии которой потерялись в ответах на забор вместе с цепочкой получателя, пропала. настоящее сообщение тогда теряется; потеря записи рукопожатия стоит 60 с ожидания и нового рукопожатия; после потери первой записи инициатора после рукопожатия ответчик не отправляет настоящих сообщений, пока не откроется следующая запись инициатора, без покрывающих put до 30 с. у ответчика нет способа попросить эту запись.
  • когда узел, остановивший разговор, прекращает, разговор восстанавливается пересборкой и новым рукопожатием примерно за 5 мин. три отказа ответа за 10 мин или 10 мин без цепочки завершают клиента.
  • очереди mailbox можно исчерпать: n очередей, которые нельзя вытеснить, стоят около n/2 установок коротких цепочек за срок жизни очереди или n открытых цепочек по одной заявке за срок, до 24 ч, и такие очереди мешают новым парам. квоты в плане.
  • личность и закреплённый контакт клиента -peer живут только в памяти процесса: перезапуск любого клиента даёт новую личность и требует нового знакомства. контейнер клиента реализован, а клиент -peer, у которого личность в нём переживает перезапуск, в плане.
  • знакомство на стенде доверяет api кластера: тот, кто может читать журналы подов клиентов и пробрасывать их порты, может закрепить любую карточку контакта до первого закрепления или после перезапуска клиента. хэши карточек сравнивает скрипт, а не люди. клиент, которому после закрепления предлагают другую карточку, отвергает её и останавливается, пока оператор его не перезапустит.
  • журналы клиентов стенда попадают на диск узла кластера: строка на каждое сообщение и строка счётчиков раз в минуту дают время и число сообщений, а хэш закреплённой карточки связывает журналы двух клиентов пары.

криптография и память

  • реализация гост не является сертифицированным скзи. алгоритмы те же и проверены контрольными примерами из стандартов, но класс защиты не заявляется.
  • библиотека гост взята с зеркала модуля её автора и закреплена по версии. совпадает ли её код с релизом автора, по независимому источнику пока не проверено.
  • два набора не смешиваются: узел работает на одном наборе, а клиент отвергает якорь и дескриптор другого, поэтому пользователи гост и c25519 образуют отдельные сети. оба сообщения рукопожатия имеют одинаковый размер на обоих наборах; дескрипторы по открытому http по-прежнему называют набор.
  • каждый выводимый ключ привязан к транскрипту своего обмена, набору и версии схемы, но правильность состава транскрипта держат только тесты wire и link: интерфейс гарантирует, что ключ нельзя вывести без транскрипта, но не то, что в транскрипт вошло всё нужное. формальной модели установки и рукопожатия канала нет; модель установки в плане.
  • каналы используют симметричные переходы noise и общий автомат токенов с совместимым сквозным профилем. стандартные векторы noise проверяют производственные переходы канала с заменой только шифра и заданных эфемерных входов. рабочие наборы используют собственные сочетания xchacha или гост; совместимость с готовым noise на проводе и доказанность этих сочетаний не заявляются.
  • согласования версий схемы ключей и канала нет: несовместимые стороны не проходят рукопожатие, fallback отсутствует. узлы и клиенты обновляются вместе. при включённой аутентификации личность соседа привязана к обмену; сторона, привязавшая другие байты личности, выводит другие ключи.
  • библиотеки держат свои копии ключей на куче go. рабочий ключ aead живёт там всю жизнь цепочки или канала и не зануляется: он остаётся, пока эту память не займут снова. secmem защищает только собственные буферы.
  • кооперативный ключевой эксперимент ищет только точные непрерывные байты трёх ключей ячеек клиента внутри разобранных данных объектов одного добровольного экспорта go 1.27.3. стеки, глобальные данные, области среды выполнения и системы и данные mmap вне представления, включая защищённые первичные буферы при жизни. полный разбор не означает полного охвата кучи или процесса, а среда выполнения может молча пропустить данные.
  • none и all меняют несколько мер памяти вместе. меньше совпадений может означать выход буферов за пределы представления; эксперимент не выделяет вклад отдельной меры или усиления защиты процесса. дополнительные совпадения не отличают копии библиотек от копий компилятора или среды выполнения, вызванных экспортом; преобразованное состояние ключей не ищется. отсутствие совпадений не доказывает ни стирания, ни срока стирания.
  • каждая точка использует новый процесс и ключи: во время цепочки, сразу после успешной очистки или не раньше чем через монотонную секунду. независимые снимки не прослеживают жизнь ключа; естественный gc и фактические задержки относятся к этому расписанию. неудачные, неподдерживаемые и недоступные наблюдения исключаются, а не становятся нулём. оценены все 360 заданных наблюдений. точные байты c25519 наблюдались под all после close; нули гост после close не доказывают стирания и не исключают преобразованные состояния. cpu хоста: 30 отсчётов серии, 3-33%, медиана 11.5%, среднее 12.4%, они включают проверку, посторонняя нагрузка не выделяется; исключений по нагрузке и выводов о производительности нет. секреты узла, канала, установки, сквозного слоя, ратчета и контейнера не измерены.
  • от выгрузки в swap заблокированы только буферы secmem. копии на куче лежат на обычных страницах и могут попасть в swap; блокировка всей памяти процесса в плане.
  • открытый текст сообщений нигде не зануляется. клиент не стирает ни своих сообщений, ни ответов, а выходной узел не стирает открытый им текст: всё это остаётся в памяти процесса, пока её не займут снова. это не ключевой материал, и меры защиты памяти ключей его не касаются.
  • сквозной слой построен в форме рукопожатия noise, но это не экземпляр noise. формальной модели рукопожатия kk над криптографическим интерфейсом нет, а композиция на гост проверена обвязкой, сверенной на c25519.
  • клиент -peer держит ключ личности, право забора и текущие цепочки ратчета в заблокированной памяти до конца процесса и ничего из этого на диск не пишет. выданный ключ личности открывает только будущие рукопожатия, а текущая цепочка только следующие записи своего направления.
  • на наборе гост каждая подпись оставляет на куче копии скаляра ключа подписи и одноразового числа. при выдаче сертификатов с хоста windows ключ уц на время выпуска остаётся в незаблокированной памяти процесса без запрета дампов.
  • прямая секретность слоёв цепочки простирается настолько, насколько живёт онион-ключ узла. узел меняет этот ключ по таймеру и освобождает заменённый, когда истекли все дескрипторы, в которых он был назван: служебная ячейка установки, сохранённая соседом, открывается не дольше периода ротации плюс срок дескриптора и допуск часов после первой публикации её ключа. самое короткое окно, которое можно задать узлу, 36 минут. память узла, снятая после освобождения, ячейку не открывает, а запись с провода без эфемерных ключей каналов не читается.
  • ротация не покрывает ключи хопа цепочек, живых в момент снятия памяти, ключ канала, который живёт столько же, сколько процесс, и копии освобождённых ключей и секретов установки, оставленные библиотеками на куче. окно выполняется, только пока ротации удаются и узел может действовать: спящий хост или замороженный процесс хранят свою память, пока не заработают снова.
  • ротацию делает сам узел, и клиент проверить её не может: дескриптор показывает, что опубликованный ключ сменился, а не что заменённый освобождён. база измерений работает без ротации, и там слои узла после кражи его ключа раскрываются за всё время его работы.
  • ключи кадров канала и ключи хопа не меняются, пока живут канал и цепочка: число ячеек под ключом хопа ограничено только пределом counter, число кадров под ключом кадров только номером кадра. ротация внутри канала и цепочки в плане.
  • формат ячейки даёт постоянный размер и защиту от повтора, но это не полный sphinx: позицию узла в цепочке больше ничто не скрывает.
  • ключ из пароля в наборе гост подобрать перебором офлайн дешевле, чем в c25519: набор гост растягивает пароль pbkdf2 с hmac-стрибог-512, которой не нужна память, потому что функции с затратой памяти в рекомендациях тк26 нет, а c25519 берёт argon2id с 64 миб. число итераций уравнивает процессорное время с argon2id только для стрибога стенда в linux-контейнерах; с оптимизированным стрибогом, на gpu и на специализированном железе догадка стоит дешевле, во сколько раз, не измерено. этот ключ берёт контейнер клиента.

аутентификация узлов

  • клиент берёт ключи узлов только из комплекта, проверенного по якорю доверия, то есть по открытому ключу уц, и проверяет каждый комплект отдельно: комплект узла списка, не прошедший проверку, считается узлом, которого вход не включил, а комплект самого входа должен пройти проверку, иначе клиент отказывается строить цепочку. кто может изменить якорь в конфигурации клиента, тот решает, каким узлам верит клиент.
  • ключ уц существует только на время выпуска сертификатов. его владелец, то есть оператор или тот, кто украл ключ за время выпуска, может сертифицировать свою личность на любые имя и адрес и, имея позицию в сети, подменить узлы. узел с сертификатом чужого уц не попадает ни в одну цепочку, пока у клиента якорь стенда и включена проверка узлов, это проверяет тест lab с настоящими узлами; клиент, вытянувший такой узел входом, всё же просит у него зеркало, прежде чем отказаться, поэтому этот узел видит адрес клиента и момент его запуска. как часто случайно выбранная цепочка встречает узлы владельца ключа, посчитано и проверено выборкой; что каждый из них знает о маршруте, выведено из протокола, а что они видят и связывают, не измерено. прошлые цепочки подмена не раскрывает.
  • выдача сертификатов на стенде держится на доступе оператора к кластеру. тот, кто управляет хостом или его сетью docker, может во время выдачи подменить то, что идёт между уц и узлом, и выдать себя за этот узел.
  • отзыва нет, кроме истечения сертификата и перезапуска узла с новой выдачей под новым уц. ключ подписи, извлечённый из памяти живого узла, позволяет выдавать себя за этот узел до того из двух моментов, что наступит раньше.
  • процесс узла принимает один сертификат и один ростер, а ключи узла живут только в памяти процесса, поэтому каждый перезапуск требует новой выдачи, а выдача требует свежих процессов всех узлов; до неё клиенты отвергают узел, и цепочек он не продолжает. тот, у кого есть доступ оператора к свежему процессу узла, может успеть выдать ему сертификат своего уц: клиенты с якорем оператора такой узел отвергают, и до перезапуска он выведен из строя.
  • тот же доступ позволяет отправить узлу ростер раньше оператора. список узлов в ростере не аутентифицирован: такой ростер должен назвать якорь, которым сертифицирован узел, и даёт ему в соседи только узлы, чьи дескрипторы проверяются по этому якорю, поэтому он может убрать узлы, но не добавить.
  • дескрипторы узлы публикуют сами, каталога нет, поэтому узел мог бы показывать разные ключи разным узлам ростера, а значит, и клиентам разных входов. с -consistency, включённым по умолчанию, узлы раз в минуту читают зеркала друг друга и держат каждый дескриптор, который узел подписал: два его дескриптора, нарушающие правило, например два онион-ключа одной эпохи, это доказательство, которое каждый узел и каждый клиент проверяет по своему якорю, и узел получает отказ у всех. остаётся окно: до 201 с на стенде после того, как ротация впервые дошла до честного зеркала, два честных зеркала могут нести соседние эпохи, не чаще двух раз за 16 мин, и ключ, открывший служебную ячейку установки, говорит узлу, к какой из двух групп зеркал относится вход: один бит на цепочку, построенную внутри окна. узел с отказом ещё укорачивает список каждого клиента на один.
  • при включённой аутентификации установка и каналы привязаны к личности узла, заверенной якорем доверия. канал kk привязывает обе личности и адрес инициирующего узла для выбора проверенной записи ростера. адрес только выбирает запись; первый аутентифицированный кадр данных подтверждает владение инициатора конечными ключами. хэша сертификата в транскрипте нет. при выдаче сравниваются адреса, ключи подписи и онион-ключи ростера, но не ключи канала.
  • у сертификатов и дескрипторов есть сроки действия, поэтому часы узлов и клиентов должны расходиться не больше допуска.

каналы между узлами

  • при включённой аутентификации канал клиент-вход использует nk и аутентифицирует вход. каналы между узлами используют kk и аутентифицируют обе стороны по проверенным дескрипторам ростера. узел с аутентификацией отвергает nn и неизвестного или просроченного соседа kk без fallback. клиент остаётся неаутентифицированным для входа; его канал nk не заявляет членство в ростере.
  • ответчик подтверждает конечные ключи инициатора только при открытии первого кадра данных и до него не отправляет прикладных данных. первое сообщение kk повторяемо и подделывается при раскрытии статического ключа ответчика; установки цепочки в нём нет. версия, роль и адрес выбора записи kk остаются видны. оба сообщения рукопожатия и кадры данных имеют один постоянный размер.
  • базовая линия без аутентификации узлов продолжает цепочку на любой адрес из служебной ячейки установки, и её каналы между узлами не аутентифицированы: они скрывают заголовки только от пассивного наблюдателя. её клиент берёт непроверенные ключи каждого хопа только у входа. ни один блок экспериментов не сравнивает её с конфигурацией с аутентификацией; серии корреляции тоже идут без сертификатов.
  • каждый узел держит зеркало проверенных комплектов тех узлов ростера, которые у него есть, а клиент обращается только ко входу и просит комплекты всех узлов своего списка, поэтому запрос не показывает цепочку. изменить комплект вход не может: изменённый комплект не проходит проверку и считается отсутствующим. но вход может не отдать зеркало: тогда клиент завершается и при следующем запуске выбирает другой вход; клиент -peer делает так только до первой цепочки, а при пересборке снова спрашивает тот же вход, пока через 10 мин не завершится. ещё он видит, когда клиент готовит цепочку: запрос дескрипторов идёт перед установкой.
  • узел включает комплект соседа в зеркало только с его начала по часам узла и до момента за 2 мин 6 с до его истечения, чтобы клиент, чьи часы расходятся с часами узла в пределах допуска, ещё считал его действительным; вне этого окна сосед считается узлом, которого вход не включил. сам дескриптор узел держит, и цепочки к соседу продолжает, до его истечения. после перезапуска соседа зеркало отдаёт его прежний комплект до конца срока дескриптора, а цепочки через этого соседа не устанавливаются: у нового процесса другой ключ канала, и рукопожатие канала он не проходит.
  • тот, кто устанавливает ростер, выбирает, какие хосты узел опрашивает на информационном порту: узел запрашивает дескриптор у каждого адреса ростера, когда запись пора обновить, и продолжает спрашивать с паузой 5 с между проходами, пока соседа нет в кэше или запись всё ещё пора обновить, в том числе когда сосед отдаёт дескриптор, ещё не подписанный заново. ни один адрес ростера не опрашивается о дескрипторе чаще раза в 5 с; с -consistency узел ещё раз в минуту читает зеркала четырёх случайно выбранных узлов ростера по отдельному пути. ростер называет каждый хост один раз, поэтому граница действует и на хост, но только на одно написание: хост, доступный под несколькими именами или под именем и ip-адресом, получает по запросу на каждый такой адрес за проход. соседа, чья запись закончилась вместе с его сертификатом, после этого спрашивают раз в минуту, пока узел не перезапустят. адреса это только ip-адреса и имена dns, а ответ считается, только если проверяется по якорю ростера.

выбор цепочки

  • список узлов клиента статический: обнаружения узлов нет, как нет и каталога, подписанного несколькими сторонами, который закрепил бы состав узлов. служебная ячейка установки ограничивает цепочку четырьмя хопами на c25519 и тремя на гост.
  • вход может не включить в зеркало ограниченное число узлов списка, по умолчанию один, а комплект, не прошедший проверку, идёт в счёт того же предела; цепочка выбирается среди оставшихся. подставной вход, исключивший честный узел, повышает вероятность того, что и выход окажется подставным.
  • узел, не отдающий свой дескриптор остальным, выбывает из их зеркал, и цепочку к нему они не продлевают. когда так поступает больше узлов, чем допускает клиент, его устраивают только зеркала молчащих узлов: при двух таких узлах из пяти и допуске в один узел каждая установленная цепочка входит через один из этих двух и кончается честным узлом. этот случай посчитан и проверен выборкой. больший допуск даёт подставному входу больше простора для выбора.
  • узел, который отказывает неугодным ему цепочкам или рвёт их, решает, какие цепочки выживут: клиент без сквозного слоя после сбоя завершается, при следующем запуске выбирает новую цепочку и сбоев не учитывает. этот выборочный отказ в обслуживании не предотвращается и не измеряется.
  • клиент -peer при конце цепочки не завершается, а пересобирает её через тот же вход: сначала ту же цепочку, а новые середины выбирает, только когда её установить нельзя, и не больше 2 раз за процесс. поэтому подставной вход, который закрывает каждую цепочку с честной серединой, добивается не больше 3 выборов середины. на стенде, при честном mailbox и двух подставных узлах среди остальных четырёх, середина-сообщник выходит с вероятностью 7/8 при подставном входе, который не включает в зеркало один честный узел, против 1/2 при одном выборе, а вместе с серединой вход узнаёт, каким mailbox пользуется клиент.
  • повторные выборы может вызывать и дальняя сторона: подставной mailbox, который оставляет без ответа каждую заявку через честную середину, получает середину-сообщника с вероятностью 19/27 при честном входе вместо 1/3, а середина видит вход, поэтому mailbox узнаёт вход своего клиента. оба значения проверены перебором всех исходов выбора.
  • граница действует на процесс. клиент, который 10 мин не может построить цепочку, завершается, и новый процесс выбирает новый вход с новым запасом и новую личность, которую надо знакомить заново. какие процессы выживают, решает тот же неизмеренный выборочный отказ в обслуживании.
  • сторожевых узлов нет: клиент без сквозного слоя выбирает вход заново для каждой цепочки, клиент -peer для каждого процесса, поэтому вероятность того, что хотя бы у одной цепочки и вход, и выход были подставными, растёт с каждым перезапуском клиента.
  • счётчики узла это точные суммы без идентификаторов цепочек, но при малом числе цепочек сумма описывает отдельные: на стенде с двумя клиентами число ячеек растёт именно у узлов их цепочек, а по счётчикам видны ещё входы и mailbox. это узнаёт всякий, кто читает вывод узла.

повтор и порядок ячеек

  • узел помнит метку каждой открытой им служебной ячейки установки цепочки, пока жив онион-ключ, которым она открыта, и отбрасывает копию. число меток под одним ключом ограничено: заполненный узел отказывает в новых установках под этим ключом, а не забывает метку, пока не опубликован следующий ключ, а без ротации до перезапуска. заполнить кэш со временем может любой, кто строит цепочки. это отказ в обслуживании.
  • ключа в метке нет, но дамп памяти даёт верхнюю оценку числа цепочек, установленных под ключами, которые держит узел, а вместе с онион-ключом и сохранённой служебной ячейкой подтверждает, что узел эту цепочку нёс.
  • counter ячеек на каждом канале свой и идёт строго подряд: копия, пропуск или перестановка закрывают цепочку. соседний узел вызывает такой разрыв одной ячейкой. посредник на проводе не может вставить свой кадр в аутентифицированный канал, но испорченный им кадр или разорванное соединение закрывают цепочку так же. это отказ в обслуживании. клиент так же проверяет каждый ответ и закрывает цепочку на первом, не прошедшем проверку, или на кадре от входа, который не открывается, а такой кадр может создать любой посредник на проводе; ответ, который не пришёл, виден только по ожиданию. клиент -peer после этого пересобирает цепочку через тот же вход и завершается после трёх таких ответов за 10 мин. между двумя клиентами запись, изменённая mailbox или узлом, не открывается у получателя и отбрасывается.

ограничения узла

  • соединение принимается или отклоняется до любого согласования ключей, и один адрес получает не больше своей доли каналов, рукопожатий и установок. при исчерпанном общем пределе узел отказывает в новых соединениях. это отказ в обслуживании; каждое место занято не дольше, чем до истечения его срока, времени простоя или срока жизни цепочки.
  • узел не отличает другой узел от клиента, потому что ответчик канала не аутентифицирует инициатора, а входом может быть любой узел, поэтому каждый узел держит ограничения на один адрес. на среднем и выходном узле каждая цепочка, прошедшая через один узел, приходит с одного адреса этого узла, и такие цепочки делят запас одного адреса: один клиент может израсходовать его за всех остальных клиентов, чьи цепочки проходят те же два узла в том же порядке.
  • один адрес может держать занятыми сразу несколько таких упорядоченных пар узлов. его запас считается на каждом узле отдельно, а его собственная цепочка проходит до трёх пар на c25519 и до двух на гост: в сети без других клиентов это через n входов до 3n упорядоченных пар на c25519 и до 2n на гост, 15 и 10 из 20 при пяти узлах. цепочка, проходящая занятую пару, срывается на установке: клиент без сквозного слоя завершается и выбирает другую, а у клиента -peer две такие цепочки подряд дают один из двух его повторных выборов, поэтому такой адрес влияет на то, какие цепочки выживут. владелец ключа уц, чьи подставные узлы есть в ростере, может держать занятыми пары между честными узлами и оставлять свободными пары через свои узлы. во что это обходится и насколько поднимает долю выживших цепочек, которые держат его узлы, не измерено; измерение в плане.
  • на стенде порт ячеек принимает соединения только от подов клиента и узлов, если сетевой плагин кластера применяет сетевые политики. на стенде два клиента по одной цепочке, поэтому общий запас там не исчерпывается.

тайминг

  • отправка по своим часам требует, чтобы период узла был на несколько процентов короче клиентского; стенд берёт 5%. при равных или более длинных периодах пропущенный тик уже не наверстать, очередь узла рано или поздно переполняется, и цепочка закрывается.
  • канал закрыт, только если меру включил узел, который по нему шлёт. клиент не может проверить, что его узлы это делают.
  • узел не перемешивает: он не добавляет случайных задержек, не применяет пакетирование и не меняет порядок ячеек между цепочками. ячейка уходит сразу или, при отправке по своим часам, по одному кадру на тик в порядке поступления. случайные задержки и перемешивание на узлах в плане.
  • служебная ячейка установки цепочки уходит сразу, не по часам узла, и отмечает начало цепочки на каждом канале.
  • без отправки по своим часам ответ выхода уходит после обработки заявки. ответ mailbox постоянной длины, но работа на заявку только ограничена, а не постоянна, и разница в микросекундах попадает в момент ответа. на стенде выход отправляет по своим часам.
  • цепочка разрывается после времени простоя и по истечении срока жизни. клиент без сквозного слоя её не восстанавливает: процесс клиента завершается и строит новую цепочку при следующем запуске. клиент -peer пересобирает её через тот же вход. момент разрыва зависит только от параметров узла и последней ячейки; срок жизни показывает только возраст цепочки, который и так виден по моменту открытия соединения.

отрицаемость

  • момент отправки скрыт только при постоянной скорости и отправке узлов по своим часам, так настроен стенд: в немедленном режиме, а он у клиента по умолчанию, ячейка уходит, когда пользователь отправляет, и без фонового трафика каждая ячейка данных это сообщение, а при узлах, которые пересылают сразу, момент ответа выхода зависит от вида ячейки. клиент -peer шлёт заявку на каждом тике, а от mailbox момент отправки скрыт только с покрывающими put, после установления сессии и пока собеседник забирает.
  • отрицаемость аутентификации между клиентами только офлайн. рукопожатие состоит из одних согласований ключей, ключа подписи у клиента нет, поэтому получатель может сам, одними своими ключами, построить транскрипт с теми же сообщениями, распределённый так же, как настоящий: транскрипт даже вместе с закрытыми ключами получателя не доказывает третьей стороне участия отправителя.
  • для засвидетельствованного транскрипта это не выполняется: mailbox или наблюдатель канала отправителя в сговоре с получателем хранит независимую запись того, кто и когда отправил шифротексты. онлайн-отрицаемость, против судьи, который во время сессии действует вместе с получателем, отрицаемость метаданных и устройство отправителя, скомпрометированное до сессии, тоже не заявляются.
  • аргумент опирается на симметрию согласования ключей, которую проверяют тесты, и на то, что других случайных значений в транскрипте нет; формальной модели нет.

контейнер клиента

  • контейнер это один файл постоянного размера: соль и две запечатанные области. область без тома хранит пустой том под выброшенным ключом, а место тома случайно. в файле нет ключевого материала ни в каком виде, даже зашифрованного: ключ личности и право забора выводятся из ключа тома при каждом открытии. но файл и пароль тома их воспроизводят, поэтому против изъятия файла вместе с паролем стойкость та же, что у ключа, хранимого под паролем.
  • что заявлено: файл в одном состоянии и пароль одного тома не выдают, есть ли второй том. это держится на названных допущениях о растяжении пароля, aead и выводе ключей, на рассуждении без формального доказательства, и верно только для сгенерированного пароля второго тома, который команда jimichi vault init создаёт сама. сгенерированный пароль печатается один раз; история терминала и перенаправленный вывод не покрываются. для пароля, выбранного человеком (jimichi vault init принимает его с -stdin), это не заявляется ни на одном наборе, потому что такой пароль лежит в пределах перебора; на гост догадка к тому же дешевле, потому что растяжению не нужна память, а во сколько раз, не измерено. неотличимость файла без пароля от случайных байт держится на допущении, которое для кузнечика-mgm не доказано. при этом изъявший узнаёт, что это контейнер: его выдают командная строка, которая его называет, путь и постоянный размер, а скрытым остаётся, один в нём том или два. различитель, который измерит утверждение, в плане.
  • файл пишется один раз, при создании, а открытие только читает его, поэтому его состояния после создания совпадают байт в байт: изъятия в разные дни, резервные копии и синхронизация не дают ничего сверх одного состояния. повтор записи после ошибки пишет те же байты. остаётся файловая система: mtime, ctime и время создания показывают, когда контейнер создан, а atime показывает открытия; сколько следов создания хранят журналы, теневые копии, wear-leveling и trim, не измерено. временный файл, оставшийся от создания, убитого до ссылки, это другой контейнер со своей солью; он удаляется при следующем запуске, но удаление не стирает блоки на диске.
  • второй том это легенда, а не иммунитет. принуждающий, который знает программу, потребует второй пароль, а легенда правдоподобна, только если ею пользуются: неактивная очередь легенды у mailbox и контакт легенды, который не отвечает, её выдают.
  • выданный том отдаёт ключ личности и право забора (выводом) на всё время жизни контейнера: можно выдать себя за владельца перед контактом, забрать и удалить записи его очереди и увидеть, с кем он говорит. ротации и отзыва нет, выход только через новый контейнер с обеих сторон. смена пароля это смена личности, а закрепление у собеседника постоянно, поэтому новое знакомство требует нового контейнера и у него. смена контакта тоже означает новый контейнер, новую личность и новое знакомство, а карточка контакта второго тома нужна уже при создании.
  • активный нарушитель между изъятиями может испортить область или подменить другую область свежим пустым томом. изменённый том не открывается, но для владельца второго тома подмена выглядит как неверный пароль, а контейнер, пересозданный на том же устройстве, при следующем изъятии покажет, что второй том был.
  • для работающего устройства свойство не заявляется: копии пароля, его растяжения и ключа личности остаются в памяти библиотек на куче и могут уйти в swap, файл подкачки и файл гибернации. эти представления вне кооперативного эксперимента с ключами ячеек и остаются неизмеренными. на гост время открытия на самом устройстве различает тома, хотя о ключе ничего не говорит, а сторонние каналы вне модели.
  • клиент -peer контейнер пока не использует, и у него будут свои границы: постоянное право забора это постоянная очередь, по которой mailbox свяжет все запуски с этим контейнером, перезапуск по любой причине оставит клиента запертым до открытия тома оператором, а времена строк журнала покажут запуски и открытия.
  • контейнер привязан к схеме ключей, цене растяжения и выводу личности: смена схемы или цены делает прежние контейнеры неоткрываемыми, смена вывода даёт им другие личности, переноса нет. обновляемый контейнер с историей сообщений не реализован; против нескольких состояний ему понадобится своя мера.