Ключ шифрования — простыми словами

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

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

Что именно он защищает

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

  • пароли для отправки и получения почты (SMTP / IMAP)
  • платёжные подключения (вроде Stripe) и их ключи
  • ссылки для входа через Google или Microsoft
  • другие сторонние логины, которые TSync хранит от вашего имени

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

Где он находится

Ключ хранится в одном файле настроек, application/config/app-config.php, в строке, которая выглядит так:

define('APP_ENC_KEY', 'a8K3jD9mP2xQ7vR4nL5wT8sF1bC6yU9z');

Эта длинная мешанина букв и цифр и есть сам ключ.

Три правила, которые стоит запомнить

1. Длина должна быть ровно 32 символа

Не 31 и не 33 — ровно 32. Если длина неверная, TSync не запустится и сообщит вам:

Encryption key length should be 32 characters

Если вы когда-нибудь увидите это сообщение, исправление простое — вернуть ключу длину 32 символа.

2. Используйте только обычные буквы, цифры и простые символы

Заглавные и строчные буквы и цифры — идеальный вариант. Избегайте чего-то экзотического — никаких переносов строк, табуляций или необычных символов — чтобы ключ оставался читаемым везде.

3. Никогда не меняйте его после установки — это самое главное

Вот правило, которое действительно важно. Всё, что TSync запер исходным ключом, можно отпереть только этим же ключом. Поменяйте ключ — и всё это станет нечитаемым: вы разом потеряете сохранённые почтовые пароли, платёжные ключи и подключения Google/Microsoft.

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

Если ключ когда-нибудь утечёт (например, случайно попадёт в публичный репозиторий с кодом) — тогда, и только тогда, его стоит заменить, понимая, что это означает начать с чистого листа:

  1. Сгенерируйте новый ключ.
  2. Заново вручную введите учётные данные каждой интеграции (почтовые пароли, платёжные ключи и т. д.).
  3. Попросите всех, кто пользуется входом через Google/Microsoft, заново подключить свою учётную запись.

Создание ключа (только при первой установке)

Лёгкий путь: пусть установщик сделает это сам

Когда вы устанавливаете TSync и завершаете шаг с базой данных, установщик автоматически создаёт надёжный случайный ключ за вас. Вам не нужно и пальцем шевелить — просто загляните потом в app-config.php и убедитесь, что в строке APP_ENC_KEY есть значение.

Вручную (если вдруг понадобится)

На Linux или macOS эта команда выведет свежий ключ из 32 символов:

LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32

Или, с помощью PHP, эта команда тоже выведет ключ:

php -r "echo bin2hex(random_bytes(16));"

(Есть сайты, которые генерируют ключи, но используйте их только для тестов — никогда для настоящей, рабочей системы.)

Сохраните безопасную копию — именно об этом часто забывают

Пожалуйста, сохраните этот ключ в надёжном месте сегодня. Лучший дом для него — менеджер паролей (например, 1Password или Bitwarden). Вот сценарий, которого стоит избежать: у вас есть идеальная резервная копия базы данных, вы теряете сервер, восстанавливаете базу на новом — но без исходного ключа ни одну из запертых учётных записей прочитать уже нельзя. Одной резервной копии недостаточно; ключ — это вторая её половина.

Полная резервная копия на самом деле означает три вещи вместе:

  1. Резервную копию базы данных
  2. Копию файла application/config/app-config.php (в нём хранится ключ)
  3. Копию вашей папки uploads/ (логотипы, вложения)

Как посмотреть свой текущий ключ

Чтобы просто увидеть ключ в его строке:

grep "APP_ENC_KEY" application/config/app-config.php

Чтобы убедиться, что длина правильная (должно вывести 32):

php -r "include 'application/config/app-config.php'; echo strlen(APP_ENC_KEY) . PHP_EOL;"

Что произойдёт, если ключ перестанет работать

Начиная с v11.1.1 ответ короткий: система откажется сохранять и объяснит почему.

Это важнее всего для национальных идентификационных номеров (CNP / IDNP) в карточке сотрудника. Это персональные данные особой категории, поэтому они хранятся только в зашифрованном виде.

Если ключ отсутствует или не работает, а вы сохраняете сотрудника с заполненным CNP или IDNP:

  • сотрудник не сохраняется вообще — даже частично;
  • вы получаете сообщение об этом и о том, что нужно проверить;
  • остальные введённые данные остаются в форме.

Сохранение сотрудника без идентификатора работает как обычно. Отказ касается только тех данных, которые он защищает.

Почему отказ, а не «сохранить что получится»? До v11.1.1 идентификатор молча заменялся пустым значением, а последние четыре цифры оставались на экране — карточка выглядела заполненной, а номера уже не было. Об этом узнавали только тогда, когда номер кому-то понадобился. Сотрудник, которого пришлось сохранить дважды, — это неудобство; исчезнувший персональный номер не восстановить.

Уже есть такие записи? Страница Здоровье (Настройки → Здоровье) показывает их двумя отдельными группами, потому что это разные проблемы:

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

Смотрите также