Генерация RSA-ключей и XML-подписи, проверки подлинности XML-файла

Генерация RSA-ключей и XML-подписи, проверки подлинности XML-файла

На странице можно найти и бесплатно скачать код программы на Python, которая генерирует RSA-ключи, создает и добавляет XML-подпись (XMLDSig), проверяет подлинность XML-файла. Также в конце статьи кратко дается ответ на вопрос, зачем вообще всё это нужно.

Что делает программа

Программа на Python содержит в себе следующие функции:

  1. Генерация публичного и приватного RSA-ключей.
  2. Создание и размещение в файле XML-подписи (формат XMLDSig).
  3. Проверка подлинности XML-файла на основе публичного ключа и размещенной в XML-файле подписи.

Как работает программа

Открывается XML-файл и считается его содержимое.

Создается публичный и приватный ключи (сертификат RSA):

key = RSA.generate(2048)
private_key = key
public_key = key.publickey()

Ключи сохраняются в формате «PEM».

Для XML-файла создается подпись на SHA256 алгоритме:

hash_value = SHA256.new(XML.encode('utf-8'))
signer = pkcs1_15.new(private_key)
signature = signer.sign(hash_value)

Подпись добавляется в новый XML-файл по формату XMLDSig. Пример такого файла:

<?xml version='1.0' encoding='UTF-8'?>
<invoice>
<date>01.01.2024</date>
<invoiceType>ORDINARY_INVOICE</invoiceType>
<num>111</num>
<operatorFullname>ФИО</operatorFullname>
<signatureType>COMPANY</signatureType>
<turnoverDate>01.01.2024</turnoverDate>
<Signature><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue/></Reference></SignedInfo><SignatureValue>ПОДПИСЬ</SignatureValue><KeyInfo><X509Data><X509Certificate/></X509Data></KeyInfo></Signature></invoice>

Используя публичный ключ и собирая данные из XML-файла (информация внутри Signature), выполняется проверка содержания XML-файла на соответствие оригиналу:

hash_value = SHA256.new(Signature)
verifier = pkcs1_15.new(public_key)
verifier.verify(hash_value, base64.b64decode(signature))

В результате выводится текст, соответствует ли XML-файл оригиналу или были произведены изменения.

Скачать код программы

Нажав на кнопку ниже, сперва вам будет необходимо посмотреть рекламу, затем бесплатно будет отображен код текущей программы.

Примечание

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

Зачем нужно подписывать XML файлы с использованием RSA и PEM

Подписание XML файлов с использованием алгоритма RSA и формата ключей PEM представляет собой важную практику в обеспечении безопасности передачи данных и проверки их целостности.

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

Использование RSA и PEM для подписи XML файлов также обеспечивает возможность аутентификации отправителя. Получатель может убедиться, что файл был подписан соответствующим отправителем, используя его публичный ключ для верификации подписи.

Множество современных стандартов и протоколов, таких как SAML (Security Assertion Markup Language) и WS-Security (Web Services Security), требуют подписывать XML документы для обеспечения безопасности при обмене данными в рамках веб-сервисов. Использование RSA и PEM соответствует этим стандартам и обеспечивает совместимость с различными системами.

Автор: EK (заказать услуги программиста, поблагодарить).

Комментарии

Если у вас возникли вопросы или замечания — напишите комментарий!

Оставить комментарий

Нажимая на кнопку «Оставить комментарий», я даю согласие на обработку персональных данных.