В этой статье для дата-инженеров поговорим про шифрование потока данных в Apache NiFi с помощью набора процессоров, поддерживающих спецификацию OpenPGP. Криптографическая защита целостности и конфиденциальности потока данных.
Криптографические процессоры Apache NiFi
Криптография является одним из наиболее распространенных методов защиты целостности и конфиденциальности данных с помощью шифрования и дешифрования. Сегодня чаще всего используется ассиметричное шифрование, основанное на комбинации открытого и закрытого ключей, которые математически связаны между собой и нужны для шифрования, расшифровки, подписи и проверки данных. Криптографическая подпись представляет собой последовательность байтов, являющихся результатом операции подписи, которую мог сгенерировать только обладатель закрытого ключа. Действительная подпись указывает на то, что владелец указанного ключа выполнил операцию, причем это действие невозвратно. Криптография с открытым ключом требует разных входных данных для разных операций: открытый ключ для шифрования и закрытый ключ для дешифрования.
Сегодня одним из самых востребованных стандартов шифрования электронной почты считается OpenPGP, определенный рабочей группой OpenPGP Инженерной группы Интернета (IETF) в качестве предлагаемого стандарта в RFC 4880 . Первоначально OpenPGP основан на программе шифрования Pretty Good Privacy (PGP), созданной Филом Циммерманном в 1991 году. Также используется GNU Privacy Guard (GnuPG или GPG) — реализация ПО для шифрования с открытым исходным кодом, совместимая со стандартом OpenPGP, указанным в спецификации RFC 4880. Будучи общедоступным стандартом шифрования и цифровых подписей, OpenPGP поддерживает безопасную связь между несколькими платформами. OpenPGP — это непатентованный формат для аутентификации или шифрования данных с использованием криптографии с открытым ключом. OpenPGP также определяет стандартный формат сертификатов, который, в отличие от большинства других форматов сертификатов, позволяет создавать сети доверия.
В Apache NiFi поддержка OpenPGP началась с версии 0.1.0, которая добавила возможности шифрования и дешифрования в процессор EncryptContent. NiFi использует криптографическую библиотеку Bouncy Castle для обработки всех функций обработки OpenPGP. Помимо введения настраиваемого свойства симметричного шифра в NiFi 1.10.0, поддержка OpenPGP практически не изменилась с момента первоначальной реализации.
Процессор EncryptContent шифрует или дешифрует FlowFile, используя симметричное шифрование с необработанным ключом или паролем и случайно сгенерированной солью или асимметричное шифрование с использованием открытого и секретного ключа. Этот процессор поддерживает алгоритмы OpenPGP, совместимые со сторонними программами. Однако, в настоящее время он не может добавить цифровую подпись к зашифрованному FlowFile. Этот компонент требует входящей связи и не хранит состояние. Однако, хотя EncryptContentпроцессор поддерживает ряд функций шифрования и дешифрования OpenPGP, он имел несколько скрытых проблем. В частности, экземпляр этого компонента может вызвать интенсивное использование системных ресурсов. А несколько экземпляров или высокие параметры параллелизма могут привести к снижению производительности. Кроме того, изначально этот процессор поддерживал ограниченное количество алгоритмов шифрования с открытым ключом.
Поэтому в NiFi версии 1.14.0 было добавлено еще два процессора, поддерживающих сообщения OpenPGP: EncryptContentPGP и DecryptContentPGP. В релизе 2.0, о перспективах которого мы рассказываем в новой статье, эти процессоры заменят ранее существовавшие свойства PGP в EncryptContent. Процессор EncryptContentPGP шифрует содержимое с помощью OpenPGP, считывает ввод и обнаруживает сообщения OpenPGP, чтобы избежать ненужной дополнительной упаковки в пакеты литеральных данных. Процессор DecryptContentPGP расшифровывает содержимое сообщений OpenPGP. Использование стратегии пакетного дешифрования сохраняет кодировку OpenPGP для поддержки последующей проверки подписи. Таким образом, процессор EncryptContentPGP включает и требует несколько свойств, а процессор DecryptContentPGP способен анализировать сообщения OpenPGP для определения деталей формата. Каждый процессор зависит от соответствующей службы контроллера для обработки сообщений с использованием криптографии с открытым ключом. Процессорам не требуются услуги контроллера для выполнения шифрования и дешифрования на основе пароля.
Также в NiFi версии 1.14.0 были добавлены два интерфейса службы контроллера: PGPPublicKeyService и PGPPrivateKeyService. Реализуя эти интерфейсы, служба открытых ключей StandardPGPPublicKeyService обеспечивает поддержку процессора EncryptContentPGP, а служба закрытых ключей PGP StandardPGPPrivateKeyService обеспечивает поддержку процессора DecryptContentPGP, предоставляя закрытые ключи, загруженные из файлов или свойств. Абстрагирование конфигурации и получение открытых и закрытых ключей упростили процесс тестирования для обоих процессоров и обеспечили большую гибкость конфигурации для служб контроллеров.
Также в NiFi есть процессор SignContentPGP, который подписывает контент с помощью закрытых ключей OpenPGP и процессор VerifyContentPGP, который проверяет подписи с использованием открытых ключей OpenPGP.
Хотя OpenPGP также поддерживает шифрование на основе пароля, требуя общего секрета для шифрования и дешифрования, разделение операций шифрования на отдельные компоненты дает гораздо более четкое указание на необходимые свойства. NiFi обеспечивает высокую степень гибкости, когда речь идет как о проектировании потока, так и о реализации компонентов, поэтому разработка с правильным уровнем абстракции важна, когда речь идет о поддержке возможностей компонуемой обработки. Помимо разделения операций шифрования и дешифрования, абстрагирование извлечения открытых и закрытых ключей также обеспечивает полезное разделение между загрузкой необходимых ресурсов и обработкой файлов. Благодаря использованию Controller Services загрузка ключей для шифрования или дешифрования стала возможностью повторного использования общих ресурсов.
Гибкость формата OpenPGP в сочетании с конструкцией процессора усложняла обработку сбоев, что приводило к большому разнообразию ошибок. Поэтому обновленные службы процессоров и контроллеров включают следующие возможности:
- настройка открытых или закрытых связки ключей как свойства компонента, используя форматирование ASCII Armor;
- настройка открытых или закрытых ключей ElGamal для шифрования и дешифрования;
- настройка отдельных открытых или закрытых ключей, а также целой связи ключей с несколькими записями;
- настройка поиска идентификатора шестнадцатеричного ключа для шифрования с открытым ключом;
- настройка алгоритма сжатия, применяемого перед шифрованием;
- запись имен и идентификаторов алгоритмов в качестве атрибутов FlowFile после шифрования;
- запись идентификаторов алгоритмов и метаданных файла в качестве атрибутов FlowFile после расшифровки.
Что касается настройки самих криптографических процессоров, как обычно, она выполняется в свойствах этих компонентов в GUI-интерфейсе Apache NiFi. Настроив свойства криптографического процессора, можно использовать его в конвейере данных, чтобы обеспечить его целостность и конфиденциальность.
Читайте в нашей новой статье про использование безопасного протокола S2S для организации взаимодействия между различными узлами или экземплярами NiFi.
Освойте все возможности Apache NiFi для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники