Перейти к основному содержимому
Версия: 7.0

Детальное описание криптографии

Введение

Корпоративный менеджер паролей Пассворк основан на принципе нулевого знания (Zero Trust), что гарантирует полную конфиденциальность данных пользователей. Система предназначена для безопасного хранения и совместного использования паролей внутри организации, при этом сами пароли недоступны ни серверу, ни посторонним лицам.

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

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

  • Клиентское шифрование (End-to-End Encryption) исключает возможность получения сервером паролей в открытом виде.
  • Серверное шифрование добавляет дополнительный уровень безопасности: даже уже зашифрованные на клиенте данные проходят повторное шифрование перед сохранением в базе.

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

Криптографическая модель нулевого знания

Принцип нулевого знания

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

Формирование мастер-ключа осуществляется алгоритмом PBKDF2 (Password-Based Key Derivation Function), который использует комбинацию мастер-пароля, случайной соли и большого числа итераций. Большое число итераций замедляет каждую попытку подбора и значительно усложняет проведение атак перебором, тем самым повышая стойкость мастер-ключа. Полученный мастер-ключ становится корнем доверия для всех последующих криптографических операций.

Генерация и использование RSA-ключей

После создания мастер-ключа для каждого пользователя генерируется уникальная пара асимметричных RSA-ключей:

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

Сейфы (виртуальные хранилища)

Пароли группируются в специальные сейфы – виртуальные хранилища с собственными симметричными ключами.

  • Ключ сейфа создаётся на клиенте в момент его формирования.
  • Все пароли внутри сейфа шифруются этим ключом.
  • При предоставлении доступа другим пользователям ключ сейфа шифруется отдельно для каждого из них, используя их открытый RSA-ключ.

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

Многоуровневая защита паролей

Для дополнительной безопасности каждая запись пароля шифруется отдельным AES-ключом (AES-256).

  • Для каждого пароля или секрета генерируется свой собственный симметричный ключ.
  • Он применяется для шифрования содержимого (логина, пароля, заметок и т.д.) на клиенте.
  • Далее этот AES-ключ пароля шифруется ключом сейфа.

В итоге формируется многоуровневая иерархия:

  1. данные пароля зашифрованы своим AES-ключом;
  2. AES-ключ пароля зашифрован ключом сейфа;
  3. ключ сейфа зашифрован открытыми RSA-ключами пользователей, имеющих доступ.

Такая схема обеспечивает максимальную защиту: сервер и сторонние злоумышленники не могут получить доступ к секретам без знания мастер-пароля и соответствующих ключей.

Генерация и управление ключами

Источники энтропии

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

  • На клиентской стороне применяются стандартные средства: встроенный генератор Web Crypto API в браузере, функции нативного приложения или криптографические библиотеки.
  • На серверной стороне, при необходимости, используются OpenSSL или аналогичные решения, обеспечивающие криптографическую стойкость.

Случайные значения применяются для соли в PBKDF2, симметричных ключей AES и пар RSA-ключей. Благодаря использованию надежных источников энтропии исключается предсказуемость результатов.


Спецификации ключей

Система использует современные и проверенные алгоритмы:

  • AES-256 для симметричного шифрования,
  • RSA-2048 для асимметричных операций.

Эти параметры соответствуют высоким стандартам безопасности и считаются достаточными для защиты конфиденциальной информации сегодня.

  • RSA-ключи (2048 бит) генерируются на стороне клиента при регистрации пользователя. Приватный ключ сразу шифруется мастер-ключом (или паролем) и только в таком виде передается серверу. Открытый ключ хранится в открытом виде и используется для организации зашифрованного обмена данными. Генерация ключей — ресурсоемкая операция, поэтому выполняется один раз, а результат переиспользуется.
  • AES-ключи (256 бит) создаются заново при каждом действии, требующем нового ключа: при создании сейфа или новой записи пароля. Эти ключи полностью случайны и не выводятся из пароля пользователя, что обеспечивает независимость и высокую энтропию. Они никогда не хранятся на сервере в открытом виде: либо зашифрованы другим ключом, либо существуют только в памяти клиента в течение сессии.

