Шифрування окремих атрибутів

Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою.

Сторінка технічної документації у процесі оновлення.

Загальний опис

Для вибіркового шифрування атрибутів сутностей в БД має використовуватись сервіс шифрування на стороні Vault. Для визначення колонок таблиці реєстру що мають зберігати дані в зашифрованому вигляді необхідно позначити ці колонки відповідним атрибутом шаблону Liquibase під час створення моделі даних. На рівні Rest API всі дані з цих колонок будуть передаватись на Vault для шифрування або дешифрування, в залежності від напрямку потоку. Інформація про те які саме колонки містять шифровані дані буде передаватись через таблицю метаданих. Відповідно, згенеровані ендпоінти завжди будуть пропускати дані з відповідних полів через Vault. Наступна діаграма ілюструє процес вибіркового шифрування даних на рівні дата фабрики.

attributes encryption general
Figure 1. Загальна діаграма шифрування окремих атрибутів

XML Шаблон

Для визначення полів таблиці, що завжди мають містити інформацію в зашифрованому вигляді використовуємо атрибут encrypt="true" на рівні визначення колонки таблиці.

<createTable name="very_secret_data" ext:historyFlag="true">
    <column name="id"  type="UUID">
        <constraints nullable="false" primaryKey="true" primaryKeyName="pk_vsd_id"/>
    </column>
    <column name="data_type" type="TEXT"/>
    <column name="secret_data" type="TEXT" encrypt="true"/>
</createTable>

Результатом такого визначення буде занесення в таблицю метаданих ddm_liquibase_metadata інформації про те яка саме колонка таблиці містить дані у зашифрованому вигляді.

Дані, що класифіковані як персональні або конфіденційні завжди мають зберігатись у зашифрованому вигляді. Принцип визначення цих колонок як таких, що містять зашифровані дані той самий - інформація в метаданих. Але процесом створення цих метаданих керує інший тег.

Ендпоінти

В момент генерації ендпоінтів сервіс має аналізувати метадані на предмет наявності там інформації щодо полів, які мають містити інформацію в зашифрованому вигляді. Якщо в таблиці присутні такі колонки, дані що вони містять мають відправлятись на Vault для шифрування та дешифрування

Get

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

Процес запиту шифрованих даних
Figure 2. Процес запиту шифрованих даних

Put/Post

Загалом, без обробки можливих виключень, процес вставки та зміни шифрованих даних можна визначити наступним чином.

Процес вставки та зміни шифрованих даних
Figure 3. Процес вставки та зміни шифрованих даних

Ротація ключів шифрування

Vault надає можливість автоматичної ротації ключів для шифрування даних. Але ця функціональність не планується використовуватись на фазі MVP. Надалі, перед виконанням дешифрування, слід буде окремо перевірити відповідність ключа за допомогою дати та часу зміни даних що дешифруються.