Безопасность и опора на каталог

Доверие — это механизм,
а не значок.

Эта страница — доказательства: что система обеспечивает, что хранит, кто имеет доступ и что мы ещё не построили.

Контакт по безопасности

support@salewise.co.uk

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

Текущее состояние

  • Нет сертификации SOC 2 или ISO 27001.
  • Независимый тест на проникновение пока не проводился.
  • Карточные данные не хранятся.

Коротко

Четыре утверждения и места, где лежат доказательства.

Не маркетинговые прилагательные. Проектные решения, за которыми стоит код.

01

Модель не может установить цену.

Поиск по каталогу выполняется до генерации. Модель выбирает из идентификаторов-кандидатов; сервер проверяет их и сам формирует цену, остаток и варианты.

Прочитать о механизме

02

Секреты провайдеров зашифрованы при хранении.

AES-256-GCM, случайный IV для каждой записи и дополнительные аутентифицированные данные, привязывающие каждый шифротекст к провайдеру, аккаунту и записи интеграции.

Прочитать о механизме

03

Карточные данные не попадают в Salewise.

Здесь нет кассы и хранения PAN. Покупатель решает в телефоне и платит на существующей кассе продавца.

Прочитать о механизме

04

Доступ ограничен, а не общий.

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

Прочитать о механизме

Опора на каталог заложена в архитектуру

Модель выбирает. Сервер отображает.

Поиск по каталогу выполняется до генерации. Модель выбирает из кандидатов; сервер выполняет арифметику и отображение.

01

Сначала поиск по каталогу

Сервер извлекает подходящие товары из каталога продавца до того, как модель получает запрос. Модель никогда не ищет в открытом интернете.

02

Модель выбирает. Сервер отображает.

Цены, остатки, варианты и предложения формируются на сервере из записей каталога. Число в тексте модели никогда не является источником истины.

03

Идентификаторы проверяются

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

04

Честный отказ

Если в каталоге нет ответа, ассистент говорит об этом и предлагает передать вопрос сотруднику. Если модель недоступна, ассистент сообщает, что не может ответить, а покупатель может попробовать ещё раз или обратиться к сотруднику.

Что передаётся модели

  • Вопрос покупателя.
  • Набор извлечённых кандидатов из каталога.
  • Настройки магазина и соответствующий текст правил.

Что никогда не передаётся модели

  • Карточные данные или платёжные учётные данные.
  • Пароли, API-ключи или мастер-ключ Salewise.
  • Инструмент, который может писать в POS.

Реестр контролей

Реестр контролей, а не значок доверия.

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

Ответы с опорой на каталог

Каталог — источник истины.

Сервер извлекает товары-кандидаты до запуска модели. Модель может выбирать только идентификаторы из этого набора. Недействительные идентификаторы отбрасываются, а цена, остатки, варианты и предложения формируются на сервере. Если в каталоге нет ответа, ассистент говорит об этом и предлагает передачу сотруднику.

Учётные данные при хранении

Секреты зашифрованы, привязаны и версионированы.

Учётные данные провайдеров используют AES-256-GCM со случайным 96-битным IV для каждой записи. Дополнительные аутентифицированные данные привязывают шифротекст к provider:{providerId}:account:{accountId}:credentials, поэтому запись, скопированная другому арендатору, не расшифровывается. keyVersion поддерживает ротацию ключей; неудачная расшифровка завершается отказом, а не возвратом секрета.

Запросы Salewise

Подписаны, а не только предъявительский токен.

Запросы к мастер-API Salewise несут подпись HMAC-SHA256 по методу, пути, временной метке, nonce и SHA-256 тела. Подпись сравнивается за постоянное время и ограничена окном защиты от повторов. Мастер-ключ хранится на сервере, настраивается один раз, шифруется при хранении и никогда не возвращается в браузер.

Аккаунты и роли

Аккаунт продавца — не администратор сервера.

В Sage есть роли продавца и администратора сервера. Пароли используют scrypt с солью для каждого аккаунта. Токены доступа истекают через 15 минут; токены обновления хранятся в виде хешей, ротируются при использовании и истекают через 30 дней. Приглашения действуют 7 дней и привязаны к приглашённому адресу электронной почты.

Изоляция арендаторов

Поиск магазина — это проверка права владения.

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

Карточные данные

Без платежей и PAN.

Salewise не принимает платежи и не хранит карточные данные. В PWA покупателя нет кассы, а транзакция остаётся в POS продавца. Мы не заявляем о применимости PCI DSS к карточным платежам, потому что не обрабатываем карточные платежи.

Хранение

Настроено, а не бессрочно.

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

Журнал аудита

События, значимые для безопасности, оставляют запись.

Регистрация, вход, неудачный вход, приглашения, настройка и изменения учётных данных интеграций записываются в журнал аудита. Адреса электронной почты в деталях аудита хешируются, а не хранятся в открытом виде. Журнал сегодня внутренний; экрана аудита для продавца пока нет.

