Использование алгоритма хеширования в асимметричном криптографическом заполнении - PullRequest
2 голосов
/ 14 марта 2019

Я использую библиотеку Python Cryptography и выполняю асимметричное шифрование.

Я имею в виду этот пример .

>>> message = b"encrypted data"
>>> ciphertext = public_key.encrypt(
...     message,
...     padding.OAEP(
...         mgf=padding.MGF1(algorithm=hashes.SHA256()),
...         algorithm=hashes.SHA256(),
...         label=None
...     )
... )

Я понимаю, что делает заполнение,Однако я не могу относиться к , почему используется SHA256 ()?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

RSA-шифрование основано на перестановке RSA trapdoor : преобразование, которое легко выполнить в одном направлении, но невозможно в другом направлении, если вы не знаете «магическое» значение (закрытый ключ). Превратить функцию люка в схему шифрования нелегко. Для начала, жизненно важно, чтобы шифрование было недетерминированным : в противном случае, если бы кто-то мог догадаться, каким может быть сообщение, он мог бы проверить свое предположение, выполнив шифрование (с открытым ключом) и сравнивая с зашифрованным текстом, который они хотят взломать. Чтобы избежать этого, схемы шифрования всегда включают некоторую случайную часть, называемую nonce .

Операция RSA trapdoor принимает ввод, который имеет фиксированный размер, определяемый ключом. В основном, с ключом n -бит, вам нужна ( n -1) -битная строка ввода. Таким образом, чтобы зашифровать что-то, вам нужно построить строку необходимой длины из исходного сообщения. Операция по сборке полезных данных для шифрования и одноразовых номеров и их форматирования определенным образом называется padding . Существует два стандартных механизма заполнения для шифрования RSA: PKCS # 1v1.5 и OAEP.

Включение случайного одноразового номера необходимо, но недостаточно для обеспечения безопасности шифрования RSA. Математическая операция в корне RSA обладает некоторыми «хорошими» математическими свойствами. Во многих реальных ситуациях злоумышленник, желающий расшифровать зашифрованный текст, может отправить измененные зашифрованные тексты для расшифровки , и даже если эти зашифрованные тексты отклонены как недействительные, то как именно они отклоняются (сообщения об ошибках, время, …) Может быть достаточно для восстановления открытого текста. Это проблема с дополнением PKCS # 1v1.5, которое уязвимо для атак оракула, таких как атака Блейхенбахера и атака Манджера , когда атакующий генерирует модифицированные шифротексты и получает информацию об их достоверности, которая в конечном итоге позволяет восстановить открытый текст.

OAEP предназначен для того, чтобы злоумышленник не смог создать полезные шифротексты. В двух словах, он работает, маскируя (с помощью xor) полезную нагрузку псевдослучайной строкой. Стандартный способ генерирования этой псевдослучайной строки - это конструкция MGF1, которая начинается с начального числа и многократно ее хэширует. Эта маскировка нарушает математические отношения, вызванные операцией возведения в степень RSA: изменение зашифрованного текста приводит к открытым текстам, которые совершенно не связаны после снятия маски. Таким образом, если злоумышленник попытается отправить измененные шифротексты, он просто получит ошибки дешифрования, которые не предоставляют никакой полезной информации для восстановления открытого текста.

OAEP включает в себя вторую хэш-функцию для включения метки в шифрование. Метка включается в вычисление маски таким образом, что попытка дешифрования с неправильной меткой приводит к ошибке дешифрования (таким образом, что не выявляется правильная метка). Для вычисления маски используется хэш метки. На практике эта функция используется редко, и в качестве метки по умолчанию используется пустая строка. Кроме того, на практике каждый использует один и тот же алгоритм хеширования для метки и для генерации маски, но некоторые библиотеки позволяют указывать разные хэши.

1 голос
/ 14 марта 2019

Если вы посмотрите на дизайн Оптимальное асимметричное шифрование ( OAEP.pdf ), вы увидите, что ему нужны две хеш-функции G и H с разными свойствами,

G и H обычно являются некоторыми криптографическими хеш-функциями, установленными протоколом.

Эти два необходимы для двух разных свойств;

  1. H хеш-функция уменьшает ввод в вывод фиксированного размера.
  2. G - это Функция генерации маски (MGF) , которая использует хеш-функцию для расширения входных данных до выходных данных желаемого размера.Определяется в rfc8017
...