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

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

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

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

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

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

При утечке базы данных злоумышленник получает SQL-дамп с тысячами строк — ИНН, паспорта, медицинские записи. Если данные хранятся в открытом виде, это катастрофа: штрафы по 152-ФЗ до $4.5k–6.5k, потеря репутации, отток клиентов. Шифрование на уровне приложения — единственный способ обесценить данные для атакующего. Даже получив базу, без ключей шифртекст бесполезен. Мы внедряем шифрование в проектах с высокими требованиями к безопасности: 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 месяцев в зависимости от объёма данных и сложности бизнес-логики. Получите консультацию по защите ПДн уже сегодня — свяжитесь с нами, мы оценим ваш проект и предложим решение под ключ.

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060