Войти в кабинет → О сервисе Как это работает Возможности Тарифы Проверить файл Написать в поддержку Отрасли — Сюрвей и инспекция — Логистика и грузоперевозки — Автострахование и осмотры — Автобизнес и дилеры — Строительство и недвижимость — Мерчандайзинг — Выездной сервис и бригады — Маркетплейсы — Пункты выдачи — ЖКХ и благоустройство — Банки и лизинг Все отрасли → FAQ +7 995 668-70-23 Google Play

Как устроена подпись и как встроить сервис к себе

Страница для ИТ-специалистов, интеграторов и тех, кто проверяет нас на прочность: ключи, аттестация, что работает без сети, замеры независимости, код проверки, C2PA, данные и API.

Коротко и про бизнес — на странице «Как это работает». Всё, что здесь утверждается, можно повторить самому: файл проверяется в браузере, код проверки открыт.

Как ставится подписьТелефон подписывает кадр в момент съёмки — как печать на письме↗ в двух словах
Что мешает её подделатьКлюч не покидает чип↗ в двух словах
Что доказывает, а что нетКогда, где, чем снято и не менялся ли файл↗ в двух словах
Как проверить без насВ браузере, без интернета↗ в двух словах
Как внедритьПервая неделя, коды, кабинет, API↗ в двух словах

Четыре блока — начните с вашего

01
Ключи и механика

Четыре разных ключа, которые не надо путать; защищённая область процессора, аттестация, порядок действий от кнопки до вердикта; что работает без сети, а что нет.

Перейти →
02
Проверка и её независимость

Схема вердикта и границы защиты. Замеры: ноль обращений к сети, 42 мс до вердикта, перебор из 279 способов испортить съёмку. Код проверки, который можно прочитать, и как повторить замеры самому.

Перейти →
03
Стандарты и данные

Метка приложения, подпись издателя (C2PA) и подпись устройства — три разных ответа на три разных вопроса. Что уходит с телефона, куда попадает и кто это видит, байт за байтом.

Перейти →
04
Интеграция и API

Выпуск кодов из своей системы, статусы заявок, проверка файла запросом, вебхуки. Примеры запросов и ответов, лимиты, документация.

Перейти →
Блок I · Ключи и механика
1. Слова

Четыре разных ключа, которые не надо путать

Дальше слово «ключ» встретится в четырёх смыслах, и это честно сбивает. Они не заменяют друг друга и живут в разных местах: один вы никогда не увидите, второй выдаёте человеку, третий вставляете в свою программу, четвёртый отдаёте нам сами.

Что за ключЗачем онГде живёт и кто его видитЧто будет, если потерять
Ключ внутри телефона Им телефон подписывает кадр в момент съёмки. Это тот самый ключ, из-за которого подпись нельзя поставить задним числом С помощью защищённого чипа аппарата. Его не видит никто: ни вы, ни сотрудник, ни мы — он физически не может покинуть чип Потерять нельзя. При сбросе телефона к заводским настройкам он уничтожается, и новая съёмка идёт с новым ключом
Ключ сотрудника Строка вида TV-1234-5678, по которой приложение понимает, что съёмка ваша и на каком она тарифе Выдаётся в кабинете и вводится в приложении один раз. Видите вы и тот сотрудник, которому он выдан Отзываете в кабинете и выпускаете новый. Уже снятые файлы остаются подлинными: подпись в них ставил чип, а не этот ключ
Ключ API Пароль вашей программы к нашему серверу: по нему CRM или 1С выпускает коды на съёмку и проверяет файлы В настройках вашей системы. Человеку не выдаётся, в телефон не вводится Отзываете в кабинете, раздел «Интеграции и API», и создаёте новый. На съёмку и на выданные ключи это не влияет
Ключ доступа к вашему хранилищу Нужен, только если включена доставка файлов: им мы кладём готовые съёмки в ваш Яндекс.Диск Вы выдаёте его нам сами в кабинете. Мы им только пишем в отведённую папку и ничего не читаем сверх этого Отзываете на стороне Яндекса. Доставка остановится, съёмка и проверка — нет
Разовый код — не ключ Одна съёмка для чужого человека: подрядчика, клиента, курьера. С условиями — что снять, в каком качестве и до какого часа Отправляете ссылкой или сообщением. Приложение по нему работает без установки ключа Выпускаете новый. Старый истечёт сам: у кода есть срок и он одноразовый

Ключ внутри телефона ставит подпись, ключ сотрудника говорит, чья съёмка, ключ API пускает вашу программу, ключ хранилища — нас к вашей папке. Потерять непоправимо нельзя ни один: три отзываются и выпускаются заново, а первый и не покидает чип.

2. Телефон и чип
Печать ставит сам телефон — ключом, который нельзя вынести

В электронике та же идея. Ключ, которым ставится печать, живёт в защищённой области процессора телефона и никогда её не покидает. А справку о том, что ключ действительно родился там, выдаёт производитель телефона или Google — не мы.

Эта справка называется аттестацией; слово встретится ниже не раз.

Как в телефоне появился сейф

Защищённый чип — не наше изобретение, а часть Android, которая складывалась десять лет. Мы только пользуемся тем, что производители уже встроили в современные телефоны.

2013
Хранилище ключей

Android 4.3: у приложений появилось системное хранилище ключей. Ключ создаёт система, приложение может только попросить «подпиши вот это».

2016
Аттестация

Android 7: чип научился выдавать справку о ключе — где он создан и каким приложением, — подписанную ключом производителя или Google. Через год такая справка стала обязательной для устройств с Google Play.

2018
StrongBox

Android 9: отдельный защищённый чип — ещё одна ступень защиты, устойчивая и к атаке на само железо. Где он есть, наш ключ создаётся в нём.

2019
Android 10 — наш минимум

С этой версии приложение работает на обычном смартфоне сотрудника — по данным Google, это более 95 % активных Android-устройств. Съёмка в приложении — только на Android, с iPhone — фото по ссылке в браузере; проверить файл можно и с iPhone, проверка идёт в браузере.

Что происходит от нажатия кнопки до вердикта

TrustVisor фиксирует ключевые данные прямо в момент съёмки и добавляет к файлу подпись устройства. Файл можно передавать как угодно — доказательство остаётся с ним навсегда.

1Ключ рождается в чипе

Порядок тут важен. Сначала приложение берёт у нашего сервера разовое подтверждение момента, и только потом создаёт аппаратный ключ в защищённой области процессора — подтверждение вшивается прямо в справку об этом ключе, поэтому задним числом его туда не подставить. Ключ физически не покидает устройство: скопировать его или подписать что-то «от имени» чужого телефона нельзя.

2Съёмка и подпись

Подпись покрывает содержимое файла (его отпечаток) и данные момента съёмки — время начала и конца, при включённой геолокации — координаты. Изменить хоть один байт после этого — подпись перестаёт сходиться.

3Сервер подтверждает момент

В аттестацию встраивается разовое подтверждение от нашего сервера: ключ создан не раньше этого момента — иначе можно было бы заранее «наготовить» подписей впрок. Подтверждение действует срок, который задаёт компания, — по умолчанию 12 часов — и обновляется, пока есть связь. Вместе с ним телефон запоминает наше время и показание счётчика с момента загрузки, поэтому момент съёмки считается по серверным часам, а не берётся с часов телефона. Сам файл на сервер не уходит.

4Проверка — без нас

Файл можно отправить как угодно: мессенджер, почта, облако, кабель — доказательство едет внутри. Получатель пересчитывает отпечаток и сверяет подпись прямо в своём браузере, как калькулятор, которому не нужен интернет. В вычислении вердикта мы не участвуем.

Что написано в справке. Аттестация — цепочка сертификатов от корня производителя телефона (у большинства устройств — Google) до ключа съёмки. Из неё проверка читает четыре вещи: уровень защиты ключа (программный, защищённая область или отдельный чип), не разблокирован ли загрузчик, какое приложение создало ключ и разовое подтверждение момента от нашего сервера. Разблокированный загрузчик или ключ вне защищённой области понижают вердикт до «не аттестовано». Нарисовать такую справку со стороны приложения нельзя: подпись под ней ставит чип, а корень цепочки — сертификат Google или производителя — вшит в проверку, а не берётся из файла.

Изменить файл после съёмки незаметно не получится: подпись перестаёт сходиться, и проверка это покажет. Удалить подпись можно — но тогда останется обычный файл без доказательства, и проверка скажет, что подписи нет. Что подпись доказывает, а чего не доказывает никогда, — в разделе «Честные границы».

Технический разбор: формат файла, что подписывается, аттестация, порядок проверок

Что внутри файла. Файл .trustvisor — обычный ZIP-архив ровно из трёх записей для видео и двух для фото. Любая лишняя запись, вложенная папка или второй медиафайл внутри — отказ разбирать, а не вердикт.

ЗаписьЧто этоКто создаёт
video.mp4 / photo.pngМедиафайл как его записала камера. Проверка считает его отпечаток SHA-256 и сверяет с манифестом.Камера приложения
manifest_start.jsonМанифест начала записи: время старта, координаты, устройство, публичный ключ, подтверждение момента от сервера, привязка к заявке. Подписан ключом устройства.Приложение при нажатии «запись»
manifest_end.jsonМанифест конца: время остановки, координаты в конце, отпечаток SHA-256 видео, отпечаток журнала датчиков, тот же идентификатор сессии. Подписан тем же ключом. У фото — один manifest.json, объединяющий оба.Приложение при нажатии «стоп»

Три «обычных» варианта того же самого: подписанный MP4 (оба манифеста лежат в служебном блоке в хвосте файла, плеер его не замечает), подписанный PNG (служебный блок перед концом изображения) и подписанный JPEG (блок после маркера конца). Медиа и манифест во всех вариантах байт-в-байт одинаковы, перепаковать из одного в другой можно без переподписи; проверка читает все четыре формы.

Что именно подписывается — поля манифеста

Подписываются не «поля», а байты файла манифеста: из него убирают пробелы и переводы строк вне строковых значений и три служебных поля (signature, signatureAlgorithm, attestationChain), остальное остаётся в том порядке, как записано. Поэтому добавленное, изменённое или переставленное поле ломает подпись — так же, как и любое переформатирование файла.

Как это выглядит. Ниже — настоящий manifest_start.json из демонстрационного пакета, который лежит на этой странице. Длинные значения обрезаны, остальное как есть.

{
  "manifestVersion": "1.2",
  "sessionId": "9addee93-8c6b-4f2c-b60a-235b863881f7",
  "recordingStartedAt": 1787805891039,
  "selectedCamera": "BACK",
  "deviceModel": "V2425A",
  "androidVersion": 36,
  "deviceRooted": false,
  "type": "recording_start",
  "publicKey": "MFkwEwYHKoZIzj0CAQYIKoZI…",
  "packageVersion": 1,
  "appVersion": "1.2.1",
  "trustLevel": "hardware",
  "attestationChallengeExpiresAt": 1787809293916,
  "attestationChallengeServerSig": "MEQCIHUKC/YbPV6IcXRRMfDx…",
  "serverTimeCheckedAt": 1787805693753,
  "serverTimeDeltaMs": 167,
  выше — подписываемая часть; ниже три поля добавлены после подписи
  "signature": "MEUCIQD…",
  "signatureAlgorithm": "SHA256withECDSA",
  "attestationChain": ["MIIC…", "MIIB…", "MIIF…", "MIIF…"]
}

Манифест конца записи добавляет к этому время остановки, отпечаток videoSha256, признак движения и координаты начала и конца — координат здесь нет, потому что съёмка велась без геолокации. Поле serverTimeDeltaMs — расхождение часов телефона с нашим сервером на момент последней связи, здесь 167 миллисекунд.

ГруппаПоляСмысл
ВремяrecordingStartedAt, recordingEndedAt, capturedAt; gpsStartTime, gpsEndTime; serverTimeDeltaMs, serverTimeCheckedAt; anchorServerMs, anchorElapsedMs, anchorState, autoTimeEnabledЧасы телефона в начале и в конце; время спутникового приёмника; расхождение часов телефона с нашим сервером на момент последней связи. Привязка: серверное время при последней связи, сколько прошло по счётчику с момента загрузки телефона и цел ли счётчик (ok или reboot — была перезагрузка без связи). Момент съёмки по серверным часам — сумма первых двух.
Местоlatitude, longitude, locationAccuracy и те же три для конца записи; locationProvider, locationMockSeen; netLatitude, netLongitude, netAccuracy; gnssUsed, gnssVisible, gnssConst, gnssCn0Mean, gnssCn0Std, gnssBands, gnssAgcDbКоординаты и точность в метрах в начале и в конце; чем получен фикс и не работало ли приложение подмены координат. Отдельно — координаты по сотовой сети и Wi-Fi, чтобы проверка могла сверить их со спутниковыми, и портрет спутникового сигнала: сколько спутников в решении и видно, какие созвездия, средняя сила сигнала и её разброс, диапазоны, уровень усиления приёмника. Без включённой геолокации полей нет.
УстройствоdeviceModel, androidVersion, deviceRooted, selectedCamera, sensorLogSha256, trustLevelМодель и версия системы, признак полных прав, какая камера снимала, отпечаток журнала датчиков (если он писался), уровень защиты ключа. В манифестах до 13 сентября 2026 на этом месте стояло одиночное motionDetected — «двигался или нет»; такие файлы проверяются по-прежнему.
СодержимоеvideoSha256 / photoSha256, videoFileNameОтпечаток медиафайла — 32 байта. Изменение одного байта видео меняет отпечаток целиком.
Ключ и версияpublicKey, sessionId, sessionIdCheck, manifestVersion, appVersionПубличный ключ устройства (91 байт), идентификатор записи, связывающий оба манифеста, версии формата и приложения.
ЗаявкаcaseCompany, caseId, externalRef, pairId, pairRole, checklistItem, caseMaxDurationSecondsКомпания и номер заявки, реквизит (пломба, VIN, накладная), пара «до/после» и роль кадра в ней, пункт чек-листа, лимит длительности из условий кода.
СерверserverNonce, attestationChallengeExpiresAt, attestationChallengeServerSigРазрешение на кадр и подтверждение момента: срок действия и подпись нашего сервера над токеном, который чип вшил в сертификат ключа.
Не подписаныsignature, signatureAlgorithm, attestationChainСама подпись, её алгоритм и цепочка сертификатов — добавляются после подписи и проверяются отдельно.

Схему можно двигать пальцем влево-вправо.

Цепочка доверия от корня производителя телефона до отпечатка видео Корень производителя подписывает промежуточные сертификаты, те — сертификат ключа съёмки. В сертификат ключа вшиты уровень защиты, состояние загрузчика, имя приложения и разовый токен нашего сервера. Ключ живёт в чипе и подписывает манифест, а манифест содержит отпечаток видео. Корень производителя телефона Google, Samsung, Vivo — вшит в проверку, не берётся из файла Промежуточные сертификаты каждый подписан следующим — проверяются по очереди Сертификат ключа съёмки выпускает чип; внутрь вшито то, что подделать нельзя: — уровень защиты ключа: TEE или StrongBox — состояние загрузчика: заблокирован, загрузка проверена — приложение, создавшее ключ: ru.trustvisor.app — разовый токен нашего сервера наш сервер токен на 12 часов вшивается чипом при создании ключа Ключ внутри чипа подписывает манифест закрытая половина ключа наружу не выходит Манифест содержит отпечаток видео
Цепочка читается снизу вверх: отпечаток сходится с файлом, подпись — с ключом, ключ — с сертификатом, сертификат — с корнем производителя. Обрыв на любом звене меняет вердикт. Сам вердикт при этом складывается не по первому обрыву, а из всех проверок сразу — правило под таблицей ниже.

Ключ и аттестация. Ключ подписи — ECDSA на кривой P-256, хеш SHA-256. Он создаётся внутри защищённой области процессора (TEE, а где есть — StrongBox) через Android Keystore, и закрытая половина никогда не покидает чип: приложение может попросить чип подписать данные, но не может прочитать ключ. Подпись — пара чисел по 32 байта; в файле она лежит в общепринятой обёртке DER, и вместе с ней выходит около 70 байт (в примере на этой странице — 71). Отпечаток — ровно 32.

Вместе с ключом чип выпускает для него сертификат и цепочку из четырёх сертификатов: сертификат ключа → промежуточные сертификаты производителя → корень производителя (для большинства устройств — Google, у части производителей — собственный корень). В сертификат ключа встроено расширение аттестации, и из него проверка читает четыре вещи: уровень защиты ключа (программный, TEE или StrongBox), состояние загрузчика (заблокирован ли и прошла ли загрузка проверку), какое приложение создало ключ — имя пакета ru.trustvisor.app и отпечаток подписи его сборки, так что ключ, созданный другим приложением, не пройдёт, — и серверный токен подтверждения момента. Публичный ключ из манифеста сверяется с ключом в сертификате байт в байт.

Роль сервера при съёмке. Перед кадром приложение получает у сервера разрешение — одноразовый нонс, действующий минуты; на нём держатся лимиты бесплатного тарифа и условий кода. Отдельно сервер выдаёт подтверждение момента: токен, подписанный ключом сервера, со сроком, который задаёт компания в кабинете — от часа до суток, по умолчанию 12 часов (до 5 сентября 2026 срок был часовым для всех). Длина срока вшита в сам токен префиксом h<часы>. и приходит в проверку подписанной. В том же ответе сервер сообщает своё время: приложение запоминает его вместе с показанием счётчика времени с загрузки телефона и номером загрузки, и по этой привязке проверка узнаёт момент съёмки по серверным часам даже после долгой работы без связи. Токен вшивается чипом в сертификат в момент создания ключа — поэтому при обновлении подтверждения приложение создаёт новый ключ, а само подтверждение проверяется потом без сети по публичному ключу сервера. В файл попадают только токен, срок и подпись; сам файл на сервер не уходит. В реестр отправляется только SHA-256 медиа, а публичная сверка по отпечатку отвечает «есть / нет» и дату.

Что проверяет верификатор — по порядку
ПроверкаЧто сверяетсяЕсли не сошлось
СессияОба манифеста принадлежат одной записи: идентификатор сессии и его контрольное поле совпадают.ИЗМЕНЁН
КлючПубличный ключ в манифестах начала и конца одинаков.ИЗМЕНЁН
ОтпечатокSHA-256 медиафайла, посчитанный заново, равен записанному в манифесте.ИЗМЕНЁН
ПодписиECDSA-подпись каждого манифеста над его каноническими байтами сходится с публичным ключом.ИЗМЕНЁН
ЦепочкаКаждый сертификат подписан следующим, промежуточные — удостоверяющие, корень — известный корень производителя.ИЗМЕНЁН
Привязка ключаПубличный ключ манифеста равен ключу в сертификате аттестации байт в байт.Не сходится — ИЗМЕНЁНПривязка нестрогая — НЕ АТТЕСТОВАНО
Расширение аттестацииКлюч создан приложением ru.trustvisor.app с известной подписью сборки; уровень — аппаратный.Чужое приложение — ИЗМЕНЁНПрограммный уровень или неизвестная сборка — НЕ АТТЕСТОВАНО
Аттестация приложенаВ пакете есть цепочка аппаратной аттестации.Нет вовсе — НЕ АТТЕСТОВАНОПодпись и целостность при этом проверяются как обычно
ЗагрузчикЗагрузчик заблокирован и загрузка прошла проверку производителя.НЕ АТТЕСТОВАНО
Ключ аттестации не отозванСерийный номер сертификата не значится в списке отозванных ключей Google.НЕ АТТЕСТОВАНОПонижение, а не отказ: отзыв — утверждение о ключе сегодня, а съёмка была тогда
Подтверждение моментаПодпись сервера над токеном и сроком; токен совпадает с вшитым в сертификат аттестации.Нет или подделана — ИЗМЕНЁНПросрочено — МОМЕНТ НЕ ПОДТВЕРЖДЁН
Часы сервераРасхождение часов телефона с сервером, снятое при последней связи, в допустимых пределах.МОМЕНТ НЕ ПОДТВЕРЖДЁН
Часы телефонаСобственные часы телефона не разошлись с серверной привязкой больше чем на полчаса.МОМЕНТ НЕ ПОДТВЕРЖДЁНРасхождение от двух минут показывается, но вердикт понижает от тридцати
Спутниковое времяВремя спутникового приёмника против серверного момента, а при его отсутствии — против часов телефона.Против часов телефона — МОМЕНТ НЕ ПОДТВЕРЖДЁНПротив целой серверной привязки — НЕ АТТЕСТОВАНО, причина «место»
Привязка к серверному времениСчётчик с момента привязки правдоподобен: не больше 400 дней и не старше самого токена.НЕ АТТЕСТОВАНО
Место по сетиКоординаты по спутнику не спорят с местом, определённым по сотовым вышкам и Wi-Fi.НЕ АТТЕСТОВАНО
Портрет спутникового сигналаПри шести и более спутниках: не одно созвездие, разброс мощности не подозрительно ровный, уровень не завышен.НЕ АТТЕСТОВАНОТак выглядит сигнал с передатчика, а не с неба
ДвижениеКоординаты начала и конца против длительности: невозможная скорость перемещения.НЕ АТТЕСТОВАНО
Лимит длительностиЕсли код задал предел, длительность записи его не превышает.НЕ АТТЕСТОВАНО
Журнал датчиковОтпечаток записи sensors.bin сходится с записанным в манифесте, и её раскладка читается.Отпечаток не сошёлся — ИЗМЕНЁНОтпечаток цел, раскладка не читается — отметка: доказательство цело, испорчена необязательная добавка
Подмена координатВо время съёмки не работало приложение подмены местоположения.отметкаДанные такого приложения отбрасываются, координаты не записываются вовсе
Время съёмкиВремя съёмки не в будущем относительно проверяющего; очень старая съёмка отмечается.отметкаЧасы могут отставать у того, кто проверяет, — это не свойство файла
Срок сертификатовСертификаты цепочки действовали на момент съёмки (не на день проверки).отметкаФайл, снятый при действующих сертификатах, обязан остаться подлинным и через десять лет

Правило вердикта. Проверка не останавливается на первой неудаче: она выполняет все строки таблицы и собирает все причины, а слово выбирает по худшей из них. Любой провал из помеченных в таблице как «ИЗМЕНЁН» даёт этот вердикт. Иначе смотрим на набор понижений: все они про время — «Момент не подтверждён»; есть хоть одно про устройство или место — «Не аттестовано». Понижений нет — «Подлинно». Строки, помеченные «отметка», в этот набор не входят вовсе и вердикт не меняют. Файл не нашего формата или с повреждённым архивом — отказ разбирать, без вердикта.

Это правило — не пересказ: оно живёт в открытом коде одной функцией verdictOf, а набор понижений собирает downgradeReasonsOf. Обе приведены ниже целиком.

Две проверки и перебор. Проверка написана дважды — для браузера и для сервера, разными людьми в разное время и на разных библиотеках чтения архивов (JSZip и yauzl): именно архив и есть то место, где реализации расходятся охотнее всего. Набор из 279 искажённых копий настоящей съёмки прогоняется через обе, ответы сравниваются посимвольно; расхождение считается дефектом, даже если каждый ответ по отдельности выглядит разумным.

Оговорки для эксперта. Отзыв сертификатов не проверяется сознательно — иначе проверка требовала бы связи с серверами производителя и переставала бы работать без сети; истёкший сертификат — предупреждение, срок сверяется со временем съёмки. Срок действия корневого сертификата производителя тоже не сверяется: Google перевыпускал корень с тем же серийным номером. Подтверждение момента есть в файлах, снятых текущей версией приложения; файлы старых версий проверяются без него. Полный перечень допущений и точные допуски — в спецификации формата, которая публикуется вместе с кодом проверки.

Подпись ставит сам телефон в момент съёмки — ключом, который физически не может покинуть чип. Меняете хоть один байт — подпись перестаёт сходиться, и проверка называет это вслух.

3. Связь

Что работает без сети, а что нет

Съёмка случается в подвале, в поле, в контейнере и на подземной парковке. Поэтому отвечаем подробно, а не одной строкой «работает офлайн» — она была бы полуправдой.

Совсем без сети снимает только постоянный ключ сотрудника. По одноразовому коду связь нужна на старте, а если телефон не выходил в сеть дольше срока, заданного компанией, и у файла нет привязки к серверному времени, вердикт станет «Момент не подтверждён».

СценарийСнимает без связи?Что важно знать
Постоянный ключ сотрудника ✓ Да, полностью Ни одного сетевого запроса перед съёмкой. Хеш, сборка данных момента, подпись защищённым чипом, упаковка — всё происходит на устройстве. Связь не нужна ни на старте, ни во время записи, ни после.
Бесплатный тариф ✗ Нет Перед каждым кадром приложение берёт у сервера одноразовое разрешение — на нём же держатся суточные лимиты бесплатного тарифа. Нет сети — съёмка не начнётся, и приложение скажет об этом прямо. Пропала связь посреди записи — запись прерывается. Это осознанное ограничение, а не сбой: нужна съёмка без связи — нужен платный ключ.
Одноразовый код ! Связь нужна на старте Лимиты кода — сколько фото и видео разрешено — считает сервер, а не телефон, иначе их можно было бы обойти. Само по себе это занимает секунду. Дальше — как задала компания: по умолчанию обрыв связи по ходу записи её не прервёт; если включено требование постоянной связи, обрыв остановит запись — для случаев, где важно исключить длинную съёмку «в тени».
Без сети дольше 12 часов Снимает С приложением 1.4 и новее — «Подлинно»: момент съёмки держится на привязке к серверному времени, а не на сроке подтверждения. Вердикт опускается до «Момент не подтверждён» только у файлов без привязки — телефон перезагружался без связи или стоит старая версия приложения. Подтверждение того, что ключ создан под разовым вызовом нашего сервера, действует срок из кабинета — от часа до суток, и приложение обновляет его само, пока есть связь. Главное же — привязка к серверному времени: телефон помнит время сервера с последней связи, поэтому момент съёмки известен по серверным часам при любой длительности без сети, и файл остаётся подлинным. Срок из кабинета вступает в силу только для файлов без такой привязки — тогда проверка скажет «Момент не подтверждён»: подпись и содержимое сойдутся, а подтверждение момента будет просрочено. Как это устроено — под таблицей.
Координаты без связи ✓ Только спутниковые Приложение спрашивает местоположение двумя способами сразу: быстрым по вышкам и Wi-Fi и точным по спутникам. Без интернета остаётся только второй — он дольше и не берётся в помещении. Нет фикса — координат в подписи просто не будет, съёмку это не блокирует. Исключение: если компания в коде потребовала обязательную геометку, без свежего фикса кнопка съёмки заблокирована. Со связью годится любой из двух способов: свежим считается фикс не старше минуты, и сетевой подходит наравне со спутниковым, а спутниковый, если он есть, главнее и записывается первым. Поэтому в торговом зале, на складе и на подземной парковке съёмка с обязательной геометкой работает — блокирует её не помещение, а полное отсутствие фикса.
Как работает привязка к серверному времени и когда она пропадает

При каждой связи телефон запоминает время нашего сервера и показание счётчика времени с момента загрузки. Счётчик идёт и во сне, часы и часовой пояс на него не влияют, перевести его без root нельзя. Момент съёмки получается сложением: серверное время последней связи плюс то, что натикал счётчик. Поэтому длительность без сети сама по себе ничего не портит.

Привязка пропадает в двух случаях: телефон перезагрузили и он с тех пор не выходил в сеть, либо на нём приложение старее 1.4. Тогда действует срок подтверждения из кабинета — по умолчанию 12 часов. Съёмки продолжаются и подписываются как обычно, но при проверке получат «Момент не подтверждён».

В отчёте проверки момент в таком случае показан двумя границами: не раньше выдачи подтверждения и не позже его срока. Практический вывод простой: дайте телефону выйти в сеть перед выездом — хватает минуты. Дальше привязка к серверному времени держит момент при любой длительности без сети; теряется она только если телефон перезагрузить, так и не выйдя в сеть.

Что доедет позже, когда связь появится, — а что не доедет никогда.

ЧтоДоедет?Как именно
Сам файл ✓ Доедет Если компания включила автоматическую доставку. Пакет кладётся в очередь на устройстве и уходит сам, как только появится связь: приложение для этого открывать не нужно, очередь переживает и перезагрузку телефона. Снимающий может попросить «только по Wi-Fi» — тогда очередь дождётся Wi-Fi. Очередь хранит до сотни пакетов.
Счётчики использования ✓ Доедут Копятся на устройстве и не теряются.
Отпечаток файла в реестр ✗ Не доедет Отправляется одной попыткой, без очереди. Офлайн-съёмка просто не попадёт в реестр, и при проверке будет написано «не найден — съёмка могла быть без связи». Это нейтральный факт, а не подозрение.
Отметка «снято» в кабинете и обновления настроек ключа ! Не вовремя Отзыв ключа, окончание оплаты, смена чек-листа — до первого выхода в сеть действует последняя известная телефону версия.
Блок II · Проверка и её независимость
4. Независимость

Проверка не обращается к нашим серверам. Это можно измерить

Обычное возражение звучит так: «вы сами делаете подпись, сами её проверяете — почему я должен верить результату». Возражение справедливое, и ответ на него не словесный.

За время вердикта страница не делает ни одного обращения к сети. Отключите интернет и проверьте снова — ответ будет тот же.

0обращений к сети, пока считается вердикт — замер на видеофайле 3,7 МБ. После вердикта уходит один запрос в реестр отпечатков, и на сам вердикт он не влияет
42мсот загрузки файла до вердикта — медиана двадцати прогонов видеофайла 3,7 МБ
279способов испортить настоящую съёмку в переборе, которым сверяются две независимые проверки
Вердикт считается у читателяФайл открывается в его браузере, там же считаются отпечаток, подписи и цепочка сертификатов. К нам за этим никто не обращается — значит, и подкрутить ответ нам нечем.
Две проверки сверяются между собойОдна написана для браузера, другая для сервера — на разных библиотеках чтения архивов. Настоящая съёмка портится 279 способами, и ответы обеих обязаны совпасть до символа.

Расхождение между двумя проверками считается дефектом, даже если каждый ответ по отдельности выглядит разумным: две реализации, дающие разные вердикты на один файл, — это спор, в котором нечего предъявить.

Формат описан, и проверку можно повторить без нас. Спецификация формата и код проверки открыты: github.com/Mikhail-Savkin/Trustvisor_verify_core, лицензия Apache-2.0. По ним специалист повторяет проверку своими средствами, не обращаясь к нашим серверам и не доверяя нашему сайту. Чтобы проверить уже снятый файл, наши серверы не нужны — ни сегодня, ни через годы.

Как повторить эти замеры самому

Ноль обращений к сети. Откройте инструменты разработчика (F12 в Chrome), вкладку «Сеть», очистите список. Откройте страницу проверки, перетащите файл и дождитесь вердикта. За время вычисления вердикта не появится ни одной строки.

Сразу после вердикта появится ровно один запрос — страница спрашивает наш реестр отпечатков. Уходит только SHA-256, ответ — «есть / нет» и дата, на вердикт он не влияет. Проверить это можно грубее: отключите сеть совсем и проверьте файл снова. Вердикт будет тот же, а строка про реестр скажет, что сверка не выполнена. Мы так и проверяли.

Скорость. 42 мс — медиана двадцати прогонов видеофайла 3,7 МБ, разброс 37–56 мс, обычный ноутбук и обычный браузер; замер 6 сентября 2026, на живой странице проверки. У вас будет своё число того же порядка: считаются один SHA-256 по всему файлу, две подписи и цепочка из четырёх сертификатов. Файл размером с фотографию проверяется за единицы миллисекунд.

Перебор из 279 порч. Набор собирается из вашей собственной съёмки, а не из нашей: скрипт берёт настоящий файл и портит его всеми способами из набора — переворачивает байты, подменяет поля, ломает архив, подсовывает лишние записи. Дальше набор прогоняется через серверную проверку, а браузерную можно прогнать этой же страницей. Расхождений между ними быть не должно ни одного. Последний прогон — 5 сентября 2026 года, после смены срока подтверждения момента: расхождений ноль.

Скрипты перебора и стенд сверки лежат в том же открытом репозитории, в папке tools/ — набор искажений можно прогнать у себя.

Оговорка, чтобы обещание было точным: связь с нашим сервером нужна не в момент съёмки, а заранее и при случае. Приложение обновляет разовое подтверждение аппаратной аттестации, когда сеть есть: при подключении, при суточной перепроверке ключа и на старте съёмки. Не вышло — съёмка идёт как обычно и мгновенно, а на проверке это отразится только сроком подтверждения момента. Проверка готового файла не зависит от нас вообще.

5. Границы

Как выносится вердикт и где именно защита кончается

Слово всегда одно, но не потому, что проверка бросает работу на первом «нет»: она доходит до конца, собирает все причины и называет худшую. Лесенка ниже — порядок рассказа, а не порядок остановки: так удобно читать, от целостности файла к моменту съёмки. Ниже неё — случаи, в которых мы честно называем цену своих решений.

Файл .trustvisor
Содержимое и подписи сошлись?отпечаток файла, обе подписи манифестов, цепочка сертификатов до корня производителя
нет →Изменён
Устройство подтверждено?ключ родился в чипе, загрузчик заблокирован, ключом владеет наше приложение, признаков подмены места нет
нет →Не аттестовано
Момент съёмки подтверждён?привязка к серверному времени цела либо подтверждение сервера было свежим — и часы телефона не спорят с серверным моментом больше чем на полчаса. Если же неправдоподобна сама привязка — счётчик показывает больше 400 дней или она старше выданного токена, — это вопрос уже не к моменту, а к устройству, и вердикт будет «не аттестовано»
нет →Момент не подтверждён
Все три ответа «да»дальше проверять нечего: файл, устройство и момент подтверждены
Подлинно

Что стоит за каждым словом

Подлинно — что именно сошлось

Содержимое совпадает с тем, что подписано; подпись сделана ключом, который родился внутри аппаратного хранилища телефона; цепочка сертификатов ведёт к известному корню производителя; ключ создан под разовым вызовом нашего сервера, и этот вызов был действителен на момент съёмки; владельцем ключа в аттестации значится приложение TrustVisor с известным нам сертификатом сборки.

