SSK (Signed Subspace Key) - redwerk/fred GitHub Wiki

SSK обычно предназначены для сайтов, которые со временем будут меняться. Например, веб-сайт, которому может потребоваться обновление новостей или исправление, добавление или удаление информации. Они работают таким образом, что кто-то другой не может установить более новую версию вашего сайта и притвориться, что это сделали вы. Это реализовано с помощью подписи — обновленный сайт будет автоматически подписан. Только человек с секретным ключом может добавлять обновленные версии вашего сайта во Freenet.

Адрес SSK для сайта выглядит примерно так (середина сокращена, чтобы поместиться на странице):

http://127.0.0.1:8888/[email protected]/mysite-4/

Случайно выглядящий текст в середине — это указатель на открытый ключ, а также на симметричный ключ, используемый для конфиденциальности. Часть mysite — это слово, выбранное создателем сайта, а 4 — это версия сайта. Номер версии увеличивается каждый раз, когда вы создаете новую версию сайта и вставляете ее в Freenet. Мы используем этот подход, потому что в настоящее время невозможно обновлять данные в Freenet, и это маловероятно в ближайшей или среднесрочной перспективе. USK делают это еще более прозрачным для конечного пользователя.

Вот пример адреса реального сайта SSK во Freenet. Это должна быть страница стресс-тестирования Freenet:
http://127.0.0.1:8888/SSK@GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w,c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs,AQABAAE/testinserts-3/

  • GB3wuHmtxN2wLc7g4y1ZVydkK6sOT-DuOsUo-eHK35w — это хэш открытого ключа. Эта часть — все, что требуется для уникальной идентификации файла (но не для его расшифровки), поэтому узлам нужно хранить только этот бит. Фактический открытый ключ хранится (в незашифрованном виде) с (зашифрованными) данными.
  • c63EzO7uBEN0piUbHPkMcJYW7i7cOvG42CM3YDduXDs — ключ расшифровки документа. Это известно только клиентам, а не узлам, хранящим данные, поэтому узлы не могут расшифровать данные, которые они хранят, без полного адреса.
  • AQABAAE — это настройки шифрования

Ссылки SSK в значительной степени были заменены ссылками USK, которые основаны на SSK, но где всегда происходит попытка получать самую последнюю версию сайта.

Пример

Существуют графические инструменты, такие как jSite, которые помогут вам легко добавлять бесплатные сайты во Freenet, но в учебных целях мы будем использовать интерфейс telnet, чтобы шаг за шагом показать, как работает процесс добавления бесплатных сайтов SSK.

  1. Создайте папку и назовите ее, например, mysite, с несколькими файлами HTML в ней, один из которых называется index.html.
  2. Подключитесь к интерфейсу telnet, введя в командной строке: telnet localhost 2323
  3. Сначала нам нужно сгенерировать криптографическую пару ключей. Это делается каждый раз случайным образом и создает два ключа: один (приватный ключ) для подписи файлов, а другой (публичный ключ) для проверки подписи. Тип: МАКЕССК
  4. Это вернет две строки случайных символов: Insert URI (приватный ключ для шифрования и подписи) и Request URI (для расшифровки и проверки подписи).

Например:

Insert URI:
SSK@AIfB3XMup9~D7o5LaKaOV8sV9LWayoegCtiH88gc-xuD,V27XCqRZYUOVFltYPSKGv9gQticpsg13DjSoBCob3a8

Request URI:
SSK@~cnUlnYEwS~nRs9y6~yXmZeLgil8MRhe8VBea4gn1Fo,V27XCqRZYUOVFltYPSKGv9gQticpsg13DjSoBCob3a8,AQABAAE

Теперь мы хотим загрузить папку и ее содержимое в Freenet и иметь ссылку, чтобы иметь возможность скачать содержимое. Введите следующее, заменив "..." в середине на полный URI вставки:
PUTSSKDIR:[email protected],V27XCqRZY...oBCob3a8/testsite#/path/to/mysite#index.html

Это должно загрузить содержимое каталога /path/to/mysite во Freenet с файлом index.html по умолчанию, зашифрованным и подписанным только что сгенерированным закрытым ключом. Будьте терпеливы, это может занять несколько минут. В конце концов, он должен вернуться с таким сообщением (средние биты обрезаны, чтобы уместиться на странице): URI:

Как работают SSK

  1. Автор генерирует пару криптографических ключей: приватный ключ для подписи файлов и публичный ключ для проверки подписи.
  2. Автор также генерирует симметричный ключ (который используется как для шифрования, так и для расшифровки).
  3. Когда файл вставляется в Freenet, он шифруется симметричным ключом и подписывается приватным ключом. Подпись хранится вместе с файлом. Узлы не хранят симметричный ключ, а только часть открытого ключа SSK в качестве индекса данных. Это делается для того, чтобы они могли правдоподобно отрицать знание данных на своем узле.
  4. SSK состоит из хэша публичного ключа и симметричного ключа. Хэш публичного ключа действует как индекс данных для целей поиска. Кроме того, фактический публичный ключ хранится вместе с данными. Это делается для того, чтобы узлы Freenet могли проверять подпись, когда файл SSK поступает на их узлы, а также чтобы клиенты могли проверять подпись при извлечении файла. Симметричный ключ предназначен для того, чтобы клиенты могли расшифровать файл.

Алгоритмы

  • SSK имеет размер 1024 байта.
  • Ключ симметричного шифрования является 256-битным (как ключ, так и размер блока; не строго AES, поскольку AES указывает размер блока 128 бит) с (по историческим причинам в некоторых исходных кодах упоминается как PCFB).
  • Хэши.
  • Шифрование с открытым ключом — 2048-битное с 256-битным M (расширение FIPS-180-2, близкое к FIPS-180-3).
  • Все нечитаемые человеком части SSK представляют собой закодированные байты — хэш публичного ключа (или закрытый ключ для URL-адреса вставки), симметричный ключ и дополнительные байты, определяющие параметры шифрования. Обратите внимание, что Freenet использует ~- вместо стандартного Base64 +/ для 62 и 63, соответственно.
  • Последняя часть SSK, также известная как дополнительные байты, "AQABAAE" или аналогичные, указывает, какие алгоритмы использовались для SSK (1, первый байт), закрытый ключ (1) или открытый ключ (0) (второй байт), алгоритм шифрования (2, третий байт) и алгоритм хеширования (1, четвертый и пятый байты).