Граница модели

Модель получает минимум необходимого.

Модель получает вопрос покупателя, извлечённых кандидатов из каталога, настройки магазина и соответствующий текст правил. Она не получает пароли, API-учётные данные или карточные данные, и у неё нет инструмента, который может писать в POS.

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

Учётные данные и запросы

Зашифрованы при хранении. Подписаны при передаче.

Два механизма, о которых специалист по безопасности обычно спрашивает первыми.

Учётные данные при хранении

Алгоритм
AES-256-GCM, аутентифицированное шифрование.
IV
12 случайных байт на запись, никогда не повторяются.
Привязка
AAD provider:{providerId}:account:{accountId}:credentials. Скопированная запись не расшифровывается.
Ротация
keyVersion в каждой записи; предыдущий ключ принимается во время ротации.
Сбой
Неудачная расшифровка завершается отказом. Повтор с устаревшим секретом не выполняется.

Запросы Salewise

Мастер-ключ настраивается один раз при настройке сервера. Каждый запрос подписывается им; подпись не является предъявительским токеном.

canonical =
  method + "\n" +
  path + "\n" +
  timestamp + "\n" +
  nonce + "\n" +
  sha256(body);

signature =
  HMAC-SHA256(masterKey, canonical);
  • Передаётся как X-Sage-Signature с заголовками временной метки и nonce.
  • Сравнивается за постоянное время, с окном защиты от повторов.
  • Мастер-ключ хранится на сервере и шифруется при хранении.
  • Никогда не возвращается в браузер и не записывается в журнал.

Данные, роли и хранение

Узкие данные. Ограниченный доступ. Запись.

Ассистенту не нужно знать, кто покупатель, чтобы ответить на вопрос о товаре.

Сеанс записывает

  • Идентификатор сеанса, QR-код и зону, где он начался.
  • Вопросы, ответы и рекомендации.
  • События передачи и временные метки.

Без имени, аккаунта и карточных данных. Демо не связывает сеанс с именованным покупателем.

Кто имеет доступ

  • Аккаунт продавца, ограниченный привязанными к нему магазинами.
  • Администратор сервера для настройки и конфигурации провайдеров.
  • Никакого доступа к магазинам других продавцов через маршруты магазина.

Приглашения привязаны к адресу электронной почты и действуют 7 дней.

Сколько хранится

  • Расшифровки сеансов: настроено 180 дней.
  • Записи событий: настроено 365 дней.
  • Условия для конкретного продавца: определяются в соглашении об обработке данных.

Удаление выполняется по запросу. Плановая очистка сегодня не заявлена.

События аудита

Регистрация, вход, неудачный вход, приглашения, настройка и изменения учётных данных интеграций записываются в журнал аудита. Адреса электронной почты в деталях аудита хешируются, а не хранятся в открытом виде. Журнал сегодня внутренний; мы не представляем его как экран аудита для продавца.

Атрибуция

Запись должна выдерживать аудит.

Сопоставленная продажа либо точная, либо модельная. Продавец видит, какая именно и почему.

Детерминированная

Код погашения, перенесённый из сеанса в продажу. Уверенность 1.0. Модельное совпадение: нет. Продажа атрибутируется напрямую.

Модельная

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

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

Честные ограничения

О чём мы не заявляем.

Доверие легче проверить, когда пробелы названы.

Если опросник требует что-то из этого списка, скажите об этом.

Мы предпочтём потерять сделку, чем отвечать в обход.

  • 01

    Сегодня у нас нет сертификации SOC 2 или ISO 27001.

  • 02

    Мы пока не завершили независимый тест на проникновение или аудит безопасности.

  • 03

    Мы не заявляем о применимости PCI DSS к карточным платежам, потому что не обрабатываем карточные платежи.

  • 04

    В текущем продукте мы не обучаем общую модель на каталоге или разговорах одного продавца.

  • 05

    Ни одна ИИ-система не свободна от рисков. Опора на каталог снижает риск выдумок, но не отменяет необходимость проверки продавцом и правил передачи.

  • 06

    Сегодня мы не выполняем плановую очистку по срокам хранения; удаление — операционная процедура по соглашению об обработке данных.

  • 07

    Наш журнал аудита внутренний и не предоставляется как экран аудита для продавца.

  • 08

    Мы не обещаем уровень обслуживания на этой странице; любое обязательство по доступности определяется в форме заказа.

Ответственное раскрытие

Если вы считаете, что нашли уязвимость, напишите на support@salewise.co.uk с достаточными деталями для воспроизведения. Пожалуйста, не обращайтесь к данным другого продавца, не нарушайте работу сервиса и не раскрывайте информацию публично, пока у нас не будет возможности ответить.

Вопросы о безопасности

Задайте неудобный вопрос.

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