Изменён — почему причина не важна и что сюда ещё попадает

Причина может быть и безобидной — файл пересжали при пересылке, — и намеренной. Разницы проверка не делает и делать не должна: она отвечает на вопрос «те ли это байты», а не «зачем их поменяли».

Сюда же попадает случай, который легко спутать с соседним: цепочка аттестации приложена, но не прошла проверку. Приложить негодную цепочку — это не «не доказали», это попытка выдать одно за другое, и ответ соответствующий.

Не аттестовано — что именно расходится и чем это отличается от «изменён»

Аттестации нет вовсе, или ключ оказался в программном хранилище, или у телефона был разблокирован загрузчик. Истёкшее подтверждение момента и расхождение часов сюда не относятся — это «Момент не подтверждён». С приложения 1.4 сюда же попадает подмена места: спутниковые координаты не сошлись с координатами по сотовой сети и Wi-Fi, или спутниковое время не совпало с серверным.

«Изменён» — что-то не сошлось: подпись, содержимое, цепочка сертификатов или приложение, которому принадлежит ключ. «Не аттестовано» — всё сошлось, но аппаратного подтверждения не хватает или оно слабее ожидаемого. Первое означает «поймали на несоответствии», второе — «не доказали».

Момент не подтверждён — когда телефон получает такой ответ

Часы телефона переведены. Момент съёмки известен по серверным часам и показан в отчёте, а собственная дата файла расходится с ним больше чем на полчаса — вперёд или назад. Такой файл целый и снят настоящим устройством, но его дате верить нельзя; верить нужно серверному моменту рядом. То же самое, если съёмка датирована раньше, чем сервер выдал ей подтверждение момента.

Подтверждение момента, которое телефон получает от нашего сервера, к моменту съёмки истекло: телефон был без связи дольше срока, заданного компанией, и привязки к серверному времени у файла нет — телефон перезагружался без связи или приложение старой версии. С целой привязкой момент известен точно при любой длительности офлайна. Сюда же попадают расхождение часов телефона с сервером и несовпадение спутникового времени с системным.

Пятый исход — «не удалось открыть файл» — это не вердикт, а отказ разбирать. Он означает, что файл не является пакетом TrustVisor: не тот формат, повреждена структура архива, дописаны посторонние данные. Мы намеренно отвечаем так, а не «изменён»: «доказательство испорчено» и «дайте, пожалуйста, исходный файл» — это разные разговоры.

Где защита заканчивается — и во что это обходится обману

Карта на сегодня. Список полный: мы держим его на своей странице и правим, когда что-то меняется, — последний раз 16 сентября, когда у файла появился журнал датчиков. Подробности каждого пункта — в карточках ниже.

ЗакрытоПодмена содержимого после съёмки. Чужое приложение, выдающее себя за наше. Программный ключ вместо чипа. Разблокированный загрузчик. Переведённые часы телефона. Приложение подмены координат из магазина. Реквизит, дописанный задним числом.
Закрыто наполовинуСъёмка экрана: подпись сойдётся честно, но журнал датчиков даёт материал, по которому пересъёмку чаще всего видно глазами. Место: передатчик поддельных спутниковых сигналов возможен, но стоит десятки тысяч и требует умения. Права суперпользователя: нужен разблокированный загрузчик, а он виден в аттестации.
Остаётся открытымАккуратный передатчик сигналов с верным временем в месте без связи. Перезагрузка телефона без сети — привязка времени теряется, и файл получает «момент не подтверждён». Отзыв сертификатов не проверяем сознательно: иначе проверка перестанет работать офлайн. И главное: что происходило перед объективом, подпись не доказывает и доказать не может.
Сколько честных съёмок получают не «подлинно» — мы не знаем

Это первый вопрос, который задаёт любой технарь, и единственное число на этой странице, которого у нас нет. Вся остальная страница измерена: сорок два миллисекунды до вердикта, 279 способов испортить файл, ноль обращений к сети. А вот сколько честных съёмок получает вердикт ниже «подлинно» — не измерено.

Почему не измерено. Мерить не на чем: за всё время у нас 52 проверки, и почти все — наши собственные съёмки. Считать по ним долю было бы враньём с видом статистики. Кейсов у нас тоже пока нет, и мы об этом говорим на каждой странице.

Почему это важно именно вам. Кладовщик снимает приёмку в металлическом ангаре, спутники ловятся плохо, портрет сигнала выходит подозрительно ровным — и честная съёмка получает «не аттестовано». Файл настоящий, человек честный, а руководитель идёт разбираться. Разница между «одна съёмка из тысячи» и «одна из двадцати» — это разница между «внедрили» и «завалили поддержку».

Что с этим делать. Пилот на одной бригаде за две недели даёт эту цифру: портал пишет и вердикт, и причину понижения по каждому файлу, считать ничего не надо — выгрузка уже есть. Мы отдадим её как есть, вместе с разбором, какие причины оказались от условий, а не от обмана.

Что можно настроить уже сейчас. Часть порогов компания задаёт сама в кабинете: срок подтверждения момента — от часа до суток; требование постоянной связи во время записи — включено или нет; журнал датчиков — писать или нет; предел длительности — прямо в разовом коде. Пороги по месту и по расхождению часов сегодня общие для всех и в кабинет не вынесены; если пилот покажет, что они мешают именно вашим условиям, это первое, что мы будем менять.

Съёмка экрана: подпись честная, сцена — нет

Самый частый вопрос и самое честное ограничение. Камера, направленная на монитор или на распечатку, снимает настоящие лучи: содержимое не подменяли, ключ родился в чипе, время и место верны — проверка скажет «Подлинно» и будет права. Криптография отвечает на вопрос «этот ли телефон снял и не менялся ли файл», а не «что было перед объективом». Так устроена любая подобная система, и обещать здесь автоматический вердикт было бы обманом.

Что мы против этого делаем. Видео несёт рядом с собой журнал показаний собственных датчиков телефона за время съёмки: ускорение, поворот, магнитное поле и освещённость. Отпечаток журнала лежит внутри подписанного манифеста, поэтому подправить журнал под картинку нельзя — файл получит вердикт «Изменён». Проверка показывает журнал рядом с видео, и человек, разбирающий спор, сверяет одно с другим.

Что по нему видно глазами. Съёмка с экрана почти всегда выдаёт себя набором мелочей сразу: освещённость ровная и «комнатная» там, где в кадре улица или прожекторы; телефон поворачивается, а картинка не даёт параллакса — предметы на разном расстоянии смещаются одинаково; камера наклоняется, а горизонт в кадре стоит; яркая вспышка в кадре не отражается на датчике света. Ни один из этих признаков сам по себе не доказательство — вместе они дают эксперту опору, которой раньше не было вовсе.

Выводов проверка не делает. Она сверяет отпечаток журнала и показывает содержимое — и ни строчкой не пишет «похоже на настоящую съёмку» или «похоже на экран». Правдоподобие движения — вопрос к человеку, а не к программе; это решение записано в спецификацию, чтобы не отменилось молча.

Где журнал есть и где его нет. Сегодня — только у видео и только на платном тарифе; включает его компания в кабинете, иначе он выключен. У фотографий и на бесплатном тарифе журнала нет вовсе, и съёмка экрана там не отличается ничем. Это не оговорка мелким шрифтом, а точная граница: если журнала в файле нет, спор о пересъёмке придётся вести без него.

Как устроен журнал. Ускорение и поворот пишутся десять раз в секунду, магнитное поле — пять, освещённость — дважды; это около 154 байт на секунду записи, с потолком в 1 МиБ. Разбор даёт три разных исхода, и они не равны: отпечаток не сошёлся — вердикт «Изменён»; отпечаток цел, но раскладка не читается — предупреждение, вердикт не меняется; журнал приложен, а поля для него в манифесте нет — файл вообще не разбирается. Последнее правило закрывает обходной путь: иначе достаточно было бы стереть поле.

Владелец телефона с полным доступом к системе может обмануть приложение

Между тем, как файл записан, и тем, как он посчитан и подписан, проходит несколько секунд — приложение в это время ждёт координаты остановки. На устройстве с полученными правами суперпользователя файл в этот промежуток можно подменить, и приложение подпишет подложенное.

Против массового случая это закрыто: чтобы получить такие права, на подавляющем большинстве телефонов нужно разблокировать загрузчик, а это состояние аппаратно фиксируется в самой аттестации и попадает в вердикт — файл получит «Не аттестовано». Мы не отвергаем такие файлы полностью: люди с нестандартной прошивкой бывают добросовестными. Но и подлинными их не называем.

Чего это не закрывает: получение таких прав в обход разблокировки загрузчика. Это существенно сложнее и заметно дороже, но возможно — и это уровень взлома, который стоит дороже любого спора, ради которого его делают. Если заказчик сомневается в конкретном устройстве, достаточно попросить снять на второй телефон; а устройство, с которого обман повторяется, видно в журнале и лишается ключа.

Время: чем оно держится и где кончается

Часы телефона владелец переводит в настройках за десять секунд, поэтому время съёмки на них не опирается. Опора другая: при каждом выходе в сеть телефон запоминает наше серверное время и показание счётчика с момента загрузки. Этот счётчик идёт и во сне, часовой пояс и перевод часов на него не влияют, а сдвинуть его без полного доступа к системе нельзя. Момент съёмки — серверное время плюс то, что натикал счётчик; точность порядка секунд в сутки, сколько бы телефон ни оставался без связи. Переведённые часы видны в отчёте отдельной строкой. На сам момент съёмки они не влияют — он известен и без них, — но на вердикт влияют: расхождение собственных часов телефона с серверной привязкой больше получаса понижает его до «момент не подтверждён». Меньше получаса — показывается, но вердикт не меняет.

Где эта опора кончается: перезагрузка без связи. Счётчик обнуляется, привязка теряется, и файл проверяется по прежнему правилу — подтверждению момента, которое сервер выдаёт на заданный компанией срок (по умолчанию двенадцать часов, в кабинете от часа до суток). Если срок к моменту съёмки истёк, вердикт станет «момент не подтверждён»: подпись, файл и устройство целы, под вопросом только «когда». Честная съёмка на телефоне с уплывшими часами клейма подделки не получает — это разные вещи, и мы их различаем словом.

Место защищено слабее, чем время

Приложение подмены координат — то, что ставят из магазина за минуту, — мы отбрасываем: Android помечает такие координаты, приложение их не берёт и записывает сам факт попытки. Подмена на уровне системы требует полного доступа к ней, а это ломает аттестацию раньше, чем координаты.

Сложнее случай — передатчик поддельных спутниковых сигналов. Такой прибор стоит десятки тысяч рублей, и телефон ему верит: признака «сигнал поддельный» в Android нет. Против него у нас три косвенных заслона. Время со спутника сверяется с нашим серверным — дешёвые передатчики транслируют выбранную дату, и она не сходится. Координаты со спутника сверяются с координатами по сотовым вышкам и Wi-Fi — их подделать на порядок сложнее, чем спутники. И портрет самого сигнала: сколько спутников, из каких созвездий, насколько ровная у них сила — у передатчика с одной антенны картина слишком гладкая.

Чего это не закрывает: аккуратный передатчик с верным временем, в месте без сотовой связи и Wi-Fi или с подделкой окружения, с правдоподобным разбросом сигнала — пройдёт. Поэтому место мы называем сильным признаком, а не доказательством, в отличие от времени, устройства и целостности файла. Каждый из этих заслонов срабатывает и у честной съёмки, и чаще всего это не обман, а плохие условия приёма. Но вердикт понижает любой из них поодиночке: одного расхождения спутниковых координат с местом по сети достаточно, чтобы вместо «подлинно» вышло «не аттестовано». Мы выбрали так сознательно — лучше лишний раз позвать человека посмотреть, чем промолчать, — и поэтому же не называем место доказательством.

Реквизит подтверждает ввод, а не реальность

Номер пломбы, VIN, накладной или заявки живёт внутри подписи, и дописать его задним числом нельзя. Но мы фиксируем ровно то, что этот текст был введён в момент этой съёмки на этом устройстве. Соответствует ли номер действительности — вопрос к тому, кто ведёт соответствующий реестр.

То же и с парой «до/после»: она доказывает, что оба кадра сняты этим устройством, в эти моменты и заявлены как одна пара. Что между ними выполнялась именно заявленная работа — она не доказывает.

Отзыв: список ключей проверяем, сертификаты по сети — нет

Это две разные вещи, и их легко спутать. Список отозванных ключей аттестации Google публикует целиком, поэтому мы возим его с собой: снимок вшит в проверку, и ключ из этого списка понижает вердикт до «не аттестовано» — без единого обращения к сети. На сервере тот же список обновляется каждые шесть часов, у страницы обновляется вместе со страницей, и дата снимка видна в отчёте.

А вот отзыв самих сертификатов цепочки (OCSP, списки CRL) мы не проверяем — сознательно. Это означало бы обращение к серверам производителя при каждой проверке файла и сломало бы главное свойство: проверка работает без сети и без доверия к нам. Цену этого выбора называем вслух: сертификат, отозванный производителем, мы не увидим.

По той же логике истёкший сертификат в цепочке — предупреждение, а не отказ, и срок сверяется со временем съёмки, а не с сегодняшним днём. Файл, снятый при действующих сертификатах, обязан остаться подлинным и через десять лет.

6. Открытый код

Проверку можно не только повторить, но и прочитать

Обещание «проверку можно повторить без нас» стоит ровно столько, сколько стоит возможность его проверить. Поэтому код, которым считается вердикт, открыт: его можно прочитать, запустить у себя и написать по нему собственный проверяльщик. Ниже — что именно открыто и что нет.

Ядро проверки целиком открыто на GitHub, два куска кода приведены прямо на этой странице. Обещание «проверьте сами» стоит ровно столько, сколько стоит возможность это сделать.

Что открыто. Ядро проверки целиком: разбор пакета, сверка подписи, разбор цепочки аппаратной аттестации и вычисление вердикта. Плюс спецификация формата — по ней можно написать свой проверяльщик с нуля, не заглядывая в наш код.

И то, что обычно не показывают. Проверка работает в двух местах — в браузере у получателя и на нашем сервере, на разных библиотеках разбора архивов. Любое расхождение между ними — ошибка, даже если оба ответа выглядят разумными. Мы проверяем это машиной: берём настоящую съёмку, портим её тем же перебором и сравниваем ответы обеих сторон посимвольно. Перебор лежит в репозитории рядом с кодом — не только результат, но и сам набор искажений.

Что не открываем и почему

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

Нашли слабость — напишите. Сообщение о найденном способе обмануть проверку для нас ценнее, чем неприятно. Пишите на info@trustvisor.ru.

Показать два куска кода, которыми считается вердикт

Два куска — прямо здесь. Чтобы не уходить со страницы: вот код, которым решается вердикт. Он скопирован из ядра проверки без изменений.

Первый. Проверяющий не пересобирает манифест по списку полей, а берёт его сырые байты и выбрасывает ровно три поля, дописанные уже после подписания. Поэтому любое лишнее поле ломает подпись: оно попадёт в проверяемые байты, и они разойдутся с подписанными.

// три поля дописываются в манифест ПОСЛЕ подписания
const DROP = new Set(["signature", "signatureAlgorithm", "attestationChain"]);

let out = "{", first = true, j = 1;
while (j < flat.length && flat[j] !== "}") {
  const ks = j;
  j = _skipString(flat, j);          // имя поля
  const key = JSON.parse(flat.slice(ks, j));
  j++; j = _skipValue(flat, j);      // значение целиком
  // всё, чего нет в DROP, остаётся в проверяемых байтах — как было
  if (!DROP.has(key)) { if (!first) out += ","; out += flat.slice(ks, j); first = false; }
  if (flat[j] === ",") j++;
}

Второй. Из чего складывается ответ, отличный от «подлинно». Ни одного скрытого условия: каждая строка — отдельная проверка, описанная выше на этой странице, и каждая называет свою причину вслух.

TIME_DOWNGRADE_REASONS = ["challengeFreshness", "serverClock", "gpstime", "deviceClock"];

downgradeReasonsOf(c) {
  r = [];
  if (c.attestation === "missing")  r.push("attestation");   // аттестации нет или её корень не признан (причина — checks.attestationRoot)
  if (st(c, "oid") === "warn")          r.push("oid");           // вопросы к владельцу ключа
  if (st(c, "rootOfTrust") === "warn")  r.push("rootOfTrust");   // загрузчик разблокирован
  if (st(c, "revoked") === "warn")      r.push("revoked");       // ключ аттестации отозван
  if (st(c, "keybound") === "warn")     r.push("keybound");      // ключ привязан не строго
  if (st(c, "motion") === "warn")       r.push("motion");        // движение не сходится
  if (st(c, "challengeFreshness") === "warn") r.push("challengeFreshness");
  if (st(c, "serverClock") === "warn")  r.push("serverClock");   // часы разошлись с сервером
  if (st(c, "deviceClock") === "warn" && c.deviceClock.downgrade)
      r.push("deviceClock");                                     // часы против привязки
  if (st(c, "gpstime") === "warn" || st(c, "gpstime") === "fail")
      r.push(c.gpstime.vsAnchor ? "location" : "gpstime");       // спутник против сервера
  if (st(c, "anchor") === "warn" && c.anchor.inconsistent)
      r.push("anchor");                                          // привязка неправдоподобна
  if (st(c, "locationNet") === "warn")  r.push("location");      // спутник против сети
  if (st(c, "gnssPortrait") === "warn") r.push("location");      // портрет как у передатчика
  if (st(c, "durationCap") === "warn")  r.push("durationCap");   // запись длиннее лимита
  return r;
}

