2

Я получаю различные результаты при выполнении команды PostgreSQL pgp_sym_encrypt с тем же открытым текстом и парольной фразой в качестве ввода. При расшифровке этих разных результатов с помощью одной и той же парольной фразы, я получаю верный простой текст.

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

Та же проблема с простым текстом, уникальным ключом и сессионным ключом также.

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

Пример:

pgp_sym_encrypt('12345','key1')

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

1 ответ1

2

OpenPGP шифрование

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

Этот ключ сеанса теперь шифруется с использованием ключевой фразы. Применяя такой двухэтапный подход, можно зашифровать сообщение один раз, но разрешить дешифрование с использованием разных закрытых ключей или парольных фраз, добавив зашифрованную копию ключа сеанса один раз. Для более глубокого понимания того, как создаются сообщения OpenPGP, взгляните на RFC 4880, OpenPGP и вывод gpg --list-packets packages и pgpdump для зашифрованного сообщения (оба они печатают информацию в пакетах OpenPGP).

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

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

Уникальное ограничение на зашифрованный вывод

Если вам необходимо иметь уникальное ограничение для сообщения, рассчитайте криптографическую хеш-сумму (например, SHA-256) для сообщения и сохраните ее дополнительно (и вычислите уникальное ограничение на хеш-сумму вместо зашифрованного сообщения).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .