Реализация шифрования персональных данных на сайте

При утечке базы данных злоумышленник получает SQL-дамп с тысячами строк — ИНН, паспорта, медицинские записи. Если данные хранятся в открытом виде, это катастрофа: штрафы по 152-ФЗ до 500 000 рублей, потеря репутации, отток клиентов. Шифрование на уровне приложения — единственный способ обесценить да

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Реализация шифрования персональных данных на сайте
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

При утечке базы данных злоумышленник получает SQL-дамп с тысячами строк — ИНН, паспорта, медицинские записи. Если данные хранятся в открытом виде, это катастрофа: штрафы по 152-ФЗ до 500 000 рублей, потеря репутации, отток клиентов. Шифрование на уровне приложения — единственный способ обесценить данные для атакующего. Даже получив базу, без ключей шифртекст бесполезен. Мы внедряем шифрование в проектах с высокими требованиями к безопасности: fintech, medtech, gov. За 5 лет на рынке реализовали более 30 проектов по защите ПДн. Наши инженеры имеют сертификаты CISSP, и мы гарантируем соответствие 152-ФЗ и GDPR. Проведём аудит вашей системы за 2-3 дня — свяжитесь с нами.

Расскажу на примере реального внедрения в медицинской CRM с 50 000 пациентов из нашей практики.

Почему шифровать данные на уровне приложения?

Шифрование на уровне базы данных (TDE) не защищает от администраторов БД или SQL-инъекций. Приложение само управляет ключами: данные шифруются до записи и расшифровываются только авторизованными запросами. Это даёт гранулярный контроль доступа и изолирует данные от инфраструктуры.

Какие данные шифровать, а какие хэшировать?

Данные для шифрования

  • ИНН, СНИЛС, серия/номер паспорта
  • Медицинские данные, диагнозы
  • Финансовые данные, номера карт (PCI DSS требует отдельного подхода)
  • Биометрия

Данные для хэширования

  • Пароли → bcrypt, Argon2id
  • Секретные токены, API-ключи

Для поиска по зашифрованным полям используем детерминированное шифрование или токенизацию — об этом дальше.

Выбор алгоритма: AES-256-GCM vs ChaCha20-Poly1305

Алгоритм Тип Аутентификация Скорость Аппаратное ускорение
AES-256-GCM Симметричный Да (GCM) Высокая Да (AES-NI)
ChaCha20-Poly1305 Симметричный Да (Poly1305) Высокая Нет (но быстр на ПО)
RSA-OAEP Асимметричный Да Низкая Да (частично)

AES-256-GCM — стандарт для шифрования данных в покое. При наличии AES-NI он в 3 раза быстрее ChaCha20-Poly1305. Если сервер без поддержки AES-NI, ChaCha20-Poly1305 — надёжная альтернатива. RSA-OAEP используют для шифрования ключей или когда нельзя расшифровать на сервере. Подробнее о AES-GCM.

На основе рекомендаций OWASP и NIST.

Практическая реализация шифрования в Laravel

Пример Cast для шифрования полей
// app/Casts/EncryptedCast.php class EncryptedCast implements CastsAttributes { public function get($model, string $key, $value, array $attributes): ?string { if (is_null($value)) return null; try { return Crypt::decryptString($value); } catch (DecryptException) { return null; } } public function set($model, string $key, $value, array $attributes): ?string { if (is_null($value)) return null; return Crypt::encryptString($value); } } // В модели class Patient extends Model { protected $casts = [ 'passport_number' => EncryptedCast::class, 'medical_notes' => EncryptedCast::class, 'snils' => EncryptedCast::class, ]; } // Использование — прозрачно для кода $patient->passport_number = '4510 123456'; // автоматически шифруется $decrypted = $patient->passport_number; // автоматически расшифровывается 

Какие преимущества даёт envelope encryption?

Хранить ключи шифрования в базе данных вместе с зашифрованными данными — бессмысленно. Лучшая практика — envelope encryption: данные шифруются Data Encryption Key (DEK), DEK шифруется Key Encryption Key (KEK), KEK хранится в KMS/Vault. Это позволяет перешифровать данные без доступа к KEK и упрощает ротацию.

HashiCorp Vault:

$vault = new Vault([ 'address' => 'https://vault.internal:8200', 'token' => env('VAULT_TOKEN'), ]); $keyData = $vault->read('secret/data/app-encryption-key'); $encryptionKey = $keyData['data']['key']; 

AWS KMS:

use Aws\Kms\KmsClient; $kms = new KmsClient(['region' => 'eu-west-1']); $result = $kms->encrypt([ 'KeyId' => 'arn:aws:kms:eu-west-1:123456:key/abc-123', 'Plaintext' => $sensitiveData, ]); $encryptedData = base64_encode($result['CiphertextBlob']); 

Как искать по зашифрованным данным?

Обычный AES-GCM генерирует разный шифртекст для одного и того же значения. Поиск по зашифрованному полю невозможен. Решения:

Вариант 1: Хэш для поиска + шифрование для хранения:

class PersonalDataRepository { public function findByPassport(string $passport): ?Patient { $hash = hash_hmac('sha256', $passport, config('app.search_key')); return Patient::where('passport_hash', $hash)->first(); } public function store(string $passport): void { Patient::create([ 'passport_data' => Crypt::encryptString($passport), 'passport_hash' => hash_hmac('sha256', $passport, config('app.search_key')), ]); } } 

Вариант 2: PostgreSQL pgcrypto:

INSERT INTO patients (passport) VALUES (pgp_sym_encrypt('4510 123456', current_setting('app.encryption_key'))); SELECT pgp_sym_decrypt(passport::bytea, current_setting('app.encryption_key')) FROM patients WHERE id = 1; 

Сравнение методов защиты данных

Метод Обратимость Поиск Скорость Безопасность ключей
AES-256-GCM Да Нет Высокая Зависит от хранения
Детерминированное шифрование Да Да Средняя Высокая при HMAC
Токенизация Нет (замена) Да Высокая Очень высокая
Хэширование (bcrypt) Нет Нет Низкая Высокая

Кейс: шифрование в медицинской CRM (из нашей практики)

Клиент — сеть клиник с 50 000 пациентов. Требовалось зашифровать паспортные данные, СНИЛС, диагнозы. Выбрали AES-256-GCM + envelope encryption с HashiCorp Vault. Реализовали Laravel Casts для прозрачного шифрования. Для поиска по номеру полиса добавили HMAC-хэш. Итог: время отклика не изменилось, аудит безопасности пройден, получен сертификат соответствия 152-ФЗ. Решение масштабируется на любое количество записей.

Что входит в работу

  • Разработка архитектуры шифрования с учётом бизнес-логики
  • Выбор алгоритмов и схемы управления ключами (envelope encryption)
  • Интеграция с HashiCorp Vault или AWS KMS
  • Реализация прозрачного шифрования на уровне ORM (Laravel, Doctrine и др.)
  • Настройка детерминированного шифрования для поиска
  • Ротация ключей с zero-downtime
  • Аудит доступа и логирование операций
  • Документация для команды и обучение разработчиков
  • Передача доступов и тестовые сценарии

Процесс внедрения и сроки

  1. Проектирование схемы шифрования и управления ключами (1-2 дня).
  2. Реализация шифрования на уровне моделей (2-3 дня).
  3. Интеграция с внешними хранилищами ключей (5-7 дней).
  4. Детерминированное шифрование для поиска (+3 дня).
  5. Реализация ротации ключей с zero-downtime (+2 дня).
  6. Аудит доступа и логирование операций (+1-2 дня).
  7. Документация и обучение команды (+1 день).

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