IPFS
IPFS — распределённая, нецензурная файловая система с бессрочным хранением данных, доступ к которой осуществляется через специализированные шлюзы, полное название — InterPlanetary File System. Представляет собой что-то среднее между торрентом и облаком, а точнее является децентрализованным облаком, информация в котором распределена между узлами, а не между серверами. Из-за своих преимуществ популярна среди разработчиков обходов блокировок.
Ключевые особенности
Облака — Мега драйв, Гугл драйв и все прочие подвержены цензуре сверху, любая информация может быть удалена по запросу властей и владельцев компании, также она может быть потеряна, если случится краш серверов или остановка сервиса (как например в rghost, если кто помнит). Вся информация, выложенная на IPFS, остаётся там навсегда, рециркулируя по узлам сети[1]. Однако тот, кто выложил информацию на IPFS, может понести ответственность по законам собственной страны: файлы, хотя и обезличенные, сами по себе никак не шифруются. И уж тем более не стоит хранить на IPFS список всех паролей. Исключением из правила невмешательства являются шлюзы; они могут налагать собственные ограничения, например чтобы компенсировать нагрузку на себя, как было с Pinata cloud и Антизапретом, одним из популярных средств обхода блокировок на IPFS. После этого Антизапрет сменил шлюз на тот, что предоставляют непосредственно разработчики IPFS — ipfs.io, и это решило проблему. Поэтому, хотя и есть техническая возможность, хранить на ipfs запрещёнку в незащищённом виде крайне не рекомендуется, как и в обычных облаках здесь, скажу вам по секрету, помогут только запароленные архивы. Но в пограничных ситуациях нет более надёжного хранилища.
Некоторые проекты, такие как Tor Portable, вынужденно мигрировали на IPFS из-за обилия необоснованной цензуры на других площадках: Гитхаб, хотя и имеет очень хорошее облачное хранилище с огромным количеством полезного софта, злоупотребляет использованием ботомодерации, часто совершающей ошибки. Это помимо того, что у Гитхаба есть чётко определённая тематика — свадебные фото и порно на него не выкладывают.
Другой интересной особенностью IPFS является тот факт, что во многих облаках файлы не хранятся собственно как файлы; они, скорее, представляют собой ссылки на скачивание этих самых файлов. Это было проверено экспериментальным путём — при использовании ссылки на файл конфигурации ZeroOmega в обычном облаке (гугл драйв и яндекс диск), расширение не могло прочитать его, так как имелась ссылка только на скачивание файла человеком, но не на сам файл. В случае со ссылкой на IPFS расширение спокойно читает его. Именно этот фактор делает IPFS таким популярным среди разработчиков, так как позволяет читать файлы программам, что широко используется в браузерных расширениях.
Для тех, кто впервые слышит об IPFS, его структура может показаться очень непривычной: файлы в системе обозначаются через CID (Content IDentifier), начинающийся на bafy. Каждый файл имеет только одно обозначение CID, навсегда остающееся неизменным, невозможно заменить один файл другим через обновление, что является нормой в других облаках. Даже после удаления и повторной заливки файла его идентификатор, а значит и ссылка на него в шлюзах, никак не изменится; вот пример такого файла. Это обеспечивает постоянство всей информации, которая содержится в базе данных. Для изменения файлов используется не менее сложная система — IPNS (InterPlanetary Naming System), смысл которой заключается в том, чтобы вернуть отнятую возможность обновлять файлы, не изменяя при этом саму суть IPFS (что иронично: ведь суть IPFS это хранить все файлы неизменными). В отличие от IPFS, ссылки IPNS, указывающие на файлы в сети, не являются вечными, имея период валидности, который пользователь назначает самостоятельно (тот, впрочем, может длиться достаточно долго, например 30 лет).
Из-за такой громоздкой структуры в IPFS/IPNS может быть трудно разобраться новичкам. Тем же, кто напротив хочет разобраться больше всех остальных, стоит установить IPFS в виде официальной программы kubo, позволяющей открыть и поддерживать собственный узел, а также продвинуто взаимодействовать с сетью.
Пример использования
- Пройдите регистрацию на сайте https://web3.storage/. Бесплатный лимит в нём — 5 гигабайт, но стоит помнить, что это всего лишь консоль, предоставляющая быстрый доступ, а не клиент: сам ipfs-клиент, как проект с открытым исходным кодом, платным быть не может.
- Через https://console.web3.storage/ загрузите файл и получите его CID (bafy...). Если вам нужно загрузить несколько файлов, выбирайте загрузку директории (среди вариантов File, Directory, CAR выбираете второй). Файл будет доступен по ссылке вида https://ipfs.io/ipfs/ВашCID/НазваниеФайла, директория — то же самое, но без названия файла в конце.
- Для создания IPNS ссылки используйте IPNS Record Inspector & Creator и выберите create record. Сгенерируйте private key, обязательно сохраните его и никому не показывайте — он будет использоваться для обновления IPNS ссылки, являясь вашим паролем от неё. После его создания одновременно будет подобран публичный IPNS Name.
- В значении Value добавьте ранее созданный IPFS CID, а значение Validity, обозначающее срок действия IPNS ссылки, я предпочитаю завышать — сам сайт предлагает выдать ему срок, равный максимум одному году в миллисекундах, но если вы вставите туда 946684800000, то это будет ровно 30 лет с учётом високосных годов.
- В inspect record вставьте созданный вами ранее IPNS Name, составляющий тело вашей ссылки; он должен выдать вам корректные данные о ссылке, создали ли вы её или обновили. IPNS ссылка будет иметь вид https://ipfs.io/ipns/ВашIPNSname/НазваниеФайла и способна перенаправлять на различные файлы внутри IPFS, не давая данным устаревать: вы можете сменить CID, а IPNS ссылка останется той же самой.
- Для обновления содержимого IPNS ссылки повторно пройдите её создание через create record, с тем условием, что теперь вы не генерируете приватный ключ, а импортируете старый. Вам нужно поменять CID от IPFS файла, а также убедиться через inspect record, что изменения применились.
Всё готово. Остальное изучение IPFS вам стоит пройти самостоятельно под различные сценарии его использования. Самое сложное, что можно делать внутри IPFS по моему мнению — хостить целые сайты. Удачи вам.