// слово выбирается по всему набору причин, а не по первой из них
verdictOf(result) {
  if (!result.allPass)       return "TAMPERED";          // ИЗМЕНЁН
  if (!result.trustDowngrade) return "TRUSTED_CAPTURE";  // ПОДЛИННО
  return isTimeOnlyDowngrade(result)
    ? "TIME_UNCONFIRMED"                                 // МОМЕНТ НЕ ПОДТВЕРЖДЁН
    : "UNVERIFIED_DEVICE";                               // НЕ АТТЕСТОВАНО
}

// все причины про время — значит «момент не подтверждён», а не «не аттестовано»
isTimeOnlyDowngrade(result) {
  r = result.downgradeReasons;
  return r.length > 0 && r.every(x => TIME_DOWNGRADE_REASONS.includes(x));
}

Второй кусок сокращён по ширине: в исходнике вместо st(c, …) стоит внутренняя функция чтения состояния проверки, и объявлены типы. Логика не изменена — сравните построчно с verify-core.ts: функции называются так же.

Открыть репозиторий на GitHub →

Apache-2.0. В репозитории: ядро проверки, спецификация формата, набор искажений для перебора и две настоящие съёмки — фото и видео — чтобы было на чём проверять. Спецификацию и разбор по-прежнему высылаем по запросу судебному эксперту, аудитору или вашей ИТ-службе, если удобнее так.

А если вас не станет? Вопрос честный: поставщик маленький, а претензию предъявляют через год. Отвечаем устройством, а не обещанием. Ваши файлы уже подписаны, и подпись лежит внутри них; формат описан и опубликован; код, которым считается вердикт, лежит на GitHub под свободной лицензией. Проверка идёт в браузере и к нашим серверам не обращается — значит, работает и без нас. Мы не держим ваши файлы и не прячем их в свой формат: это обычные MP4 и JPEG с подписью внутри, они открываются любым плеером и просмотрщиком. Перестанет работать только то, что и должно: выпуск новых ключей и сверка по нашему реестру — а она и сегодня дополнительная опора, а не основание вердикта.

И ещё проверку можно прочитать, никуда не уходя: она выполняется у вас в браузере, а значит, приезжает вместе со страницей. Откройте на странице проверки исходный код — там весь разбор подписи, цепочки аттестации и правило вердикта, ровно то же, что в репозитории. Разница только в том, что в репозитории у этого есть история правок и тесты.

Блок III · Стандарты и данные
7. Три подхода

Метка приложения, подпись издателя и подпись устройства

Подтвердить происхождение файла пытаются тремя разными способами, и они отвечают на разные вопросы. Ниже — чем они отличаются по существу, включая мировой стандарт C2PA (Content Credentials), который делают Adobe, Microsoft, BBC и другие.

Есть мировой стандарт C2PA — он отвечает, кто издал файл и что с ним делали в редакторе. Мы отвечаем на другой вопрос: каким устройством снято. У нас C2PA не внедрён, и мы не выдаём это за сделанное.

Что сравниваемМетка в приложениисервисы фотоотчётовПодпись издателяC2PA / Content CredentialsПодпись устройстваTrustVisor
На какой вопрос отвечает «Приложение записало вот такие дату и координаты» «Кто издал этот файл и что с ним делали после» «Каким устройством и когда снято, менялся ли файл после»
Кто ставит подпись Само приложение, обычной записью в базу Любая программа с сертификатом — включая графический редактор Защищённый чип телефона; ключ не покидает устройство
Кто может проверить Только сам сервис — он показывает то, что показал изначально Любой инструмент, читающий стандарт — сильная сторона C2PA Любой — в браузере, без нас; формат публикуется
Нужен ли поставщик при проверке Да, целиком Нет, но нужен список доверенных издателей Нет; корни производителей телефонов вшиты в проверкуВшитое обновляется вместе со страницей. Копия, сохранённая на диск, замрёт на своей дате — для разбора старого файла этого достаточно, для новых устройств лучше открыть страницу заново.
Доказывает ли, что снято камерой Нет Сам по себе нет — подписать можно и отредактированный файл Да — аппаратная аттестация до чипа
Чем подтверждается время Часами сервиса Отметкой времени удостоверяющего центра Разовым подтверждением нашего сервера, вшитым чипом в сертификат ключа
Что происходит при пересылке через мессенджер Метка остаётся у сервиса, файл к ней уже не привязан Пересжатие убивает любую встроенную подпись — и стандартную, и нашу. Это свойство самих мессенджеров, а не изъян защиты: подпись удостоверяет конкретные байты, а площадка их меняет. Отправлять надо файлом, а не «как фото».

Почему это не конкуренты

C2PA и мы отвечаем на разные вопросы и лежат в разных слоях. Стандарт удостоверяет цепочку авторства: кто снял, кто отредактировал, чем. Аппаратная аттестация удостоверяет физическое происхождение: этот чип, этот момент, эти байты. Одно не заменяет другое.

Технически наш манифест можно везти внутри C2PA как собственное дополнение: чужой инструмент увидит привычный стандартный манифест, а наша проверка — полный вердикт с аттестацией.

!Честно: у нас этого пока нет

C2PA в TrustVisor не внедрён. У нас собственный формат с первого дня, и на странице выше описан именно он. Совместимость со стандартом — направление, которое мы разобрали и держим в планах, а не работающая функция.

Вторая честная оговорка: чтобы наша подпись считалась «зелёной» в чужих инструментах, нужен сертификат из их списка доверия. Российскому ИП такой сертификат западный удостоверяющий центр, скорее всего, не выдаст — и файл будет выглядеть как «подпись верна, издатель не в списке». Это ограничение среды, и обещать его обход мы не станем.

8. Данные

Что уходит с телефона, куда попадает и кто это видит

Сначала — куда девается сам файл и кто его проверяет. Потом всё остальное, что уходит с телефона, с честной причиной по каждому пункту. Сервис устроен так, чтобы собирать как можно меньше, и сверх этого списка приложение не отправляет ничего: ни рекламных трекеров, ни аналитики, ни сторонних библиотек, которые куда-то шлют данные.

С телефона уходит немногое: отпечаток файла, координаты, модель устройства и служебные метки — и по каждому пункту сказано зачем. Ни рекламных трекеров, ни аналитики, ни чужих библиотек в приложении нет.

Куда уходит снятый файл

Решает компания, а не тот, кто снимает. Режим один на все её ключи, меняется в кабинете за один клик и действует со следующей съёмки. По умолчанию включён первый — пока компания не решит иначе, ни один файл к нам не уходит. Во втором файл проходит через нас ради проверки и отправки к вам. Отдельно от режима компания может включить хранение фото для приёмки — тогда фото лежат в кабинете выбранный срок (7, 30 или 90 дней), видео — нет, только кадр-превью.

Только проверка по умолчанию

Файл остаётся на телефоне. К нам он не приходит вообще — ни целиком, ни частями.

В кабинете: видно, что съёмка состоялась, по какому коду и закрыт ли чек-лист. Самого файла нет.

Так же, как любой другой: почтой, мессенджером, ссылкой. Исполнитель отправляет его сам и сам решает кому — это осознанное действие, а не фон. На бесплатном тарифе других вариантов нет: автоматической отправки там не бывает.

Через проверку в ваш Яндекс.Диск

Файл приезжает к нам, проверяется и тут же уходит в вашу папку — в /TrustVisor/ и дальше по номеру заявки.

В кабинете: вердикт, размер, заявка, путь в вашей папке. При включённом хранении — ещё и само фото: его можно открыть, принять или вернуть на пересъёмку и скачать с подписью, пока не вышел срок.

На нашем сервере файл живёт секунды: столько, сколько идёт проверка и отправка. Если ваш Диск недоступен — отозван ключ доступа или кончилось место, — файл ждёт у нас с повторными попытками, но не дольше недели, и в кабинете видно причину. Содержимое присланных файлов мы не просматриваем и не используем.

Честная оговорка: чтобы отправить файл в вашу папку, ключ доступа к вашему диску хранится у нас, зашифрованным. Сервер каждый раз просит у Яндекса одноразовый адрес для загрузки. Ключ выдаёте вы и в любой момент отзываете на стороне Яндекса.

Что именно кладётся в вашу папку

Выбор из трёх, переключается в кабинете. По умолчанию — пакет: так было всегда, и так ничего нельзя испортить по неосторожности.

Что кладёмЧто этоКому подходит
Пакет .trustvisorпо умолчанию Один файл: видео или снимок, манифест, подпись и журнал датчиков. Открывается нашей проверкой или вашим кодом из открытого репозитория. Ни одна программа его не пересохраняет, а значит, и не портит подпись. Тем, кто складывает доказательства в архив и смотреть их не собирается
Подписанное видео или снимок Обычный MP4, PNG или JPEG: открывается любым плеером и просмотрщиком, а манифест, подпись и журнал датчиков лежат внутри него — проверку он проходит так же, как пакет. Это тот же файл, который приложение отдаёт по кнопке «Поделиться». Тем, кому съёмку нужно смотреть, а не только хранить
Оба рядом В папке заявки оказываются два файла. Места занимают примерно вдвое больше. Большинству: смотреть удобно, нерушимая копия лежит рядом

Разница между первым и вторым — не в доказательстве, а в хрупкости. Подписанное медиа теряет подпись, если его пересохранить: редактором, конвертером или пересылкой через мессенджер, который пережимает вложения. Пакет так испортить нельзя — его никто не пересохраняет. Поэтому по умолчанию стоит пакет.

Автопроверка: что происходит, пока никто ничего не нажимает

Так работает доставка. Всё это занимает секунды и не задерживает съёмку: к моменту отправки файл уже подписан и лежит на телефоне.

Телефон спрашивает, куда грузить

Приложение не знает и не решает этого само: оно называет ключ, а сервер по ключу находит компанию и её режим.

Сервер выдаёт одноразовый адрес

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

Файл приходит к нам

Нет сети — не беда: пакет ложится в очередь на телефоне, и её разгребает фоновая задача — приложение для этого открывать не нужно, очередь переживает перезагрузку. Снимающий может включить «только по Wi-Fi» — тогда она дождётся Wi-Fi.

Проверка тем же кодом, что у вас в браузере

Подпись, отпечаток, цепочка аттестации, момент съёмки — тот же вердикт, который получил бы любой, перетащив файл на страницу проверки.

Вердикт в журнал, письмо и вебхук

Запись появляется в «Проверках», письмо уходит по настройке тревог, событие — в вашу CRM. Файл уходит в ваш Яндекс.Диск и у нас удаляется.

Если доставка выключена, вердикт появится, когда файл проверят: перетащат в кабинете, отправят через API или откроют на странице проверки. Ещё один путь — проверка по коду: исполнитель, снявший по одноразовому коду, сам загружает файл на отдельную страницу без входа и ключей, пропуском служит сам код; вердикт с привязкой к заявке уходит в ваш журнал, а файл не хранится дольше самой проверки.

Сколько файл лежит у нас и чем удаляется

ЧтоСколькоОткуда это число
ОбычносекундыПока идёт проверка и отправка в ваш Диск. Как только Яндекс подтвердил приём — файл у нас удаляется.
Если ваш Диск недоступенне дольше 7 днейОтозван ключ, нет места, Яндекс не отвечает — повторяем по нарастающим интервалам, от 5 минут до 12 часов. Через 12 попыток или 7 дней сдаёмся и удаляем; причина видна в кабинете.
Очередь на отправку у компании5 ГБСтолько может ждать у нас одновременно. Заполнилась — новые загрузки не принимаются, пока не уедут старые.
Ссылка на скачиваниенетФайл в вашей папке, а не у нас. Удалить застрявший досрочно — кнопка «Удалить» в кабинете. Фото при включённом хранении скачиваются с подписью прямо из кабинета.
Фото при включённом хранении для приёмки7, 30 или 90 дней — как выберет компанияНастройка в кабинете; по истечении — удаляются автоматически. Видео не хранится, только кадр-превью.

После удаления файла остаётся его карточка в кабинете: время съёмки и приёма, пункт задания, итог проверки, решение приёмки, координаты с точностью и расстояние до точки объекта — для отметки «на объекте» и акта. Карточки хранятся, пока у компании есть доступ к кабинету по платному тарифу; после его окончания — месяц на выгрузку, затем удаляются, и перед этим компании приходят письма. Если файл только едет на ваш Яндекс Диск без хранения, карточки нет: файл с координатами внутри проходит через нас и удаляется вместе с отправкой.

Полный список того, что уходит с телефона

Что уходит с телефонаЗачемГде остаётся и кто видит
Идентификатор устройстваAndroid ID, при активации Чтобы ключ нельзя было передать: лицензия привязывается к конкретному устройству — один ключ, одно устройство, чужой телефон по нему не снимет. Это не IMEI, не серийный номер, не номер телефона — идентификатор Android; сам по себе он личность не устанавливает и меняется при сбросе устройства к заводским настройкам. Но в кабинете он показан рядом с именем держателя ключа, и там же видно, когда телефон первый и последний раз выходил на связь. Связь эта — не чаще раза в сутки при открытии камеры, так что компания видит день, а не время съёмок и не их число.
Лицензионный ключ или код заявки Чтобы отличить, кому что можно: ключ определяет тариф и права — качество, геометку, лимиты, доставку. Для одноразового кода сервер же считает, сколько уже снято, — иначе лимит «пять кадров по заявке» можно было бы обойти. В кабинете компании — только по её собственным ключам.
Разрешение на съёмкутолько по разовому коду и на бесплатном тарифе Одноразовое число, которое чип вплетает в свою справку, — чтобы справку нельзя было переиспользовать от старой съёмки. Им же держится лимит: «по этому коду три видео» иначе обходился бы прямо на телефоне. В журнале съёмок кабинета: время, «фото» или «видео», код и заявка. Ни координат, ни содержимого. Съёмка постоянным ключом сюда не попадает — приложение вообще не спрашивает разрешения, поэтому когда и сколько снимал сотрудник, компания в кабинете не видит. Что она видит — день последнего выхода телефона на связь, строкой выше.
Отпечаток файлатолько SHA-256, сразу после съёмки Вторая опора, отдельная от файла: позже, в споре, можно показать, что отпечаток лёг в реестр в такой-то момент — значит файл существовал уже тогда, его не могли собрать вчера под нужный ответ. В реестре отпечатков. По отпечатку нельзя восстановить ни картинку, ни звук, ни координаты — это односторонняя свёртка.
Счётчикиесли компания включила отчётность Раз в период — два числа: сколько фото и сколько видео. Начало периода считает сервер, а не телефон, чтобы цифры нельзя было подкрутить переводом часов. В этом отчёте — только суммы: ни содержимого, ни координат, ни времени отдельных съёмок, ни имён файлов. Это и есть всё, что компания узнаёт о работе постоянного ключа: журнал съёмок ведётся только по разовым кодам, строка выше.
Координаты Часть доказательства — отвечают на вопрос «где снято». Вшиваются внутрь подписанного файла и на наши серверы сами по себе не отправляются. В нашей базе их нет нигде — ни в журнале съёмок, ни в реестре, ни в логах. Уходят к нам только вместе с самим файлом и только если компания включила доставку. На бесплатном тарифе координат не бывает вовсе.
Сам файлтолько при включённой доставке Включает доставку владелец ключа в кабинете, не тот, кто снимает. Сразу после съёмки пакет целиком — с геометкой, временем и моделью устройства — уходит через нас в хранилище компании. Разбор режимов — выше. В Яндекс.Диске компании. У нас — запись о файле: имя, размер, отпечаток, вердикт, путь в её папке.
Чего мы не собираем вообще Содержимое съёмок по умолчанию — оно остаётся на телефоне. Номера банковских карт — при оплате они вырезаются до записи в лог и в базу. IMEI, серийный номер, номер телефона, список контактов, список установленных приложений — приложение их даже не запрашивает: у него всего восемь разрешений, и все по делу. Шесть — камера, микрофон, интернет, состояние сети и две геолокации. Ещё два нужны фоновой доставке: не дать телефону уснуть посреди загрузки и вернуть недоставленное в очередь после перезагрузки. Последние два «обычные» — Android не спрашивает их у человека.

Кто что видит.

Телефон исполнителя

Снятое остаётся здесь. Отправить его — отдельное осознанное действие: человек сам выбирает получателя и способ. На бесплатном тарифе автоматической отправки нет вовсе.

При включённой доставке приложение показывает предупреждение с подтверждением и постоянную строку в настройках: съёмки уходят такой-то организации, отключить это в приложении нельзя — этим распоряжается она. Мы сознательно не даём исполнителю выключатель: возможность отключить доставку — это возможность спрятать неудобный кадр. Отказаться он может иначе — не снимая по этому ключу.

Кабинет компании

