Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Шифрование данных

Андрей Аксенов

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

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

Не используйте заданные в коде секреты в production-средах. Всегда следуйте рекомендациям по безопасной работе с данными:

  • Храните секреты в специализированных системах управления секретами (например, HashiCorp Vault).

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

  • Реализуйте регулярную ротацию ключей и применяйте надежные политики паролей.

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

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

Для выполнения команд, описанных в следующих разделах, подключитесь к мастер-хосту Greengage DB с помощью psql, как описано в статье Подключение к Greengage DB с использованием psql. Затем создайте новую базу данных и подключитесь к ней:

CREATE DATABASE marketplace;
\c marketplace

Обзор

Поддерживаемые алгоритмы

В таблице ниже перечислены криптографические алгоритмы и возможности, поддерживаемые модулем pgcrypto как встроенными провайдерами, так и с использованием OpenSSL.

Функциональность Встроенная С использованием OpenSSL

MD5

да

да

SHA-1

да

да

SHA-224/256/384/512

да

да

Другие алгоритмы хеширования

нет

да (см. примечание ниже)

Blowfish

да

да

AES

да

да

DES/3DES/CAST5

нет

да

Низкоуровневое шифрование

да

да

PGP-шифрование с симметричным ключом

да

да

PGP-шифрование с открытым ключом

да

да

ПРИМЕЧАНИЕ

Любой алгоритм хеширования, поддерживаемый OpenSSL, автоматически доступен в модуле pgcrypto.

Ограничения безопасности

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

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

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

Рекомендации по производительности

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

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

Регистрация pgcrypto

Подключитесь к целевой базе данных и зарегистрируйте расширение pgcrypto:

CREATE EXTENSION pgcrypto;

Стандартные функции хеширования

Стандартные функции хеширования применяются для проверки целостности данных и аутентификации сообщений. Они создают представление данных фиксированного размера, по которому невозможно восстановить исходное значение. Типичные сценарии использования включают обнаружение модификаций данных и создание кодов аутентификации сообщений на основе хеш-функции (Hash-based Message Authentication Code, HMAC).

Функция digest() генерирует односторонний хеш для произвольных данных. При сборке Greengage DB с параметром --with-openssl становится доступен более широкий набор алгоритмов хеширования.

Функция hmac() использует секретный ключ совместно с хешем для обеспечения целостности и подлинности данных. Она позволяет получателям убедиться, что сообщение не было изменено и поступило от доверенного отправителя.

Следующий пример создает хеш SHA-256 для строки с помощью функции digest():

SELECT digest('Top secret', 'sha256');

Результат выглядит так:

                               digest
--------------------------------------------------------------------
 \xad8b354a65533f41288aaabf615826869c70b42815c387899130462ef6068b92
(1 row)

В этом примере генерируется SHA‑384-хеш для той же строки:

SELECT digest('Top secret', 'sha384');

Результат:

                                               digest
----------------------------------------------------------------------------------------------------
 \x477187c44fd737c2599da5550b3ebe9e9b0a519f8ed7de1718167b0ca129dd2696385f3fb834dd0b259f383681b0a77f
(1 row)

Эта команда генерирует HMAC с использованием секретного ключа:

SELECT hmac('Top secret', 'secret_key', 'sha256');

Двоичный результат digest() можно преобразовать в шестнадцатеричный формат с помощью функции encode():

SELECT encode(digest('Top secret', 'sha256'), 'hex') AS hash;

Результат выглядит следующим образом:

                               hash
------------------------------------------------------------------
 ad8b354a65533f41288aaabf615826869c70b42815c387899130462ef6068b92
(1 row)

Пример: проверка целостности данных

В этом примере демонстрируется использование функции digest() для проверки того, были ли изменены конфиденциальные данные. SHA‑256-хеш каждого значения personal_id сохраняется, а затем сравнивается с текущим значением для подтверждения целостности.

Создайте таблицу для хранения данных клиентов вместе с хешем их идентификаторов:

CREATE TABLE customers
(
    customer_id      INTEGER,
    name             TEXT,
    personal_id      TEXT,
    personal_id_hash BYTEA
)
    WITH (appendoptimized = true)
    DISTRIBUTED BY (customer_id);

Вставьте данные, вычисляя хеш для каждого personal_id:

INSERT INTO customers (customer_id, name, personal_id, personal_id_hash)
VALUES (1, 'Andrew Fuller', 'ID-001-AF', digest('ID-001-AF', 'sha256')),
       (2, 'Michael Suyama', 'ID-002-MS', digest('ID-002-MS', 'sha256')),
       (3, 'Laura Callahan', 'ID-003-LC', digest('ID-003-LC', 'sha256'));

Проверьте, совпадают ли сохраненные данные с хешем:

SELECT name,
       personal_id,
       personal_id_hash = digest(personal_id, 'sha256') AS is_intact
FROM customers;

Изначально все строки должны быть неизмененными:

      name      | personal_id | is_intact
----------------+-------------+-----------
 Laura Callahan | ID-003-LC   | t
 Andrew Fuller  | ID-001-AF   | t
 Michael Suyama | ID-002-MS   | t
(3 rows)

Смоделируйте повреждение данных, обновив персональный идентификатор:

UPDATE customers
SET personal_id = 'CORRUPTED'
WHERE customer_id = 2;

Снова проверьте целостность данных, чтобы обнаружить изменение:

SELECT name,
       personal_id,
       personal_id_hash = digest(personal_id, 'sha256') AS is_intact
FROM customers;

Результат:

      name      | personal_id | is_intact
----------------+-------------+-----------
 Laura Callahan | ID-003-LC   | t
 Andrew Fuller  | ID-001-AF   | t
 Michael Suyama | CORRUPTED   | f
(3 rows)

Функции хеширования паролей

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

Функция crypt() специально предназначена для хеширования паролей. Она использует параметр salt, чтобы каждый пароль формировал уникальный хеш, даже если два пользователя имеют одинаковый пароль. Функция gen_salt() применяется для генерации этой соли.

Эта команда создает хешированный пароль с помощью crypt() и сгенерированной соли:

SELECT crypt('top_secret_123', gen_salt('bf'));

Результат отображает хеш пароля:

                            crypt
--------------------------------------------------------------
 $2a$06$uJlom0lne.dUlBhX7Z8oSOsoto5eMcft9xWMVhZeHaoSoEgScBERG
(1 row)

Пример: проверка пароля

В этом примере показано, как хранить хешированные пароли и проверять их с помощью функций crypt() и gen_salt(). Хеши паролей сохраняются в базе данных, а аутентификация выполняется путем сравнения сохраненного хеша с результатом применения crypt() к введенному паролю.

Создайте таблицу для хранения пользователей и их хешированных паролей:

CREATE TABLE users
(
    user_id       SERIAL,
    username      TEXT,
    password_hash TEXT
)
    DISTRIBUTED BY (user_id);

Добавьте пользователей, предварительно хешируя их пароли с использованием алгоритма Blowfish (bf) и сгенерированной соли:

INSERT INTO users (username, password_hash)
VALUES ('alice', crypt('alice_secret', gen_salt('bf'))),
       ('bob', crypt('bob_secret', gen_salt('bf'))),
       ('carol', crypt('carol_secret', gen_salt('bf')));

Проверьте аутентификацию с правильным паролем:

SELECT username,
       (password_hash = crypt('alice_secret', password_hash)) AS is_authenticated
FROM users
WHERE username = 'alice';

Результат — пароль совпадает:

 username | is_authenticated
----------+------------------
 alice    | t
(1 row)

Проверьте аутентификацию с неправильным паролем:

SELECT username,
       (password_hash = crypt('wrong_password', password_hash)) AS is_authenticated
FROM users
WHERE username = 'alice';

Результат — пароль не совпадает:

 username | is_authenticated
----------+------------------
 alice    | f
(1 row)

Симметричное PGP-шифрование

Симметричное PGP-шифрование позволяет безопасно шифровать данные с использованием общего пароля. Пароль преобразуется алгоритмом String-to-Key (S2K) в двоичный ключ, который затем применяется для шифрования данных.

В этом примере функция pgp_sym_encrypt() используется для шифрования сообщения с помощью пароля:

SELECT pgp_sym_encrypt(
               'some data to encrypt',
               'top_secret_key'
       ) AS encrypted_message;

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

SELECT pgp_sym_encrypt(
               'some data to encrypt',
               'top_secret_key',
               'cipher-algo=aes256, compress-algo=1, unicode-mode=1'
       ) AS encrypted_message_with_options;

Пример: шифрование столбцов симметричным ключом

В этом примере показано, как зашифровать конфиденциальные данные в таблице с помощью pgp_sym_encrypt() и расшифровать их с помощью pgp_sym_decrypt().

Создайте таблицу для хранения данных о клиентах и их зашифрованных персональных идентификаторов:

CREATE TABLE customers
(
    customer_id INTEGER,
    name        TEXT,
    personal_id BYTEA
)
    WITH (appendoptimized = true)
    DISTRIBUTED BY (customer_id);

Задайте секретный ключ для шифрования и расшифровки:

\set secret_key 'top_secret_123'

Добавьте данные о клиентах, зашифровав столбец personal_id с помощью секретного ключа:

INSERT INTO customers (customer_id, name, personal_id)
VALUES (1, 'Andrew Fuller', pgp_sym_encrypt('ID-001-AF', :'secret_key')),
       (2, 'Michael Suyama', pgp_sym_encrypt('ID-002-MS', :'secret_key')),
       (3, 'Laura Callahan', pgp_sym_encrypt('ID-003-LC', :'secret_key'));

Выберите зашифрованные данные в исходном виде, чтобы показать, как они отображаются в таблице:

SELECT name,
       personal_id
FROM customers;

Результат:

      name      |                                                                       personal_id
----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------
 Laura Callahan | \xc30d040703028df998cc672875417fd23a0140342d5d9d0ff2b009502c9afff26256f48b2af213230a7173533f8cd91181794b9c70c065c2877064cbc6e51a0958ac21463881e619ad986d
 Andrew Fuller  | \xc30d04070302cc4a79bf1b48614972d23a017261253469237edb8598d1c8df0e7c2895b268ea6eace7f38dd159740616cafa9d15981e6c22751c9ac3196c19deb1eb3c8cd6d1ba7ef7b076
 Michael Suyama | \xc30d04070302e97127260b161f4062d23a01c412858005b76d946c82f9663c9a1b2b6cdadb72a9876ca01fce4f0987c9a5d0039b493e8c21dc8218ff2a33f3231a5cbdf9cf3176eeb0ff82
(3 rows)

Расшифруйте столбец personal_id, чтобы увидеть исходные данные:

SELECT name,
       pgp_sym_decrypt(personal_id, :'secret_key') AS personal_id
FROM customers;

Результат:

      name      | personal_id
----------------+-------------
 Michael Suyama | ID-002-MS
 Andrew Fuller  | ID-001-AF
 Laura Callahan | ID-003-LC
(3 rows)

Шифрование с использованием открытого ключа PGP

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

Сообщение можно зашифровать с использованием открытого ключа с помощью функции pgp_pub_encrypt():

SELECT pgp_pub_encrypt(
    'Top secret',
    dearmor('-----BEGIN PGP PUBLIC KEY BLOCK----- <public_key> -----END PGP PUBLIC KEY BLOCK-----')
);

Чтобы расшифровать сообщение, передайте соответствующий закрытый ключ функции pgp_pub_decrypt():

SELECT pgp_pub_decrypt(
    data::bytea,
    dearmor('-----BEGIN PGP PRIVATE KEY BLOCK----- <private_key> -----END PGP PRIVATE KEY BLOCK-----')
);

Функция armor() полезна для импорта и экспорта ключей или сообщений в текстовом формате.

Пример: шифрование столбцов с открытым ключом

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

Создайте таблицу для хранения данных клиентов и зашифрованных персональных идентификаторов:

CREATE TABLE customers
(
    customer_id INTEGER,
    name        TEXT,
    personal_id BYTEA
)
    WITH (appendoptimized = true)
    DISTRIBUTED BY (customer_id);

Загрузите открытый и закрытый PGP-ключи из файлов в переменные psql. В этом примере файлы ключей находятся в каталоге examples/data_encryption/certs:

\set public_key `cat examples/data_encryption/certs/public.key`
\set private_key `cat examples/data_encryption/certs/secret.key`
РЕКОМЕНДАЦИЯ

Инструкции по созданию PGP-ключей см. в разделе Генерация ключей PGP с помощью GnuPG.

Добавьте данные о клиентах, зашифровав столбец personal_id с помощью открытого ключа:

INSERT INTO customers (customer_id, name, personal_id)
VALUES (1, 'Andrew Fuller', pgp_pub_encrypt('ID-001-AF', dearmor(:'public_key'))),
       (2, 'Michael Suyama', pgp_pub_encrypt('ID-002-MS', dearmor(:'public_key'))),
       (3, 'Laura Callahan', pgp_pub_encrypt('ID-003-LC', dearmor(:'public_key')));

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

SELECT name,
       pgp_pub_decrypt(personal_id, dearmor(:'private_key'), 'top_secret_123') AS personal_id
FROM customers;

Результат:

      name      | personal_id
----------------+-------------
 Andrew Fuller  | ID-001-AF
 Michael Suyama | ID-002-MS
 Laura Callahan | ID-003-LC
(3 rows)

Генерация ключей PGP с помощью GnuPG

Вы можете использовать GnuPG для создания ключей PGP.

Сгенерируйте новую пару PGP-ключей:

$ gpg --full-generate-key

При появлении запроса выберите тип ключа, его размер, срок действия и идентификатор пользователя. Также будет предложено задать надежную парольную фразу. Эта фраза затем используется в качестве аргумента psw функции pgp_pub_decrypt().

Просмотрите доступные секретные ключи:

$ gpg --list-secret-keys

Пример вывода:

sec   dsa2048 2026-02-16 [SC]
      446049EA9E873DB8A526437CAD2C1899311684E7
uid           [ultimate] Greengage DB User <example@greengagedb.org>
ssb   elg2048 2026-02-16 [E]

Экспортируйте открытый ключ:

$ gpg -a --export <KEYID> > public.key

В приведенном выше примере KEYID — 446049EA9E873DB8A526437CAD2C1899311684E7.

Экспортируйте закрытый ключ:

$ gpg -a --export-secret-keys <KEYID> > secret.key

Справочник

ПРИМЕЧАНИЕ

В этом разделе не рассматриваются функции низкоуровневого шифрования (encrypt(), decrypt(), encrypt_iv(), decrypt_iv()), которые работают напрямую с шифрами, но не обеспечивают проверку целостности, автоматическое дополнение и корректную обработку текста. Рекомендуется использовать шифрование на основе PGP. Подробную информацию о функциях низкоуровневого шифрования см. в разделе pgcrypto документации PostgreSQL.

Функции pgcrypto

digest(data text, type text) returns bytea
digest(data bytea, type text) returns bytea

Вычисляет двоичное значение хеша для заданных входных данных. Параметр type задает используемый алгоритм хеширования (см. Поддерживаемые алгоритмы). К распространенным алгоритмам относятся md5, sha1, sha224, sha256, sha384 и sha512. Если pgcrypto собран с поддержкой OpenSSL, доступны дополнительные алгоритмы.

hmac(data text, key text, type text) returns bytea
hmac(data bytea, key bytea, type text) returns bytea

Вычисляет имитовставку (HMAC) для указанных данных с использованием указанного секретного ключа. Параметр type определяет алгоритм хеширования, аналогично digest().

В отличие от digest(), значение HMAC может быть вычислено повторно только тем, кто знает ключ. Это защищает от подмены данных, когда одновременно могли бы быть изменены и данные, и их хеш.

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

crypt(password text, salt text) returns text

Вычисляет хеш в стиле crypt(3) для указанного пароля. При сохранении нового пароля используйте функцию gen_salt() для генерации случайного значения соли. Чтобы проверить пароль, передайте сохраненный хеш в качестве параметра salt и сравните результат с сохраненным значением.

В таблице ниже перечислены алгоритмы, поддерживаемые функцией crypt().

Алгоритм Макс. длина пароля Адаптивный Размер соли (бит) Размер результата Описание

bf

72

да

128

60

На базе Blowfish, вариация 2a

md5

без ограничений

нет

48

34

crypt на базе MD5

xdes

8

да

24

20

Расширенный DES

des

8

нет

12

13

Классический UNIX crypt

gen_salt(type text [, iter_count integer ]) returns text

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

Параметр type определяет алгоритм хеширования. Допустимые значения: des, xdes, md5 и bf.

Необязательный параметр iter_count задает число итераций для алгоритмов xdes и bf. Более высокие значения увеличивают время вычисления хеша и повышают стойкость к атакам методом перебора. Допустимые значения iter_count приведены в таблице ниже.

Алгоритм По умолчанию Мин. Макс.

xdes

725

1

16777215

bf

6

4

31

pgp_sym_encrypt(data text, psw text [, options text ]) returns bytea
pgp_sym_encrypt_bytea(data bytea, psw text [, options text ]) returns bytea

Шифрует данные с использованием симметричного ключа PGP, заданного psw. Необязательный параметр options может включать одну или несколько настроек, описанных в разделе Параметры для функций PGP.

pgp_sym_decrypt(msg bytea, psw text [, options text ]) returns text
pgp_sym_decrypt_bytea(msg bytea, psw text [, options text ]) returns bytea

Расшифровывает PGP-сообщение, зашифрованное с использованием симметричного ключа.

Функцию pgp_sym_decrypt() нельзя использовать для расшифровки произвольных данных BYTEA, так как результат может содержать некорректный текст. Для двоичных данных или в случаях, когда исходная кодировка неизвестна, рекомендуется использовать pgp_sym_decrypt_bytea().

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

pgp_pub_encrypt(data text, key bytea [, options text ]) returns bytea
pgp_pub_encrypt_bytea(data bytea, key bytea [, options text ]) returns bytea

Шифрует данные с использованием открытого ключа PGP. Передача в эту функцию секретного (закрытого) ключа вызовет ошибку.

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

