> For the complete documentation index, see [llms.txt](https://docs.tumbler.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tumbler.app/ru/nachat/url-protection-and-crypt3.md).

# Если URL нельзя раскрывать: crypt3

## Для кого

Команды безопасности и DevOps, которым нельзя раскрывать raw subscription URL пользователю или хранить его на устройстве.

## Что можно сделать

* Понять, когда достаточно raw HTTPS URL, а когда нужен `crypt3`.
* Спрятать исходный subscription URL за зашифрованным source link.
* Настроить подписи, TTL и ротацию токенов без ломания импорта.

## Примеры

* Raw add link: `tumbler://add?link=https%3A%2F%2Fprovider.example.com%2Fsub%2Fu_123`.
* crypt3 source: `schema://crypt3/<token>`.
* crypt3 add link: `tumbler://add?link=schema%3A%2F%2Fcrypt3%2F...`.

## См. также

* [getting-started/add-link.md](/ru/nachat/add-link.md)
* [security/fetcher-restrictions.md](/ru/uluchsheniya-posle-pervogo-zapuska/fetcher-restrictions.md)
* [subscription/fetch-url.md](/ru/nachat/fetch-url.md)
* [operations/mirrors-and-migration.md](/ru/uluchsheniya-posle-pervogo-zapuska/mirrors-and-migration.md)

## Два режима

### Raw HTTPS URL

Подходит, если provider subscription URL можно показывать пользователю:

```
tumbler://add?link=https%3A%2F%2Fprovider.example.com%2Fsub%2Fu_123
```

Плюсы:

* проще всего внедрить;
* работает с уже существующими subscription endpoints;
* удобно для публичных или пользовательских ссылок с обычной авторизацией.

Минусы:

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

### crypt3

Подходит, если raw URL чувствительный:

```
schema://crypt3/<token>
```

`crypt3` token содержит зашифрованный subscription URL. Пользователь получает только wrapper:

```
tumbler://add?link=<url-encoded schema://crypt3/<token>>
```

Когда пользователь открывает ссылку:

1. Tumbler отправляет `schema://crypt3/<token>` в backend.
2. Backend распознаёт marker `://crypt3/`.
3. Backend расшифровывает token своим приватным ключом.
4. Backend fetcher скачивает настоящий subscription URL.
5. Клиент получает только encrypted runtime payload, а не исходный URL.

## Требования к crypt3 source

* Source link должен содержать `://crypt3/`, например `schema://crypt3/<token>`.
* Публичное название механизма - `crypt3`. Не используйте `cryp3` в документации и интеграциях.
* Token кодируется в URL-safe base64 без padding.
* Token должен быть создан под активный публичный ключ из `/.well-known/crypt3`.
* При ротации ключей оставляйте период, когда старый и новый `kid` валидны одновременно.

## Подписи и короткие raw URL

`crypt3` скрывает URL от клиента, но не заменяет вашу серверную авторизацию. Если raw endpoint требует подпись:

* используйте HMAC/EdDSA или другой детерминированный алгоритм подписи;
* держите TTL достаточно коротким для защиты, но достаточным для fetch и retry;
* не используйте userinfo в URL (`https://user:pass@example.com/sub`);
* возвращайте точные статусы `401`, `403`, `404`, `429`, а не общий `500`.

## Ошибки доступа

* 401 — подпись или токен отсутствует.
* 403 — подпись неверна или истекла.
* 404 — URL недоступен по политике; не используйте 500 для отказов авторизации.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.tumbler.app/ru/nachat/url-protection-and-crypt3.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