Свои ключи и устройства, на которых они работают. Журнал: когда по какому коду началась съёмка, сколько кадров, закрыт ли чек-лист, отмечено ли получение. История проверок с вердиктами. Если включена доставка — присланные файлы.

В журнале съёмок по кодам координат нет. Они есть только в карточке снимка, принятого в кабинет на хранение, — для отметки «на объекте» и акта; заказчику по ссылке, в API и вебхуки они не уходят. Перемещений исполнителя между съёмками кабинет не видит. До данных другой компании из кабинета не дотянуться.

Реестр отпечатков

Короткая строка — SHA-256 файла — с отметкой времени. Сверка публичная и анонимная: на запрос по отпечатку реестр отвечает только «есть такой / нет» и дату. Ни компании, ни номера заявки в ответе нет. «Не найден» — нейтральный факт, а не приговор: съёмка могла идти без связи.

Честная оговорка: реестр ведём мы, и отметка времени в нём наша. Для спора, где не доверяют уже нам самим, этого мало — полностью независимым такое подтверждение делает служба отметок времени, которую ведём не мы, — её у нас пока нет.

Получатель файла

Тот, кому файл передали и кто открыл его на проверку, видит всё, что внутри подписи: время, координаты, устройство, реквизит — и вердикт. С приложения 1.4 туда же попадают координаты по сотовой сети и Wi-Fi и портрет спутникового сигнала: они нужны проверке, чтобы отличить настоящий приём от подделанного, и видны тому же получателю. На наши серверы они, как и обычные координаты, сами по себе не уходят. Проверка идёт в его браузере, без наших серверов.

Чего не видим мы сами: содержимое проходящих через нас файлов не просматриваем и не используем; координаты снимков, принятых в кабинет, лежат в их карточках для сотрудников компании, и мы их не используем; пароли, коды входа и PIN лежат у нас только в виде необратимых отпечатков — даже мы не можем их прочитать, только сверить.

Блок IV · Интеграция и API
9. Интеграция

Как встроить в свою систему

Сервис полностью работает из кабинета, без единой строки кода. Но если у вас CRM, система заявок или 1С, всё то же самое можно делать из неё: выпускать коды на съёмку, узнавать, что съёмка состоялась, и проверять файлы. Ниже — что именно доступно, что для этого нужно и как это подключают.

Всё работает из кабинета, без единой строки кода. Интеграция нужна только чтобы делать то же самое из вашей CRM или 1С.

Что нужно с вашей стороны

Тариф Business — для одноразовых кодов, вебхуков и отчётов. Кабинет и проверка по ключу есть и на Pro, доставка файлов на Яндекс.Диск — только на Business.

Ключ API — создаётся в кабинете, раздел «Интеграции и API», за минуту.

Публичный адрес с https — только если хотите получать вебхуки.

Событий два: captured — по коду сняли (поля at, key, case_id) и verified — файл проверен (at, verdict, file_name, source, key). Вердикт приходит именем: TRUSTED_CAPTURE, TIME_UNCONFIRMED, UNVERIFIED_DEVICE, TAMPERED — теми же, что в открытом коде.

Чего не нужно

Ничего устанавливать на свои серверы, никаких библиотек и SDK — просто HTTP.

Обращаться в поддержку за ключом: он создаётся и отзывается самостоятельно.

Отдельных ключей на операции — один ключ работает для всего.

Опрашивать статусы, если подключены вебхуки.

Два адреса и один ключ

api.trustvisor.ru — коды, статусы, отчёты, вебхуки, доставка.

portal.trustvisor.ru — проверка файлов.

Ключ передаётся в заголовке X-Api-Key. Показывается один раз при создании; потеряли — отзовите и создайте новый.

Типовой сценарий — страховая, СТО, логистика, стройка, любой другой.

Заявка

В вашей системе создаётся заявка. Система вызывает наш API и получает код на съёмку, привязанный к номеру заявки, — с нужными условиями: сколько кадров, какое качество, нужна ли геометка.

Код исполнителю

Код уходит исполнителю так, как вы обычно общаетесь: СМС, мессенджер, письмо. Ему не нужен аккаунт — только приложение и код.

Съёмка

Исполнитель вводит код и снимает. Приложение само соблюдает условия кода и ведёт чек-лист обязательных кадров.

Событие

О съёмке ваша система узнаёт от нас вебхуком или опрашивает статус кода — заявка двигается по воронке без ручной работы.

Проверка

Полученный файл система отправляет на проверку — вердикт возвращается за секунды и сам записывается в журнал кабинета.

Справочник: какие операции есть, что приходит в ответ, вебхуки и примеры запросов

Что можно вызвать. Все операции — обычные HTTP-запросы с JSON; полные примеры на curl, JavaScript и 1С — в документации.

ОперацияКакЧто получаете
Выпустить код на съёмку POST /v1/business/case-codes с номером вашей заявки. Условия по желанию: лимиты фото и видео (потолок 10 видео и 30 фото подставляется, если не указать), качество, соотношение сторон, геометка — обязательна, по желанию или выключена, требование постоянной связи, максимальная длительность, чек-лист до 20 пунктов. Код вида TV-XXXX-XXXX и два срока: сутки до первого ввода в приложение, дальше сутки с активации.
Узнать состояние кода GET /v1/business/case-codes/{код} — один код или все разом. Не введён / в работе / истёк; состоялась ли съёмка; сколько снято из разрешённого; прогресс чек-листа; отмечен ли файл полученным.
Отметить, что файл дошёл POST …/case-codes/{код}/mark-received Отметка «получен» в кабинете и в статусе кода.
Отчёт по заявке GET …/case-codes/{код}/report Выпуск, активация, каждая съёмка, чек-лист, получение, все проверки — собирается из журналов, видео на сервере нет.
Проверить файл POST portal.trustvisor.ru/v1/verify, файл в поле package. Вердикт — TRUSTED_CAPTURE (подлинно), TIME_UNCONFIRMED (момент не подтверждён), UNVERIFIED_DEVICE (не аттестовано), TAMPERED (изменён) — плюс момент съёмки с указанием, чем он подтверждён, каждая проверка поимённо и разобранный состав съёмки: номер заявки, реквизит, пункт чек-листа, координаты, время, модель устройства. Файл не хранится дольше проверки; каждая проверка попадает в журнал «Проверки».
Дать исполнителю проверить себя POST /v1/verify-by-code?code=TV-… — без ключа и без входа, сам код служит пропуском; то же из браузера — страница portal.trustvisor.ru/upload.html. Вердикт с привязкой к заявке — в ваш журнал; письма и вебхуки срабатывают те же. Подрядчик убеждается, что прислал годное, до того как уедет с объекта.
Получать события Вебхук на ваш адрес — создаётся в кабинете, подробности ниже. Сообщение, что файл проверен, и сообщение, что по коду состоялась съёмка.
Письма о вердиктах Настройка в кабинете. Письмо при вердикте «изменён» — включено по умолчанию; при «не аттестовано» — по желанию.
Доставка файлов Настройка в кабинете; список присланных с вердиктами и путями — по ключу (GET /v1/business/uploads). Файлы проверяются при приёме и уходят в ваш Яндекс.Диск; у нас остаётся журнал с вердиктом и путём. Пределы тут два, и оба про очередь, а не про хранение: очередь в самом телефоне держит сто пакетов (переполнилась — вытесняются самые старые, свежая съёмка нужнее), а у нас в ожидании отправки — до 5 ГБ на всех. Это буфер на случай, когда ваше хранилище недоступно, а не полка: застрявший файл мы пробуем отправить двенадцать раз с нарастающей паузой и удаляем не позже недели. Хранилища для видео у нас нет; фото — только по включению компании и только на срок приёмки, это не архив.
Журналы GET /v1/business/shots, …/devices, …/verifications, …/activity Съёмки, устройства, проверки и действия в кабинете — чтение по ключу. Координат в ответах нет: снимки и их карточки по ключу API не отдаются.

Вебхуки: события в вашу систему. Вместо опроса статусов мы сами отправляем POST-запрос на ваш адрес. Вебхук создаётся в кабинете — намеренно не по API: ключ API хранится в чужих конфигах и логах и утекает легче, чем вход в кабинет. При создании выдаётся секрет подписи, он показывается один раз.

СобытиеКогда приходитОговорка
verifiedПроверка пакета записана в журнал — из кабинета, по API или через самопроверку исполнителя. В теле — вердикт, имя файла, источник.Работает для любой проверки по вашим ключам и кодам.
capturedПервая завершённая съёмка по коду заявки. В теле — код и номер заявки.Сообщение о съёмке шлёт приложение версии 1.3.0 и новее; у исполнителя должна стоять актуальная версия.

Каждый запрос несёт заголовки с именем события, номером доставки и подписью X-TrustVisor-Signature: sha256=… — HMAC-SHA256 сырого тела вашим секретом, так что чужой запрос к вашему адресу не выдаст себя за наш. Ответьте любым кодом 2xx за 6 секунд. Не успели или упали — повторим до 6 раз с нарастающими интервалами: 1 минута → 5 минут → 30 минут → 2 часа → 6 часов; при повторе номер доставки тот же, обрабатывайте события идемпотентно. До 5 вебхуков на компанию, адрес — только внешний.

Как это выглядит в коде. Три примера — выпуск кода, ответ проверки файла и тело вебхука. Полный набор с примерами на JavaScript и 1С — в документации.

Выпустить код на съёмку под вашу заявку:

curl -X POST https://api.trustvisor.ru/v1/business/case-codes \
  -H "X-Api-Key: ваш_ключ" -H "Content-Type: application/json" \
  -d '{"case_id": "ОСАГО-4471", "max_videos": 2, "max_photos": 10,
       "gps_mode": "required", "checklist": ["4 угла", "VIN", "одометр"]}'

→ {"key": "TV-X7G9-2KPL", "case_id": "ОСАГО-4471",
    "expires_at": "2026-09-05T09:12:00Z", "max_videos": 2, "max_photos": 10}

Проверить присланный файл. Ответ ниже — настоящий, получен на демонстрационном пакете с этой страницы; длинные значения обрезаны:

curl -X POST https://portal.trustvisor.ru/v1/verify \
  -H "X-Api-Key: ваш_ключ" -F "package=@REC_20260622_0702.trustvisor"

→ {
  "verdict": "TRUSTED_CAPTURE",
  "isPhoto": false,
  "trustDowngrade": false,
  "moment": 1787805891039,        // момент съёмки, мс UTC
  "momentSource": "token",        // чем подтверждён: anchor | token | device
  "offlineHours": null,           // сколько телефон был без связи до съёмки
  "deviceClockShiftMin": null,    // расхождение часов телефона с сервером
  "locationMock": false,          // замечено приложение подмены координат
  "checks": {
    "session": true, "pubkey": true, "hash": true,
    "sigStart": true, "sigEnd": true, "attestation": true,
    // "attestationRoot": { "state": "warn", "msg": … } — есть только когда корень цепочки не из списка
    // доверенных: программный корень Android или корень не из списка производителей
    "oid":                { "state": "pass" },
    "rootOfTrust":        { "state": "pass" },
    "challengeFreshness": { "state": "pass" },
    "anchor":             { "state": "skip" },
    "deviceClock":        { "state": "skip" },
    "serverClock":        { "state": "pass" },
    "timestamp":          { "state": "pass" },
    "keybound":           { "state": "pass" },
    "gpstime":            { "state": "skip" },
    "locationNet":        { "state": "skip" },
    "gnssPortrait":       { "state": "skip" },
    "locationMock":       { "state": "skip" },
    "durationCap":        { "state": "skip" },
    "motion":             { "state": "na" }
  },
  "meta": { "sm": { манифест начала записи },
            "em": { манифест конца: хеш видео, координаты, движение } }
}

Демонстрационный пакет снят приложением версии 1.2.1, поэтому проверки, появившиеся в версии 1.4, отвечают skip — сравнивать в таком файле нечего. Для съёмки из свежего приложения на их месте настоящие значения: anchor подтверждает момент по серверным часам и momentSource становится anchor, deviceClock показывает расхождение часов телефона, locationNet сверяет координаты со спутника с координатами по сотовой сети и Wi-Fi, gnssPortrait отдаёт портрет спутникового сигнала.

Каждая проверка возвращается поимённо, поэтому в своей системе можно не просто показать вердикт, а объяснить его: например, отдельно отметить, что подпись верна, но телефон не выходил в сеть и подтверждение момента просрочено.

Вебхук, который мы отправим на ваш адрес после проверки:

POST https://ваша-crm.ru/hooks/trustvisor
X-TrustVisor-Event: verified
X-TrustVisor-Delivery: 41f0c3b2-…
X-TrustVisor-Signature: sha256=hmac_тела_вашим_секретом

{"event": "verified", "at": "2026-09-04T12:46:21Z",
 "verdict": "TAMPERED", "file_name": "obekt-14.trustvisor", "source": "api"}

Проверьте подпись — и можно доверять телу запроса: sha256= плюс HMAC-SHA256 сырого тела вашим секретом. Событие captured устроено так же и приходит, когда по коду состоялась первая съёмка.

Рецепты для типовых систем.

Битрикс24

Роботы Битрикса умеют слать исходящие вебхуки, но не умеют добавлять свой заголовок с ключом — прямой вызов из робота не собрать. Рабочие пути: связка через Albato, ApiX-Drive, n8n или Make, либо небольшое локальное приложение Битрикс24 на вашем хостинге, которое принимает событие сделки, вызывает наш API и двигает стадию по нашим вебхукам.

amoCRM

Salesbot и digital pipeline умеют шаг «отправить вебхук» — тоже без своих заголовков, поэтому схема та же: no-code-платформа или свой мини-обработчик, который держит ключ и ходит в наш API.

1С

Из 1С наш API вызывается штатно, без посредников: HTTPСоединение к api.trustvisor.ru, заголовок с ключом, JSON в теле. Пример на встроенном языке — в документации.

Albato, ApiX-Drive, n8n, Make, свой сайт

Любая платформа связок с шагом «HTTP-запрос с заголовками» подключается за вечер: триггер вашей CRM → POST к нам с ключом → записать код из ответа в поле сделки. Наши вебхуки эти платформы принимают штатным триггером. Свой сайт или внутренняя система — просто HTTP: выпуск кода один POST, проверка файла один POST, события — вебхук.

Лимиты запросов и коды ошибок

Лимиты и ошибки. Выпуск кодов — 30 запросов в минуту; все точки портала, включая проверку файла, — 20 запросов в минуту с одного адреса. Если ваши сотрудники выходят в интернет через общий адрес, счёт идёт на всю компанию сразу — напишите нам, поднимем под ваш объём. Это настройка, а не свойство системы.

КодЗначение
401Не передан ключ, либо он неверный или отозван.
400Запрос не удалось разобрать; для вебхуков — недопустимый адрес или превышен лимит в 5 вебхуков.
402 / 403 client_plan_requiredКоды на съёмку доступны только на тарифе Business.
403 api_key_not_allowed_hereОперации нужен вход в кабинет — ключ API её не открывает: покупка ключей, настройка доставки, удаление файлов, создание и удаление вебхуков, история платежей.
404Код или вебхук не найден — или принадлежит другой компании.
413 / 422Файл слишком большой / файл отклонён как подозрительный до полной проверки.
429Превышен лимит запросов.

Без кода вообще. Коды и задания выпускаются в кабинете, а регулярные задания можно поставить на расписание — без API и без программиста.

Документация и помощь. Полное описание с примерами на curl, JavaScript и 1С — portal.trustvisor.ru/docs.html. Нужна помощь со связкой под вашу систему — напишите на info@trustvisor.ru, поможем собрать.

Попробуйте на одной команде

Мы не просим менять процессы, выделять бюджет или внедрять что-то «по всей компании». Выберите одну точку, где приёмка отнимает больше всего времени: одну бригаду, один филиал или один объект. Две недели они снимают как обычно — просто через наше приложение.

  • Ключи выпустим мы — с вашей стороны ничего настраивать не нужно
  • Обучение — три минуты: приложение выглядит как обычная камера
  • Не увидели пользы — просто перестали снимать. Ни обязательств, ни хвостов

Через две недели у вас цифры: сколько съёмок, сколько прошло проверку — и как выглядит спорный случай, когда у вас есть подпись.

Месяц бесплатно — по договорённости, без карты: условия подтверждаем письмом. Если решите продолжить, выберете любой тариф. Срок можно продлить по договорённости:

  • +2 месяцаза обратную связь
Тарифы

Проверьте на своём файле

Первый шаг делается сегодня и без нас: снимите что угодно, откройте проверку и посмотрите вердикт. Бесплатно, без регистрации и без разговора с нами — это единственный способ понять, годится ли вам сервис.

Проверить файл

Тарифы и что входит в каждый

Функции
Предложить функцию

Опишите, чего не хватает — читаем всё. Полезно указать сферу бизнеса, если задача с ней связана.

Business
Подключить тариф Business

На него придут коды доступа и инструкция.
Это подписка: карта привязывается один раз, дальше — автоматическое ежемесячное списание, пока вы не отмените.
Отменить подписку или запросить возврат — напишите на info@trustvisor.ru.
Документ
Публичная оферта

Редакция от 15 октября 2026 г.