Хранение и распределение ключей

  • Приватные RSA-ключи хранятся на сервере только в зашифрованном виде (AES-шифрованием с ключом, производным от мастер-пароля).
  • Открытые RSA-ключи сохраняются в профиле пользователя и используются другими участниками для шифрования общих секретов.
  • Ключи сейфов (AES-256) хранятся вместе с метаданными, но для каждого пользователя в системе создается отдельная зашифрованная копия, зашифрованная его открытым RSA-ключом.
  • Ключи отдельных записей паролей (AES-256) никогда не покидают клиентское приложение в открытом виде: они либо зашифрованы ключом сейфа, либо встроены в общий зашифрованный блок данных.

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

Основные криптографические процессы

Аутентификация пользователя

При входе в систему пользователь вводит мастер-пароль. На стороне клиента из него вычисляется мастер-ключ с помощью PBKDF2 (с использованием индивидуальной соли и заданного числа итераций). Этот мастер-ключ применяется для расшифровки приватного RSA-ключа: зашифрованный ключ загружается с сервера и декодируется локально.

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

Доступ к сейфу

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

В результате получается исходный симметричный ключ сейфа (AES-256), которым зашифровано содержимое. Важно, что сервер никогда не видит ни ключ сейфа в открытом виде, ни приватный ключ пользователя. После расшифровки ключа сейфа клиент может получить доступ ко всем паролям внутри него или к отдельным записям, если для них используется дополнительный уровень шифрования.

Многоуровневое шифрование паролей

При создании или изменении пароля на клиентской стороне применяется несколько уровней защиты:

  1. Шифрование содержимого записи — генерируется новый случайный AES-ключ (ключ записи), которым шифруются данные пароля (пароль, все кастомные поля, файлы-аттачменты, редакции) в режиме AES-256-CBC с уникальным IV.
  2. Шифрование ключа записи — сам AES-ключ записи шифруется:
    • либо ключом сейфа (если запись находится внутри сейфа),
    • либо открытым ключом конкретного пользователя (если требуется поделиться конкретно этим паролем, не предоставляя доступ к сейфу).

Таким образом, формируется иерархия:

  • данные пароля защищены AES-ключом записи,
  • ключ записи защищён ключом сейфа или RSA-ключом пользователя.

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

Обмен паролями между пользователями

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

Сценарий: пользователь A делится паролем с пользователем B.

  • Клиент A берёт ключ записи и шифрует его открытым ключом B.
  • Полученная зашифрованная копия сохраняется на сервере и связывается с пользователем B.
  • При синхронизации клиент B получает этот ключ, расшифровывает его своим приватным RSA-ключом и открывает доступ к данным.

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

Технические характеристики алгоритмов

PBKDF2 (Password-Based Key Derivation Function 2)

Для выработки ключа из мастер-пароля используется алгоритм PBKDF2 с HMAC-SHA256. При регистрации каждому пользователю генерируется уникальная криптографическая соль (обычно 128 бит и более). Соль хранится в профиле пользователя на сервере и не является секретом, однако предотвращает атаки по словарю и использование готовых хеш-таблиц.

При вводе пароля PBKDF2 выполняется на стороне клиента: комбинация мастер-пароля + соль многократно прогоняется через HMAC-SHA256 (в системе используется 300 000 и 600 000 итераций, параметр может изменяться). Чем больше число итераций, тем медленнее выполняется каждая попытка перебора, что значительно повышает стойкость к атакам brute-force.

Результатом работы PBKDF2 является мастер-ключ длиной 256 бит и более (например, 32 или 64 байта — в зависимости от настроек системы). Этот мастер-ключ становится корнем доверия: он используется для шифрования приватного RSA-ключа и других криптографических операций.

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

RSA-2048