pgp_pub_decrypt(msg bytea, key bytea [, psw text [, options text ]]) returns text
pgp_pub_decrypt_bytea(msg bytea, key bytea [, psw text [, options text ]]) returns bytea

Расшифровывает сообщение, зашифрованное с помощью открытого PGP-ключа. Параметр key должен содержать закрытый ключ, соответствующий открытому ключу, использованному для шифрования. Если закрытый ключ защищен паролем, укажите его в psw. Если пароль не требуется, но нужно задать дополнительные параметры, передайте пустую строку в psw.

Функцию pgp_pub_decrypt() не следует использовать для расшифровки произвольных данных BYTEA, так как это может привести к некорректному текстовому выводу. Для двоичных данных или в случаях, когда исходная кодировка неизвестна, рекомендуется использовать pgp_pub_decrypt_bytea().

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

pgp_key_id(bytea) returns text

Извлекает идентификатор ключа из открытого или закрытого PGP-ключа. Если предоставлено зашифрованное сообщение, возвращает идентификатор ключа, который использовался для шифрования данных.

armor(data bytea) returns text
dearmor(data text) returns bytea

Преобразует двоичные данные в формат PGP ASCII-armor и обратно. Этот формат, по сути, представляет собой данные, закодированные в Base64, с контрольной суммой CRC и дополнительным форматированием для переносимости и читаемости.

gen_random_bytes(count integer) returns bytea

Генерирует count криптографически стойких случайных байтов. За один вызов можно получить не более 1024 байт, чтобы не исчерпать ресурсы генератора случайных чисел операционной системы.

gen_random_uuid() returns uuid

Возвращает UUID версии 4 (случайный).

Параметры для функций PGP

cipher-algo

Задает алгоритм шифрования.

Значения: bf, aes128, aes192, aes256 (только OpenSSL: 3des, cast5).
По умолчанию: aes128.
Применим к: pgp_sym_encrypt(), pgp_pub_encrypt().

compress-algo

Задает алгоритм сжатия. Доступно, если Greengage DB собран с поддержкой zlib (--with-zlib).

Значения:

  • 0 — без сжатия.

  • 1 — сжатие ZIP.

  • 2 — сжатие ZLIB (ZIP плюс метаданные и CRC блоков).

По умолчанию: 0.
Применим к: pgp_sym_encrypt(), pgp_pub_encrypt().

compress-level

Задает уровень сжатия. Более высокое значение уменьшает размер результата, но увеличивает время обработки. Значение 0 отключает сжатие.

Значения: 0, 1 — 9.
По умолчанию: 6.
Применим к: pgp_sym_encrypt(), pgp_pub_encrypt().

convert-crlf

Указывает, нужно ли при шифровании преобразовывать символ перевода строки (\n) в CRLF (\r\n) и обратно при расшифровке. Обеспечивает совместимость с RFC 4880 для текстовых данных.

Значения: 0, 1.
По умолчанию: 0.
Применим к: pgp_sym_encrypt(), pgp_pub_encrypt(), pgp_sym_decrypt(), pgp_pub_decrypt().

disable-mdc

Отключает проверку целостности на основе SHA-1. Используйте только для совместимости с устаревшим ПО PGP, выпущенным до стандарта RFC 4880.

Значения: 0, 1.
По умолчанию: 0.
Применим к: pgp_sym_encrypt(), pgp_pub_encrypt().

sess-key

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

Значения: 0, 1.
По умолчанию: 0.
Применим к: pgp_sym_encrypt().

s2k-mode

Задает алгоритм String-to-Key (S2K).

Значения:

  • 0 — без соли (небезопасно).

  • 1 — с солью и фиксированным числом итераций.

  • 3 — с солью и переменным числом итераций.

По умолчанию: 3.
Применим к: pgp_sym_encrypt().

s2k-digest-algo

Задает алгоритм хеширования для вычисления S2K.

Значения: md5, sha1.
По умолчанию: sha1.
Применим к: pgp_sym_encrypt().

s2k-cipher-algo

Задает шифр для шифрования отдельного сеансового ключа.

Значения: bf, aes, aes128, aes192, aes256.
По умолчанию: используется значение cipher-algo.
Применим к: pgp_sym_encrypt().

unicode-mode

Определяет, следует ли преобразовывать текстовые данные из кодировки базы данных в UTF-8 и обратно. Если база уже использует UTF-8, перекодировка не выполняется, но сообщение помечается как UTF-8. Без этого параметра тег UTF-8 не устанавливается.

Значения: 0, 1.
По умолчанию: 0.
Применим к: pgp_sym_encrypt(), pgp_pub_encrypt().