Индивидуальный предприниматель Савкин Михаил Андреевич (ОГРНИП 326210000056797, ИНН 212885679288), применяющий специальный налоговый режим «Налог на профессиональный доход» (далее — «Исполнитель»), публикует настоящий документ, являющийся официальным предложением (публичной офертой) в адрес любого дееспособного физического или юридического лица (далее — «Пользователь») заключить договор на изложенных ниже условиях. В соответствии с п. 2 ст. 437 ГК РФ, акцепт этих условий равносилен заключению договора.

1. Термины и определения

«Приложение» / «Программа» — программа для ЭВМ «TrustVisor» для Android, предназначенная для съёмки фото- и видеоматериалов с формированием криптографической подписи и метаданных, подтверждающих подлинность и целостность материала.

«Сайт» — trustvisor.ru и его поддомены (включая api.trustvisor.ru и portal.trustvisor.ru).

«Верификатор» — модуль (веб-страница и/или API) для проверки подлинности файлов, сформированных Приложением.

«Личный кабинет» — раздел Сайта, доступный Пользователю платного Тарифа после входа, предназначенный для управления Лицензионными ключами, Одноразовыми кодами доступа и Заданиями, приёмкой снятых материалов, доставкой файлов, интеграциями и подпиской.

«Лицензионный ключ» — код доступа к функциональности Приложения в пределах установленного лимита устройств.

«Тариф» — «Free» (бесплатный), «Pro» (платный, для собственных сотрудников Пользователя) или «Business» (платный, включает выпуск Одноразовых кодов доступа и Заданий, приёмку снятых материалов, акт и реестр, доставку и хранение файлов, а также приобретение дополнительных Лицензионных ключей на условиях раздела 3 настоящей Оферты).

«Одноразовый код доступа» — код, выпускаемый Пользователем тарифа «Business» для однократной съёмки в рамках отдельной заявки: третьим лицом — клиентом или подрядчиком Пользователя — в Приложении или по ссылке в браузере, либо сотрудником Пользователя в виде Задания.

«Задание» — Одноразовый код доступа со списком нужных кадров, объектом и сроком сдачи, который Пользователь тарифа «Business» выдаёт своему сотруднику с Лицензионным ключом; Задание появляется у сотрудника в Приложении. Задания выпускаются вручную или по расписанию.

«Учётный месяц» — календарный месяц, за который считается количество выпущенных Одноразовых кодов доступа.

«Расчётный период» — календарный месяц с даты первой оплаты.

«Подписка» — периодическая (ежемесячная) форма оплаты доступа к платному Тарифу («Pro» или «Business»).

2. Предмет договора

Исполнитель оказывает Пользователю услугу по предоставлению технического доступа к функциональности Приложения (в том числе посредством выдачи и серверной валидации Лицензионного ключа) в объёме, соответствующем выбранному Тарифу.

В состав услуги по платным Тарифам также входят: доступ к Личному кабинету; проверка файлов через Верификатор, в том числе программным способом по ключу доступа к API; передача уведомлений о событиях (съёмка состоялась, файл проверен) на указанный Пользователем адрес его информационной системы. По Тарифу «Business» дополнительно: выпуск Одноразовых кодов доступа и Заданий, в том числе по расписанию; приёмка снятых материалов в Личном кабинете (решения «принято» и «доснять» с указанием причины); акт по заявке и реестр за период; автоматическая доставка снятых файлов в выбранное Пользователем хранилище; хранение снятых фотографий в Личном кабинете для просмотра и приёмки на выбранный Пользователем срок (7, 30 или 90 суток либо иной, согласованный с Пользователем) ; сборка отчёта по бланку Пользователя в форматах PDF и Word, хранение бланков, отчётов и приложенных к ним документов (PDF, JPEG, PNG); с версии Приложения 1.9.1 — удаление отправленных снимков с устройства Конечного пользователя в срок, выбранный Пользователем (сразу или через 1–30 дней после отправки), и только после того, как сервер подтвердил их сохранение у Пользователя, — если Пользователь включил эти возможности в Личном кабинете.

Приложение устанавливается Пользователем самостоятельно из магазина приложений на условиях отдельного Лицензионного соглашения (EULA); предмет настоящей Оферты — именно услуга доступа, а не передача прав на само программное обеспечение. Приложение предоставляется «как есть» (as is).

3. Тарифы и функциональность

Free — 0 ₽, бессрочно. 3 видео в день, 10 фото в день, только онлайн-съёмка (нужно подключение к интернету в момент записи), без GPS в манифесте, без Блокнота.

Pro — 600 ₽ за ключ в месяц (один ключ — один пользователь/устройство). Без ограничений по количеству видео и фото, возможность офлайн-съёмки, запись геоданных в манифест, Блокнот для рабочих записей, доступ к Личному кабинету, интеграция API верификатора. При покупке от 10 ключей одновременно — 400 ₽ за ключ в месяц.

Business — 5000 ₽ в месяц. Включает всё перечисленное в Тарифе «Pro», а также: выпуск и отслеживание Одноразовых кодов доступа — для третьих лиц (например, клиента или подрядчика Пользователя в рамках отдельной заявки) и в виде Заданий своим сотрудникам, в том числе по расписанию; приёмку снятых материалов в Личном кабинете; акт по заявке и реестр за период; автоматическую доставку файлов в хранилище Пользователя и хранение фотографий для приёмки. В Тариф входит до 100 Одноразовых кодов доступа (включая Задания) в учётный месяц.

Одноразовые коды сверх включённого количества. Каждые следующие 100 Одноразовых кодов доступа (включая Задания) в пределах одного учётного месяца оплачиваются дополнительно в размере 4000 (четыре тысячи) рублей. Эта доплата начисляется только начиная с даты, о которой Исполнитель уведомляет Пользователей тарифа «Business» по электронной почте и на Сайте не позднее чем за 10 дней до неё; до этой даты доплата не начисляется, а в учётном месяце, на который приходится эта дата, коды считаются начиная с неё. После начала начисления плата начисляется в момент выпуска кода, которым начинается очередная сотня (101-й, 201-й и так далее), и списывается с привязанной банковской карты, а при её отсутствии выставляется счётом. Выпуск кода не блокируется. Пользователь видит текущий расход кодов и начисленные доплаты в Личном кабинете.

Индивидуальные условия. Исполнитель вправе по соглашению с отдельным Пользователем установить иное включённое количество Одноразовых кодов доступа, иную стоимость или иные параметры Тарифа. В этом случае дополнительная плата, предусмотренная предыдущим абзацем, к такому Пользователю не применяется, а действуют согласованные с ним условия. Настоящий абзац не создаёт обязанности Исполнителя предоставлять аналогичные условия другим Пользователям.

Пользователю Тарифа «Business» также доступно приобретение Лицензионных ключей (как в Тарифе «Pro») по цене 400 (четыреста) рублей в месяц за ключ вне зависимости от количества приобретаемых ключей, а также золотая цветовая тема Приложения для таких ключей.

«Объекты» — 900 (девятьсот) рублей в месяц за каждый Объект, но не менее чем за 2 (два) Объекта — 1800 (одна тысяча восемьсот) рублей в месяц. Объект — место работ, которое Пользователь задаёт в Личном кабинете точкой на карте и радиусом; зоны и метки внутри Объекта отдельно не оплачиваются. Тариф включает всё, что входит в Тариф «Business». Лицензионные ключи, Одноразовые коды доступа (включая Задания) и пользователи Личного кабинета предоставляются без ограничения количества и без дополнительной платы; доплата за Одноразовые коды сверх включённого количества не применяется. Плата за месяц определяется по числу Объектов в Личном кабинете, кроме перенесённых в архив, на дату списания или выставления счёта; Объект, добавленный в течение месяца, оплачивается начиная со следующего списания. Тариф подключается по заявке Пользователя: Исполнитель включает его в Личном кабинете. Оплата ежемесячная — списанием с привязанной банковской карты или по счёту. Закрепление цены на срок и иные условия устанавливаются соглашением об индивидуальных условиях (абзац «Индивидуальные условия»); пока цена закреплена соглашением, отказ от Тарифа «Объекты» и переход на другой Тариф — по соглашению Сторон. Бесплатный период, если он предоставляется, — по соглашению Сторон и не более 3 (трёх) месяцев. При переходе с Тарифа «Объекты» на Тариф «Business» доступ далее оплачивается по цене Тарифа «Business»: абонентская плата 5000 (пять тысяч) рублей в месяц и плата за каждый Лицензионный ключ, в том числе выданный без оплаты.

Исполнитель вправе менять состав функциональности Тарифов, уведомляя Пользователей платного Тарифа не менее чем за 10 дней, если изменение сокращает оплаченную функциональность.

4. Порядок заключения договора

Акцептом Оферты признаётся установка Приложения и активация в нём Лицензионного ключа, либо оплата Тарифа «Pro» или «Business». Договор считается заключённым с момента акцепта и действует до прекращения использования Приложения либо расторжения в порядке настоящей Оферты.

5. Права и обязанности сторон

Исполнитель обязуется предоставить доступ к Приложению по оплаченному Тарифу, поддерживать техническую работоспособность Приложения и связанных серверных сервисов на уровне разумных усилий, уведомлять об изменении условий Оферты. Исполнитель вправе приостанавливать действие ключа при нарушении Пользователем условий Оферты и привлекать третьих лиц (операторов платежей, хостинг) для исполнения своих обязательств.

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

Если Пользователь передаёт Лицензионный ключ и доступ к Приложению третьим лицам (в том числе своим работникам, далее — «Конечные пользователи»), он самостоятельно и за свой счёт обеспечивает соблюдение в отношении них законодательства о персональных данных, изображении гражданина (ст. 152.1 ГК РФ) и трудового законодательства (гл. 14 ТК РФ), включая получение необходимых согласий и уведомление до начала использования Приложения. Исполнитель не является стороной этих отношений. Пользователь вправе включить по своим Лицензионным ключам отчётность об использовании (агрегированные счётчики снятых фото и видео, без содержимого файлов), автоматическую доставку снятых файлов и хранение фотографий для приёмки, а также выдавать Конечным пользователям Задания; в этом случае Конечный пользователь информируется об этом в Приложении, а обязанность уведомить его до начала использования и оформить необходимые согласия лежит на Пользователе как работодателе (заказчике). Условия, на которых Исполнитель обрабатывает персональные данные Конечных пользователей по поручению Пользователя, определены разделом 16 настоящей Оферты (поручение на обработку персональных данных).

Создавая ссылку на акт или включая отправку акта и реестра Получателю (раздел 16), Пользователь как оператор подтверждает, что у него есть правовое основание предоставить Получателю содержащиеся в них персональные данные: Конечные пользователи уведомлены об этом или дали согласие в форме, требуемой законом (для работников — с учётом ст. 88 ТК РФ). В акт попадают только снимки, принятые Пользователем; Пользователь отвечает за то, чтобы в них не было персональных данных сверх нужного для приёмки работ. Пользователь сам выбирает Получателя и адреса для отправки, отвечает за передачу ему ссылки и доводит до Получателя условие о конфиденциальности персональных данных (ст. 7 152-ФЗ).

Исполнитель применяет налоговый режим «Налог на профессиональный доход» (НПД). В соответствии с п. 8 ч. 2 ст. 4 Федерального закона № 422-ФЗ Исполнитель не вправе оказывать услуги по настоящей Оферте юридическому лицу, являющемуся его текущим работодателем либо являвшемуся работодателем менее двух лет назад — соответственно, такое юридическое лицо не может приобрести доступ к Сервису от своего имени. Это не распространяется на физических лиц — работников такого юридического лица, приобретающих доступ лично для себя.

6. Стоимость, подписка и оплата

Free — бесплатно. Стоимость Тарифов «Pro» и «Business» указана в разделе 3 настоящей Оферты.

Доступ к платному Тарифу («Pro» или «Business») предоставляется на условиях Подписки — ежемесячного автоматического списания. Оформляя Подписку, Пользователь даёт согласие на регулярное (рекуррентное) списание денежных средств за каждый очередной расчётный период до отказа от Подписки, а также на списание дополнительной платы, предусмотренной разделом 3 настоящей Оферты — за приобретённые Лицензионные ключи и за Одноразовые коды доступа сверх включённого количества. Размер каждой такой доплаты и основание её начисления отражаются в Личном кабинете.

Пользователь — организация или индивидуальный предприниматель вправе вместо Подписки оплатить доступ по счёту вперёд за 1, 3, 6 или 12 месяцев. В этом случае автоматических списаний нет: доступ предоставляется после поступления оплаты, следующий счёт выставляется к концу оплаченного срока.

При оформлении доступа к платному Тарифу Пользователь указывает ФИО или наименование организации и адрес электронной почты, а при оплате по счёту — реквизиты: наименование, ИНН, КПП, юридический адрес, адрес электронной почты бухгалтерии. Порядок обработки этих данных определяется Политикой конфиденциальности.

7. Пробный период

Исполнитель вправе по своему усмотрению предоставлять отдельным Пользователям временный бесплатный доступ к платному Тарифу («Pro» или «Business») на основании индивидуальной договорённости в переписке. Условия каждый раз согласовываются отдельно и не создают обязанности предоставлять аналогичные условия другим Пользователям.

8. Срок действия, расторжение и отказ от подписки

Пользователь вправе в любой момент отказаться от Подписки — в личном кабинете (раздел «Оплата») или написав на info@trustvisor.ru; дальнейшие списания прекращаются, доступ сохраняется до конца оплаченного периода. Исполнитель вправе приостановить доступ Пользователю, нарушившему условия Оферты, без возврата средств за текущий период.

9. Возврат денежных средств

Пользователь вправе обратиться за возвратом денежных средств, направив запрос на info@trustvisor.ru. Исполнитель рассматривает такое обращение в течение 10 рабочих дней и, при отсутствии обстоятельств, указанных в абзаце третьем настоящего раздела, возвращает денежные средства за неиспользованную часть оплаченного расчётного периода, за вычетом фактически понесённых расходов. Возврат производится тем же способом, которым была произведена оплата.

Плата за уже выпущенные Одноразовые коды доступа и за уже использованные Лицензионные ключи возврату не подлежит.

Возврат не производится, если доступ был приостановлен вследствие нарушения Пользователем раздела 12 настоящей Оферты.

Гарантия первого месяца. Если по итогам первого оплаченного месяца Пользователь сообщит, что сервис не сэкономил ему время на сборе и проверке отчётов, плата за этот месяц возвращается полностью. Для этого достаточно письма на info@trustvisor.ru, направленного в течение 14 дней после окончания месяца; возврат производится в срок и способом, указанные в абзаце первом настоящего раздела. Абзацы второй и третий настоящего раздела к такому возврату не применяются. Гарантия действует один раз для одного Пользователя.

Настоящий раздел не ограничивает права Пользователя-потребителя, установленные Законом РФ «О защите прав потребителей», в том числе право на отказ от исполнения договора об оказании услуг (ст. 32).

10. Изменение условий оферты

Исполнитель вправе в одностороннем порядке изменять условия Оферты, публикуя новую редакцию на Сайте с указанием даты редакции. Стоимость уже оплаченного расчётного периода не изменяется. О повышении стоимости Тарифов Исполнитель уведомляет Пользователей платных Тарифов не позднее чем за 30 дней до его вступления в силу — письмом на адрес электронной почты владельца доступа к Личному кабинету и публикацией на Сайте; порядок начала начисления платы за Одноразовые коды доступа сверх включённого количества установлен разделом 3 настоящей Оферты. Продолжение использования Приложения после вступления изменений в силу означает согласие с новой редакцией. Изменения, касающиеся состава обрабатываемых персональных данных, доводятся до Конечных пользователей отдельно в порядке, предусмотренном Политикой конфиденциальности.

11. Ответственность сторон

Исполнитель не несёт ответственности за недоступность Приложения по независящим от него причинам (отсутствие интернета у Пользователя, неисправность устройства, форс-мажор), а также за содержание и правовые последствия использования созданных Пользователем материалов. Если Пользователю предъявлены претензии со стороны его Конечных пользователей или госорганов из-за несоблюдения раздела 5 (ненадлежащее получение согласий), Пользователь возмещает Исполнителю все убытки самостоятельно.

12. Запрещённое использование

Пользователю запрещается использовать Приложение и Сервис для: скрытого наблюдения за физическими лицами без ведома и правового основания; промышленного шпионажа и несанкционированного сбора коммерческой тайны; сбора биометрических данных без правового основания; слежки за работниками в нарушение трудового законодательства; перепродажи или сублицензирования доступа без письменного согласия Исполнителя; иных действий, нарушающих законодательство РФ или права третьих лиц. При нарушении Исполнитель вправе немедленно, без предупреждения, заблокировать доступ без возврата средств.

13. Реквизиты исполнителя

ИП Савкин Михаил Андреевич ОГРНИП 326210000056797 ИНН 212885679288 info@trustvisor.ru

14. Прочие условия

Отношения Сторон, не урегулированные Офертой, регулируются законодательством РФ. Вопросы обработки персональных данных регулируются отдельной Политикой конфиденциальности. Споры разрешаются путём переговоров, а при недостижении согласия — в порядке, установленном законодательством РФ.

15. Территория оказания услуг

Сервис предназначен для использования на территории Российской Федерации. Серверная инфраструктура Исполнителя расположена на территории Российской Федерации. Настоящая Оферта, а также отношения Сторон, связанные с ней, регулируются правом Российской Федерации.

Доступность Приложения в магазинах приложений в иных странах не означает, что Исполнитель адресует Сервис лицам, находящимся за пределами Российской Федерации, и не влечёт применения к отношениям Сторон права иных государств, если иное прямо не следует из императивных норм применимого законодательства.

16. Поручение на обработку персональных данных

Настоящий раздел применяется, если Пользователь: включил автоматическую доставку снятых файлов и/или хранение фотографий для приёмки; выпускает Одноразовые коды доступа, по которым снимают в браузере по ссылке; вносит в Личный кабинет сведения о Конечных пользователях — имена или подписи к ключам, справочник исполнителей с их контактами, Задания и расписания, решения о приёмке; создаёт в Личном кабинете ссылку на акт для лица, которому Пользователь передаёт результаты работ (далее — Получатель), или включает отправку акта и реестра Получателю; открывает Получателю просмотр отчётов в кабинете заказчика (раздел 17). Если ничего из этого нет, снятые файлы остаются на устройстве Конечного пользователя и Исполнителю не передаются.

В этих случаях Пользователь как оператор поручает Исполнителю обработку персональных данных, содержащихся в снятых файлах, в сопровождающих их данных о съёмке и в сведениях, внесённых в Личный кабинет, на условиях настоящего раздела (ч. 3 ст. 6 Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных»). Оператором остаётся Пользователь; Исполнитель действует по его поручению и самостоятельно целей обработки не определяет.

Перечень персональных данных. Изображения и видеозаписи, полученные Приложением или снятые по ссылке в браузере, включая содержащиеся в них изображения граждан; данные о съёмке — дата и время, координаты и точность определения места (при съёмке по ссылке — сообщённые браузером), модель устройства или сведения о браузере, идентификатор Лицензионного ключа или Одноразового кода доступа, реквизит съёмки, заданный Пользователем; при хранении — также изображения-превью, полученные из видеозаписей; сведения, внесённые Пользователем в Личный кабинет: имена или подписи Конечных пользователей к ключам, Задания и расписания (объект и его адрес, список кадров, сроки, исполнитель), решения о приёмке и их причины, сведения о том, кто из пользователей Личного кабинета и когда принял решение; справочник исполнителей — имена, адреса электронной почты и телефоны; наименование Получателя и адреса электронной почты, указанные Пользователем для отправки ему акта и реестра; сведения о лицах, открывших ссылку на акт: дата и время открытия, IP-адрес, сведения о браузере, скачан ли акт; сведения о том, кто из пользователей Личного кабинета, когда и с какого IP-адреса открыл снимок целиком или скачал файл с подписью.

Перечень действий. Приём файла от Приложения или со страницы съёмки по ссылке; автоматизированная проверка подписи и целостности файла; подписание снимка, сделанного по ссылке; передача файла в хранилище, указанное Пользователем, а при съёмке по ссылке без доставки и хранения — возврат файла снимавшему; временное хранение на время передачи, а при недоступности хранилища Пользователя — на время повторных попыток, но не более 7 (семи) суток с момента приёма; при включённом хранении — хранение фотографий и изображений-превью видеозаписей в течение срока, выбранного Пользователем (7, 30 или 90 суток либо иного, согласованного с Пользователем; фотографий, вошедших в сохранённый Пользователем отчёт по бланку, — не менее 90 суток с последнего сохранения этого отчёта), предоставление к ним доступа пользователям Личного кабинета Пользователя; изготовление изображения-превью из видеозаписи; сравнение отпечатков файлов для отметки о повторной сдаче того же файла; отметка «телефон не двигался» по журналу датчиков видеозаписи; сборка отчёта по бланку Пользователя из сведений Личного кабинета и снимков; хранение бланков, отчётов и приложенных к ним документов (документы — 90 суток с загрузки или последнего сохранения отчёта, но не меньше срока хранения снимков, либо до удаления Пользователем); по настройке Пользователя — указание Приложению (с версии 1.9.1) удалить с устройства Конечного пользователя в выбранный Пользователем срок снимки, сохранение которых у Пользователя подтверждено сервером; хранение сведений, внесённых Пользователем в Личный кабинет, и данных о съёмке каждого принятого на хранение снимка (карточки снимка), в том числе после удаления самого снимка по истечении срока его хранения, и формирование из них акта по заявке и реестра за период по запросу или настройке Пользователя; автоматические отметки на снимках — снят ли снимок на объекте, в окне времени и в срок, не сдавался ли он раньше — и, если Пользователь включил это в настройках, автоматическая приёмка снимков без нарушений и просьба доснять снимок с нарушением по правилам, заданным Пользователем; направление исполнителям, указанным Пользователем, писем с Заданием, кодом и ссылкой на съёмку, напоминаний и просьб доснять; предоставление Получателю, указанному Пользователем, доступа к акту и уменьшенным изображениям принятых снимков — без координат места съёмки и без скрытых данных файла — по ссылке, созданной Пользователем или по его настройке, на срок, выбранный Пользователем (7, 30 или 90 суток, но не дольше срока хранения снимков); прекращение такого доступа по истечении срока или по команде Пользователя; направление Получателю писем со ссылкой на акт и реестра за месяц; предоставление Получателю, которому Пользователь открыл кабинет заказчика, просмотра Заданий, принятых снимков, актов, реестров и обращений по открытым объектам — в объёме, указанном в разделе 17; ведение журнала открытий ссылки на акт и журнала доступа к снимкам, каждый из которых хранится 90 суток; удаление файла с серверов Исполнителя сразу после передачи, по истечении указанных сроков либо по команде Пользователя; направление Пользователю писем о предстоящем удалении данных Личного кабинета и их уничтожение после окончания доступа в порядке, указанном ниже. Иные действия с содержимым файлов Исполнителем не совершаются: содержимое не просматривается, не используется для обучения моделей и не передаётся третьим лицам, за исключением привлечённых Исполнителем лиц, указанных в Политике конфиденциальности, и Получателей, которым Пользователь сам открыл доступ к акту или включил отправку акта и реестра.

Цели обработки. Доставка файла адресату, выбранному Пользователем; проверка подлинности файла для отображения её результата в Личном кабинете Пользователя; при включённом хранении — предоставление Пользователю возможности просматривать фотографии и принимать по ним работу в Личном кабинете; ведение Заданий и приёмки, формирование акта и реестра по запросу или настройке Пользователя; доведение Заданий, напоминаний и просьб доснять до исполнителей; предоставление акта, реестра и просмотра отчётов в кабинете заказчика Получателю по указанию Пользователя; подтверждение получения акта Получателем и выявление несанкционированного доступа к акту и снимкам. Иных целей обработки поручением не предусмотрено.

Конфиденциальность и защита. Исполнитель обязуется не раскрывать и не распространять персональные данные без согласия Пользователя, если иное не предусмотрено федеральным законом, и обеспечивать их безопасность при обработке в соответствии со ст. 19 152-ФЗ: обработка на серверах, расположенных на территории Российской Федерации; передача по защищённым каналам связи; ограничение доступа кругом лиц, которым он необходим для исполнения поручения; ведение журнала действий, доступного Пользователю в Личном кабинете; доступ к акту — только по длинной случайной ссылке, которую поисковые системы не индексируют. Исполнитель соблюдает требования ч. 5 ст. 18 и ст. 18.1 152-ФЗ и по запросу Пользователя в течение срока действия поручения, в том числе до начала обработки, предоставляет документы и иную информацию, подтверждающие принятие мер и соблюдение требований, установленных ст. 6 152-ФЗ.

Инциденты. При выявлении неправомерной или случайной передачи (предоставления, распространения, доступа) персональных данных, повлёкшей нарушение прав субъектов персональных данных, Исполнитель уведомляет Пользователя на адрес электронной почты владельца доступа к Личному кабинету: не позднее 12 часов с момента выявления — о предполагаемых причинах, предполагаемом вреде и принятых мерах; не позднее 48 часов — о результатах внутреннего расследования и, при наличии, о лицах, чьи действия стали причиной, — чтобы Пользователь мог исполнить обязанность, предусмотренную ч. 3.1 ст. 21 152-ФЗ.

Срок действия и уничтожение. Поручение действует, пока Пользователь пользуется указанными возможностями. При выключении доставки или хранения Исполнитель уничтожает переданные файлы, сохранённые фотографии и изображения-превью. При окончании доступа Пользователя к Личному кабинету по платному Тарифу — по окончании оплаченного периода после отказа от подписки, пробного периода, пилота или периода, оплаченного по счёту, если новый счёт не оплачен в течение 10 дней (неудачное списание платежа окончанием доступа не считается) — либо при прекращении договора Исполнитель предоставляет Пользователю месяц на выгрузку данных из Личного кабинета; в этот срок кабинет остаётся открытым, а всё сразу выгружается кнопкой «Весь кабинет архивом (ZIP)» в разделе «Задания» — реестр за все годы, акты и — если включено хранение снимков — снимки с подписью. О дате уничтожения Исполнитель заранее сообщает письмами на контактный адрес Пользователя, адреса пользователей Личного кабинета и адрес бухгалтерии, указанный в реквизитах. По истечении месяца Исполнитель уничтожает: Задания и их историю, решения приёмки, объекты, справочник исполнителей, шаблоны и расписания, карточки снимков, снимки и превью, ссылки на акты и журналы, настройки доставки и рассылок; доступ к хранилищу Пользователя прекращается. Если до этого Пользователь оплатит Тариф или продолжит работу в Личном кабинете (выдаёт Задания или получает снимки; просто вход и выгрузка работой не считаются), уничтожение отменяется. Не уничтожаются сведения, которые Исполнитель обязан хранить по закону (счета и платежи), учётные записи и журнал входов — на срок, указанный в Политике конфиденциальности, и отпечатки файлов в реестре подтверждения: по ним нельзя восстановить ни изображение, ни место съёмки. По письменному требованию Пользователя Исполнитель прекращает обработку и уничтожает данные раньше; об уничтожении Исполнитель сообщает Пользователю письмом.

Ответственность. Исполнитель отвечает перед Пользователем за соблюдение условий настоящего поручения. Ответственность перед субъектами персональных данных за обработку, осуществляемую Исполнителем по поручению, несёт Пользователь как оператор (ч. 5 ст. 6 152-ФЗ).

Что остаётся на Пользователе. Правовое основание обработки, получение согласий Конечных пользователей и их уведомление до начала использования Приложения — в порядке, предусмотренном разделом 5 настоящей Оферты.

17. Кабинет заказчика

«Заказчик» — лицо, которому Пользователь сдаёт результаты работ: управляющая организация, товарищество собственников жилья, торговая сеть, государственный или муниципальный заказчик и иные. «Кабинет заказчика» — раздел Сайта (portal.trustvisor.ru/zakazchik.html), в котором Заказчик просматривает отчёты Пользователя по объектам, доступ к которым ему открыл Пользователь.

Кабинет заказчика предоставляется Заказчику бесплатно и без ограничения срока. Заказчик принимает условия настоящего раздела при первом входе в кабинет заказчика и пользуется им как самостоятельный пользователь Сервиса; стороной договора между Исполнителем и Пользователем Заказчик не становится и прав по Тарифу Пользователя не приобретает.

Доступ к отчётам открывает Пользователь — по выбранным им объектам; Заказчик также может сам создать кабинет и пригласить Пользователя, а объекты в этом случае выбирает Пользователь. Открывая доступ, Пользователь подтверждает, что вправе передать Заказчику эти отчёты, в том числе содержащиеся в них персональные данные (разделы 5 и 16 настоящей Оферты).

Заказчику доступны только для просмотра: Задания, календарь, принятые снимки в виде уменьшенных изображений без скрытых данных файла, отметка «на объекте» с расстоянием до точки объекта — без координат места съёмки, акты, реестр за период, обращения жителей — текст и фото, без контактов жителя, — и сводка. Об исполнителях Заказчик видит имя и первую букву фамилии. Заказчик не принимает работу, не изменяет данные Пользователя и не скачивает подписанные файлы.

Пользователь вправе в любой момент закрыть Заказчику доступ, Заказчик — отключить Пользователя. После закрытия доступа отчёты в кабинете заказчика больше не отображаются; копий отчётов для Заказчика Исполнитель не хранит. Ссылки на акт и реестры, отправленные Заказчику ранее, действуют на условиях раздела 16 и пункта 3.10 Политики конфиденциальности.

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

Документ
Политика конфиденциальности

Редакция от 15 октября 2026 г.

1. Оператор

ИП Савкин Михаил Андреевич, ОГРНИП 326210000056797, ИНН 212885679288. Вопросы о персональных данных: info@trustvisor.ru.

Политика описывает, как обрабатываются персональные данные на сайте trustvisor.ru, в Личном кабинете (portal.trustvisor.ru), на сервере api.trustvisor.ru и в приложении TrustVisor для Android.

2. Чьи данные

Посетители сайта; те, кто оставляет заявку, пишет в поддержку или предлагает функцию; клиенты — организации и предприниматели, оплачивающие тарифы, и пользователи их Личного кабинета; люди, которые снимают в Приложении или по ссылке в браузере, в том числе работники и подрядчики наших клиентов; люди, попавшие в кадр; люди организаций-заказчиков, которым наши клиенты открывают просмотр отчётов.

3. Какие данные, зачем, на каком основании и сколько хранятся

3.1. Работа Приложения и учёт ключей. Данные: идентификатор устройства (Android ID); лицензионный ключ; IP-адрес и технические данные соединения; отпечаток (SHA-256) снятого файла — он записывается в реестр подтверждения сразу после съёмки, сам файл при этом не передаётся; при съёмке по Одноразовому коду доступа или Заданию — отметка о факте съёмки: тип файла, время, номер заявки и пункт списка кадров; если владелец ключа включил отчётность — количество снятых фото и видео за период, без содержимого. Основание: исполнение договора с владельцем ключа (п. 5 ч. 1 ст. 6 152-ФЗ); при первом запуске Приложение также запрашивает согласие — документ «Согласие на обработку персональных данных». Для работников и подрядчиков организации правовое основание обеспечивает организация как их работодатель или заказчик (раздел 5 Оферты). Срок: срок действия ключа и 1 год после истечения или отзыва; отпечатки в реестре подтверждения — бессрочно.

Почему реестр хранится бессрочно. Смысл реестра — подтвердить, что файл существовал уже в момент съёмки. Такое подтверждение обязано пережить и лицензию, и договор: если запись удалить, доказательство перестанет работать именно тогда, когда понадобится. В реестр записывается только математический отпечаток файла — по нему невозможно восстановить ни изображение, ни звук, ни координаты.

3.2. Съёмка по ссылке в браузере. Данные: фотография, снятая в браузере; время её получения сервером; координаты и их точность — если человек разрешил браузеру доступ к местоположению; сведения о браузере (строка User-Agent); IP-адрес — в технических журналах. Снимок принимается сервером, проверяется и подписывается; если у организации, выдавшей ссылку, включены доставка или хранение — передаётся ей, иначе возвращается снимавшему. Если хранение не включено, у нас он находится только на время обработки и передачи; при включённом хранении — как сказано в п. 3.3. Основание: поручение организации, выдавшей ссылку (раздел 16 Оферты); оператор — эта организация.

3.3. Приёмка отчётов в Личном кабинете организации. Данные: снятые фотографии и изображения-превью видеозаписей (сами видеозаписи не хранятся); данные о съёмке из подписанного файла — дата и время, место и его точность, модель устройства, номер заявки; Задания и расписания — объект и его адрес, список кадров, срок сдачи, исполнитель; имена или подписи сотрудников к ключам; справочник исполнителей — имя, адрес электронной почты и телефон, если их внесла организация (на почту исполнителю уходят задание с кодом, напоминания и просьбы доснять; SMS мы не отправляем); отметки на каждом снимке — снят ли он на объекте, в окне времени и в срок, не сдавался ли раньше, не был ли телефон неподвижен всю видеосъёмку (пометка «телефон не двигался» по журналу датчиков видеозаписи); решения «принято» и «доснять», их причины, кто и когда их принял — человек или сервис по правилам организации, если она включила автоматику; журнал доступа к снимкам — кто из пользователей кабинета, когда и с какого IP-адреса открыл снимок целиком или скачал файл с подписью; бланки отчётов организации — название, поля, шаблон описания, логотип; отчёты по бланку — номер, дата, значения полей (поставщик, получатель, адрес осмотра; если организация впишет — и фамилии людей), описательная часть, заключение, выбранные снимки и подписи к ним; документы, приложенные к отчёту, — PDF, JPEG, PNG (из изображений удаляются скрытые данные файла); акт по заявке и реестр за период, которые собираются из этих данных. Основание: поручение организации-клиента (ч. 3 ст. 6 152-ФЗ, раздел 16 Оферты); оператор — организация. Срок: фотографии и превью — выбранный организацией срок, 7, 30 или 90 суток (иной — по договорённости), а вошедшие в сохранённый отчёт по бланку — не менее 90 суток с последнего сохранения отчёта; затем удаляются автоматически; карточка снимка — время и место съёмки с точностью, расстояние до точки объекта, отметки и решение приёмки — остаётся и после удаления самой фотографии: из неё собираются акт и реестр; карточки, сведения о Заданиях, решениях, объектах и исполнителях — пока у организации есть доступ к Личному кабинету по платному Тарифу; после окончания этого доступа (конец оплаченного периода после отказа от подписки, пробного периода, пилота или периода, оплаченного по счёту, если новый счёт не оплачен в течение 10 дней) — месяц на выгрузку, затем удаляются, о дате удаления организации заранее приходят письма; бланки и отчёты по бланку — так же, как сведения о Заданиях; документы, приложенные к отчёту, — 90 суток с загрузки или последнего сохранения отчёта (если снимки хранятся дольше — столько же), раньше — по команде организации; в ежедневные резервные копии эти документы не входят; журнал доступа к снимкам и журнал открытий акта — 90 дней.