Асимметричные ключи RSA длиной 2048 бит используются для защиты симметричных ключей и распределения секретов между пользователями. Такой размер ключа обеспечивает баланс между безопасностью и производительностью и считается достаточным для корпоративных систем.

  • Открытые ключи RSA хранятся открыто и используются другими пользователями для шифрования общих данных.
  • Приватные ключи RSA никогда не хранятся в открытом виде: после генерации они шифруются AES-256 с ключом, производным от мастер-пароля. На сервер отправляется только зашифрованный PEM-блок (PKCS#8 или аналогичный). Даже администратор, имея доступ к базе, видит лишь «мусор».

Расшифровка выполняется локально на клиенте после успешного ввода пароля. В криптографических операциях применяется RSAES-PKCS#1 v1_5 (PKCS#1 v1.5 padding) или другой стандартный режим, в зависимости от используемой библиотеки. RSA используется только для небольших данных (ключей), а не для прямого шифрования больших массивов информации.

AES-256 (режим CBC)

Для симметричного шифрования система применяет алгоритм AES с длиной ключа 256 бит в режиме CBC (Cipher Block Chaining).

  • Для каждого шифрования генерируется случайный 128-битный IV (вектор инициализации), что предотвращает повторение одинаковых зашифрованных блоков.
  • Данные выравниваются по блоку (128 бит) с помощью дополнения PKCS#7.
  • IV сохраняется вместе с шифротекстом (в открытом виде), что позволяет выполнить корректную расшифровку.

AES-256 применяется на клиенте для защиты пользовательских паролей и приватных RSA-ключей, а на сервере — для дополнительного уровня защиты данных перед сохранением. Режим CBC выбран за его предсказуемость и проверенную надёжность, при условии корректного обращения с IV.

Кодирование Base64/Base32

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

  • Base64 применяется для преобразования двоичных данных в ASCII-строки (например, при хранении зашифрованных данных в базе или передаче через JSON API).
  • В ряде случаев используется дополнительное перекодирование в Base32, что облегчает передачу в средах, чувствительных к регистру или символам (+/= из Base64).

Base32 использует ограниченный алфавит (A–Z и 2–7), исключая потенциально проблемные символы. При этом кодирование не добавляет криптостойкости, но обеспечивает целостность и удобство при передаче.

Миграция хеш-функций

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

Механизм миграции работает постепенно и прозрачно для пользователей:

  • при входе с действующим мастер-паролем система пересчитывает мастер-ключ по новым параметрам;
  • старые хеши и ключи обновляются автоматически;
  • работа пользователя не прерывается.

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

Серверное шифрование

Помимо клиентского шифрования, в системе реализован дополнительный уровень защиты — серверное шифрование данных перед сохранением в СУБД. Это означает, что зашифрованные на клиенте данные, поступающие на сервер, перед записью в базу проходят повторное шифрование с использованием серверного ключа.

Механизм реализован на базе AES-256 (режим CBC с новым IV) через библиотеку OpenSSL. Сервер имеет собственный симметричный ключ (или набор ключей), с помощью которых выполняется шифрование полей базы данных. В результате в СУБД сохраняются данные, защищённые сразу двумя слоями: сначала клиентским, а затем — серверным.

Гибкость конфигурации

Администраторы могут настраивать серверное шифрование через конфигурационный файл приложения. Доступен выбор конкретного алгоритма из числа поддерживаемых OpenSSL (например, AES-256, ГОСТ и другие). Это позволяет организациям подбирать оптимальный вариант в зависимости от корпоративных стандартов безопасности и требований к производительности.

Назначение и роль

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

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

Инфраструктурная безопасность

Помимо криптографической защиты данных, система уделяет особое внимание безопасности сетевых коммуникаций и окружения. Все взаимодействия между клиентом и сервером осуществляются исключительно по защищённым каналам с использованием протокола HTTPS (TLS версии 1.2 или 1.3). Это гарантирует защиту от перехвата или подмены данных во время передачи и надёжно предотвращает атаки типа «Man-in-the-Middle».

Дополнительная TLS-защита применяется и для внутренних интеграций: подключение сервера к внешним системам (например, LDAP или базе данных) также происходит по зашифрованным каналам. Такой подход обеспечивает конфиденциальность и целостность данных даже внутри корпоративной сети.

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