3.4. Доставка файлов в хранилище организации. Данные: снятый файл целиком — изображение или видеозапись и данные о съёмке, включая координаты. Файл проходит через наш сервер транзитом: принимается, проверяется, передаётся в хранилище организации и сразу удаляется у нас. Основание: поручение организации (раздел 16 Оферты). Срок: до передачи — обычно секунды; если хранилище организации недоступно — для повторных попыток, не более 7 суток.

3.5. Личный кабинет и защита доступа. Данные: адрес электронной почты (имя для входа), имя и роль пользователя кабинета; одноразовые коды входа — в необратимом виде, действуют не более 1 часа; сведения о доверенных устройствах и их ПИН-коды — в необратимом виде; секрет второго фактора — в зашифрованном виде, резервные коды; IP-адрес и технические данные сессии; журнал действий в кабинете. Основание: исполнение договора (п. 5 ч. 1 ст. 6). Срок: доверенные устройства — до отзыва либо 1 год после последнего входа; учётные записи и журнал действий — пока действует договор и 1 год после.

3.6. Оплата. Данные: ФИО или наименование организации, адрес электронной почты; при оплате по счёту — наименование, ИНН, КПП, юридический адрес, адрес электронной почты бухгалтерии; идентификатор платежа. Данные банковской карты вводятся на странице банка, мы их не получаем. Основание: исполнение договора и требования налогового законодательства (п. 2 и п. 5 ч. 1 ст. 6). Срок: сроки налогового учёта (как правило, не менее 4 лет).

3.7. Заявки, обращения и предложения с сайта. Данные: заявка на бесплатный доступ — имя, название компании, адрес электронной почты, телефон, ИНН, численность сотрудников, сколько нужно ключей, комментарий, отметки об участии в бонусной программе; обращение в поддержку — адрес электронной почты, имя (по желанию), текст, страница сайта, сведения о браузере, дата согласия; IP-адрес — только в виде необратимого отпечатка для защиты от злоупотреблений; предложение функции — отрасль, адрес электронной почты, текст. Основание: согласие (п. 1 ч. 1 ст. 6), которое даётся отдельным документом — «Согласие на обработку персональных данных». Срок: до достижения цели, но не более 3 лет с последнего обращения, либо до отзыва согласия.

3.8. Счёт посещений сайта. Обезличенные события использования сайта — только с согласия посетителя в баннере, без IP-адреса; хранятся 90 дней. Подробно — в разделе 8.

3.9. Технические журналы серверов. Данные: IP-адрес, время, адрес запроса, сведения о браузере или приложении. Основание: обеспечение безопасности и работоспособности сервиса (п. 7 ч. 1 ст. 6). Срок: не более 90 дней.

3.10. Страница акта по ссылке и письма заказчику организации. Организация может открыть своему заказчику (далее — Получатель) акт по выполненному заданию: создать ссылку в кабинете или включить у объекта отправку акта и реестра за месяц на адрес заказчика. Что видит Получатель: название организации и её контакт, номер задания, объект, исполнителя — по умолчанию имя и первую букву фамилии (полное ФИО — только если так настроила организация), время выдачи задания, срок и сдано ли в срок, время приёмки; по каждому принятому снимку — уменьшенное изображение без скрытых данных файла (у видео — один кадр, сама запись не передаётся), время снимка, отметку «на объекте» с расстоянием до точки объекта — без координат места съёмки, нарушения, способ съёмки (приложение или ссылка в браузере), пометку «принято автоматически» и отпечаток файла. Акт можно скачать в PDF с теми же изображениями. Реестр за месяц — таблица Excel с заданиями, снимками, решениями по ним и нарушениями. Кто видит: тот, кому организация передала ссылку; ссылка длинная и случайная, поисковые системы её не индексируют, на странице нет сторонних сервисов и счётчиков. Срок: 7, 30 или 90 дней по выбору организации, но не дольше, чем хранятся снимки; организация может отозвать ссылку в любой момент, после срока или отзыва страница не открывается. Журнал открытий: дата и время, IP-адрес и сведения о браузере каждого, кто открыл ссылку, и скачан ли акт, — чтобы организация знала, что заказчик получил акт, и могла заметить чужой доступ; хранится 90 дней. Основание: поручение организации (раздел 16 Оферты); оператор — организация, она же отвечает за основание передать акт заказчику (раздел 5 Оферты). Человек на снимке или исполнитель с вопросом либо просьбой убрать снимок обращается к организации — её контакт указан на странице акта; если он написал нам, мы перешлём обращение организации.

3.11. Кабинет заказчика. Организация может открыть просмотр своих отчётов тому, кому сдаёт работу (далее — Заказчик), или Заказчик сам создаёт кабинет и приглашает организацию; объекты в любом случае выбирает организация. Данные людей Заказчика: адрес электронной почты, имя (по желанию), роль (владелец кабинета или просмотр), кто пригласил, даты создания и последнего входа, отметка о согласии с условиями с датой и редакцией документов; коды входа — в необратимом виде, действуют не более 10 минут; сессии — в необратимом виде, не дольше 7 дней; название организации Заказчика и, по желанию, ИНН; адрес электронной почты организации, которую Заказчик пригласил. Что видит Заказчик — только по объектам, открытым организацией, и только для просмотра: Задания, календарь, принятые снимки в виде уменьшенных изображений без скрытых данных файла, отметку «на объекте» с расстоянием до точки объекта — без координат места съёмки и модели устройства, акты, реестр за период без адресов почты сотрудников, обращения жителей — текст и фото, без контактов жителя, сводку; исполнителя — имя и первую букву фамилии. Скачать подписанный файл Заказчик не может. Основание: для данных людей Заказчика — исполнение договора (раздел 17 Оферты, п. 5 ч. 1 ст. 6 152-ФЗ); для отчётов с данными исполнителей — поручение организации (раздел 16 Оферты), оператор — организация: открывая доступ, она подтверждает, что вправе передать Заказчику эти отчёты. Срок: просмотр отчётов — пока организация не закрыла доступ или Заказчик не отключил организацию; после этого отчёты Заказчику не видны, копий для него мы не храним. Данные людей Заказчика — до удаления по просьбе Заказчика; если у Заказчика нет подключённых организаций и 12 месяцев никто не входил, мы пишем ему и через 30 дней после письма удаляем кабинет; вход после письма кабинет сохраняет. Истёкшие коды входа и сессии — 30 дней; приглашение, на которое организация не ответила, и закрытые связи вместе с адресом, куда звали, — 90 дней.

Чего мы не делаем. Не получаем содержимое снятых в Приложении файлов, если организация не включила доставку или хранение, — файлы остаются на телефоне. Не получаем содержимое Блокнота приложения. Не используем сторонние аналитические и рекламные модули ни в Приложении, ни на сайте. Не просматриваем снимки и не обучаем на них модели. Не принимаем решений, порождающих юридические последствия, только на основе автоматизированной обработки: результат проверки файла — сведения для человека. Если организация сама включила автоматику, сервис по её правилам принимает снимки без нарушений и просит доснять снимок с нарушением; такая отметка видна в кабинете как «автоматически», пользователь кабинета может её отменить, а окончательное решение по работе остаётся за человеком.

О доставке, хранении и отчётности снимающий узнаёт в самом Приложении и на странице съёмки по ссылке — предупреждением до съёмки; отключить их сам он не может, этим распоряжается организация. Если организация так настроила, Приложение (с версии 1.9.1) удаляет с телефона отправленные снимки в выбранный ею срок — сразу или через 1–30 дней после отправки, — и только после того, как сервер подтвердит, что они сохранены у организации (доставлены в её хранилище или лежат в кабинете вместе с подписанным файлом); видеозаписи без доставки в хранилище с телефона не удаляются, а то, что человек сам переслал из Приложения, это не затрагивает.

4. Кому передаём

Данные не продаются и не передаются в целях, не связанных с работой сервиса. По поручению Оператора их обрабатывают: хостинг-провайдеры REG.RU и Timeweb Cloud (серверы в Москве); Т-Банк — приём платежей картой; RuSender и Яндекс 360 — отправка писем.

Организации-клиенту передаются снятые файлы и фотографии, сведения о Заданиях и приёмке — в объёме, описанном в пунктах 3.2–3.4; если организация настроила адрес для уведомлений, на него уходят сведения о событиях: факт съёмки, время, номер заявки и результат проверки, без содержимого файлов. Дальше организация сама определяет цели обработки этих данных. По указанию организации её заказчику открывается акт по ссылке и отправляются акт и реестр за месяц — в объёме, описанном в пункте 3.10, — и открывается просмотр отчётов в кабинете заказчика — в объёме, описанном в пункте 3.11.

5. Где хранятся

Базы данных и серверы сервиса находятся на территории Российской Федерации (ч. 5 ст. 18 152-ФЗ).

6. Ваши права и как удалить данные

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

Напишите на info@trustvisor.ru, что нужно сделать, и как вас найти: адрес почты из заявки, обращения или кабинета либо лицензионный ключ. Ответим в течение 10 рабочих дней (срок может быть продлён ещё на 5 рабочих дней с объяснением причин). Данные, которые обрабатываются по согласию, уничтожим в течение 30 дней после его отзыва, если закон не требует их хранить. Отзыв согласия на данные, нужные для исполнения договора, может сделать невозможным дальнейший доступ к платному Тарифу.

Если данные обрабатываются по поручению организации — снимки, Задания, решения о приёмке, — их оператор эта организация: мы передадим ей ваш запрос и поможем его исполнить. Кратко о порядке — в окне «Удаление данных».

7. Меры защиты

Передача данных — по защищённому протоколу (HTTPS/TLS). Доступ к административным функциям управления ключами ограничен паролем и отдельным секретным ключом доступа. Вход в Личный кабинет производится по одноразовому коду, направляемому на подтверждённый адрес электронной почты; владелец доступа может дополнительно включить двухфакторное подтверждение. ПИН-коды доверенных устройств и одноразовые коды входа хранятся в необратимом виде — их невозможно прочитать, только сверить. Секрет двухфакторного подтверждения хранится в зашифрованном виде. Пользователи Личного кабинета организации работают по ролям (владелец, администратор, наблюдатель); действия в кабинете записываются в журнал. Страница акта открывается только по длинной случайной ссылке; в базе хранится не сама ссылка, а её необратимый отпечаток. Состав лиц с доступом к серверной инфраструктуре ограничен.

8. Файлы cookie, данные в браузере и счёт посещений

В Личном кабинете используются технически необходимые cookie — для поддержания сессии входа и защиты от подделки запросов; без них вход невозможен.

На Сайте cookie не используются вовсе. Вместо них Сайт сохраняет в самом браузере посетителя выбранную тему оформления («tv-theme») и ответ на вопрос о согласии («tv-consent»); что появляется после согласия — ниже.

Посещаемость Исполнитель считает сам, и только с согласия посетителя. Сторонние аналитические и рекламные счётчики — в том числе Яндекс.Метрика и Google Analytics — не используются. Пока посетитель не нажал «Принять» в баннере, на сервер не передаётся ни одного события. При согласии записываются: вид события (открытие страницы, глубина прокрутки, нажатие на ссылку или кнопку с её надписью, начало и отправка формы, запуск проверки файла и её вердикт словом, переход на внешнюю ссылку, выбранная тема), адрес страницы без строки запроса, домен, с которого посетитель пришёл, метки рекламной кампании из ссылки, класс устройства и ширина окна, язык браузера, номер вкладки и время события по часам сервера. IP-адрес посетителя при этом не записывается; содержимое форм, имена и содержимое проверяемых файлов — тоже. Записи хранятся 90 дней и удаляются автоматически.

Как спрашивается согласие. При первом заходе в правом нижнем углу появляется баннер с двумя ответами — «Принять» и «Отказаться». До ответа события копятся только в памяти вкладки и на сервер не уходят: согласился — уйдут разом, отказался или закрыл страницу не ответив — пропадут вместе со вкладкой. Отказ означает, что счёт посещений не ведётся вообще, а не что он ведётся обезличенно.

Что сохраняется в браузере и когда. До согласия — ничего. После «Принять» появляются номер вкладки («tv-sid», живёт до её закрытия) и случайный номер посетителя («tv-vid»), не связанный ни с какими сведениями о нём и нужный только чтобы отличать повторный визит от нового. Ответ на сам вопрос («tv-consent») сохраняется в любом случае — иначе баннер спрашивал бы снова на каждой странице. Если браузер передаёт признак «Do Not Track», баннер не показывается и сбор не ведётся. Отозвать согласие можно, очистив данные сайта средствами браузера.

9. Изменения политики

Актуальная редакция всегда размещена на сайте trustvisor.ru с датой редакции. Если изменения расширяют состав данных или цели обработки, Оператор доводит их до сведения до начала обработки в новом объёме: в Приложении — отдельным экраном с описанием того, что изменилось; владельцам доступа к Личному кабинету — письмом на указанный адрес.

10. Территория и применимое право

Обработка персональных данных регулируется законодательством Российской Федерации, в том числе Федеральным законом № 152-ФЗ. Сервис предназначен для использования на территории Российской Федерации.

Документ
Лицензионное соглашение (EULA)

Редакция от 2 сентября 2026 г.

ИП Савкин Михаил Андреевич (ОГРНИП 326210000056797, ИНН 212885679288, далее — «Правообладатель») является правообладателем программы для ЭВМ «TrustVisor». Устанавливая и/или используя Приложение, Пользователь принимает условия настоящего Соглашения.

1. Соотношение с Офертой

Настоящее Соглашение регулирует права на использование Приложения как объекта интеллектуальной собственности. Условия доступа к тарифам, оплата и подписка регулируются отдельной Публичной офертой. При противоречии по тарифам и оплате действует Оферта, по правам на код — настоящее Соглашение.

2. Предоставляемая лицензия

Правообладатель предоставляет Пользователю простую, неисключительную, безвозмездную лицензию на установку и использование Приложения, а также на использование связанных с ним веб-интерфейсов (Верификатора и Личного кабинета) в объёме, соответствующем оплаченному Тарифу. Все права на Приложение, включая исключительное право, исходный код, дизайн и товарные знаки, принадлежат Правообладателю и не передаются Пользователю. Это не относится к ядру проверки подлинности файлов, опубликованному Правообладателем отдельно на условиях лицензии Apache License 2.0 (github.com/Mikhail-Savkin/Trustvisor_verify_core): права на него предоставляются на условиях указанной лицензии, а права на Приложение публикация ядра не затрагивает.

3. Ограничения

Запрещается: распространение, сдача в аренду или сублицензирование Приложения третьим лицам вне порядка, предусмотренного Офертой; модификация, декомпиляция и обратная разработка Приложения (за исключением случаев, прямо разрешённых ст. 1280 ГК РФ); удаление знаков охраны авторских прав; создание конкурирующих продуктов на основе Приложения; обход технических средств защиты и ограничений Тарифов.

4. Обновления

Правообладатель вправе выпускать обновления Приложения. Условия Соглашения распространяются на все последующие версии, если при обновлении не указано иное.

5. Отсутствие гарантий

Приложение предоставляется «как есть» (as is), без гарантии бесперебойной работы на всех устройствах. Правообладатель не гарантирует, что созданные материалы будут приняты в качестве доказательств в конкретном судебном или ином процессе — это относится к компетенции органа, рассматривающего дело.

6. Ограничение ответственности

Правообладатель не отвечает за косвенные убытки и упущенную выгоду в связи с использованием Приложения, в максимальной степени, допустимой законодательством РФ. Это не ограничивает права Пользователя-потребителя, установленные императивными нормами закона.

7. Срок действия

Соглашение действует с момента установки Приложения до его удаления. Правообладатель вправе прекратить лицензию при нарушении Пользователем раздела 3.

8. Распространение через магазины приложений

При получении Приложения через Google Play или аналогичный сервис на Пользователя также распространяются условия соответствующего магазина. Оператор магазина приложений не является стороной настоящего Соглашения.

9. Реквизиты правообладателя

ИП Савкин Михаил Андреевич ОГРНИП 326210000056797 ИНН 212885679288 info@trustvisor.ru

10. Применимое право

Настоящее Соглашение регулируется правом Российской Федерации. Приложение предназначено для использования на территории Российской Федерации; его доступность в магазинах приложений в иных странах не влечёт применения права иных государств, если иное прямо не следует из императивных норм применимого законодательства.