Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

24 Страницы«<1819202122>»
Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#191 Оставлено : 17 сентября 2021 г. 13:31:29(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,602
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Цитата:
UPD: Попробовал разные варианты, и если я правильно понимаю, то это RawSignature, в которой подписали хеш SignedInfo. Так ли это?
Добрый день. По стандарту да.
Подпись гост включает в себя случайное значение, так что меняется каждый раз даже если данные и ключ не изменились. Более того, для гост не описан алгоритм как по значению подписи восстановить хэш (проверка подписи основана на другом принципе), поэтому и промежуточный хэш от SignedInfo заранее нам неизвестен.
Что происходит у них - неизвестно, так как Java класс могли переопределить и там может произойти все что угодно. Как я понимаю, обычно это все в одной строке:
Код:
signature.initSign(privateKey)
    signature.update(signInfoXml.toByteArray())
    val sign = signature.sign()
Судите сами по краткому пересказу стандарта (подпись собирается сразу в документе без формирования кусками и и вставки в каркас):
thanks 1 пользователь поблагодарил two_oceans за этот пост.
Андрей * оставлено 17.09.2021(UTC)
Offline Санчир Момолдаев  
#192 Оставлено : 27 сентября 2021 г. 21:58:59(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,190
Российская Федерация

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Автор: Dmitriy Chernyshov Перейти к цитате

И можно ли аналоги сделать на pycades?

Здравствуйте!
если актуально
Код:
# хэширование текстовых или байтовых данных
def gostHash(data, isText=True):
    hashedData = pycades.HashedData()
    hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
    hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
    if isText:
        hashedData.Hash(base64.b64encode(data.encode("utf-8")).decode())
    else:
        hashedData.Hash(base64.b64encode(data).decode())
    hexHash = hashedData.Value
    byteHash = bytes.fromhex(hexHash)
    return base64.b64encode(byteHash).decode()

# само значение подписи.
# возвращать надо либо signature либо invert в зависимости от принимающей стороны
def signHash(cert, hashBase64):
    hashValue = base64.b64decode(hashBase64)
    hashValue = hashValue.hex()
    hashedData = pycades.HashedData()
    hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
    hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
    hashedData.SetHashValue(hashValue)
    rawSign = pycades.RawSignature()
    signature = rawSign.SignHash(hashedData, cert)
    invert = bytearray(reversed(bytearray.fromhex(signature)))
    invert = base64.b64encode(invert).decode()
    signature = bytes.fromhex(signature)
    signature = base64.b64encode(signature).decode()
    # return signature
    return invert



Техническую поддержку оказываем тут
Наша база знаний
Offline mczim  
#193 Оставлено : 7 октября 2021 г. 20:19:56(UTC)
mczim

Статус: Новичок

Группы: Участники
Зарегистрирован: 07.10.2021(UTC)
Сообщений: 2

Добрый вечер. Есть зашифрованный, подписанный документ. Как мне в питоне расшифровать и вынуть подписанный документ?

Расшифровываю так.

Код:
store = pycades.Store()
store.Open(pycades.CADESCOM_CURRENT_USER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert(certs.Count != 0), "Certificates with private key not found"

with open('20210917_1.xml.sig.enc', 'r') as f:
    file_content = f.read()

envelopedData = pycades.EnvelopedData()
envelopedData.Decrypt(file_content)
content = envelopedData.Content


в file_content как я понимаю подписанный документ. Как мне его вынуть оттуда?

В ОС linux это две команды

bin/cryptcp -decr -nochain -norev -1 -dn 'CN=...' -start 20210917_1.xml.sig.enc 20210917_1.xml.sig
bin/cryptcp -verify -nochain -norev 20210917_1.xml.sig 20210917_1.xml

Как тоже самое сделать в питоне?

Спасибо.
Offline mczim  
#194 Оставлено : 7 октября 2021 г. 20:47:18(UTC)
mczim

Статус: Новичок

Группы: Участники
Зарегистрирован: 07.10.2021(UTC)
Сообщений: 2

Насколько понимаю нужно делать так

Код:
signed_data = pycades.SignedData()
result = signed_data.VerifyCades(content, pycades.CADESCOM_CADES_BES)


Но, теперь получаю ошибку

Код:
    result = signed_data.VerifyCades(content, pycades.CADESCOM_CADES_T)
Exception: Internal error. (0x8009100E)
Offline max1v  
#195 Оставлено : 21 января 2022 г. 10:05:24(UTC)
max1v

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.01.2022(UTC)
Сообщений: 4
Российская Федерация

Попробовал указанную выше реализацию подписания внутри контейнера. Столкнулся с проблемами с кириллицей при подписании.
Первый print выводит корректую строку, где есть кириллица, например:

Цитата:
<ser:name>Роман</ser:name>


Второй print после подписания уже выводит закодированную кириллицу:

Цитата:
<ser:name>&#x420;&#x43E;&#x43C;&#x430;&#x43D;</ser:name>


Кусок кода с подписанием:

Цитата:
xml = ET.tostring(root, encoding='unicode')
print(xml)
signer = pycades.Signer()
signer.Certificate = certificate
signedXML = pycades.SignedXML()
signedXML.Content = xml
signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE
signed_xml = signedXML.Sign(signer)
print(signed_xml)


Подскажите, пожалуйста, сталкивался ли кто-то с этой проблемой? Как избавится от этого кодирования и что я делаю не так?
Offline Санчир Момолдаев  
#196 Оставлено : 21 января 2022 г. 20:34:45(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,190
Российская Федерация

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Автор: mczim Перейти к цитате
Насколько понимаю нужно делать так

Код:
signed_data = pycades.SignedData()
result = signed_data.VerifyCades(content, pycades.CADESCOM_CADES_BES)


Но, теперь получаю ошибку

Код:
    result = signed_data.VerifyCades(content, pycades.CADESCOM_CADES_T)
Exception: Internal error. (0x8009100E)


Добрый день.
если актуально
Код:
import os
import pycades
import base64


def decrypt(bas64):
    envelopeddata = pycades.EnvelopedData()
    envelopeddata.Decrypt(bas64)
    envelopeddata.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
    return base64.b64decode(envelopeddata.Content).decode()


def verify(_sign, cadesType=pycades.CADESCOM_CADES_BES, detached=False):
    signedData = pycades.SignedData()
    try:
        signedData.VerifyCades(_sign, cadesType, detached)
        return True
    except Exception as err:
        print('Verify fail')
        print(err)
        return False


def getContent(sign, cadesType=pycades.CADESCOM_CADES_BES):
    signedData = pycades.SignedData()
    signedData.VerifyCades(sign, cadesType, False)
    signedData.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
    return base64.b64decode(signedData.Content).decode()


signed_encoded_file = open(os.path.expanduser('~') + '/data.txt.sig.enc', 'r').read()

sign = decrypt(signed_encoded_file)

print(sign)
if verify(sign):
    print(getContent(sign))

файл подписи и зашифрованный файл в base64 кодировке
Техническую поддержку оказываем тут
Наша база знаний
Offline Санчир Момолдаев  
#197 Оставлено : 21 января 2022 г. 20:38:06(UTC)
Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,190
Российская Федерация

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 272 раз в 253 постах
Автор: max1v Перейти к цитате
Попробовал указанную выше реализацию подписания внутри контейнера. Столкнулся с проблемами с кириллицей при подписании.
Первый print выводит корректую строку, где есть кириллица, например:

Цитата:
<ser:name>Роман</ser:name>


Второй print после подписания уже выводит закодированную кириллицу:

Цитата:
<ser:name>&#x420;&#x43E;&#x43C;&#x430;&#x43D;</ser:name>


Кусок кода с подписанием:

Цитата:
xml = ET.tostring(root, encoding='unicode')
print(xml)
signer = pycades.Signer()
signer.Certificate = certificate
signedXML = pycades.SignedXML()
signedXML.Content = xml
signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE
signed_xml = signedXML.Sign(signer)
print(signed_xml)


Подскажите, пожалуйста, сталкивался ли кто-то с этой проблемой? Как избавится от этого кодирования и что я делаю не так?


Добрый день!
убедитесь что в начале файла указана кодировка
Цитата:
<?xml version="1.0" encoding="UTF-8"?>

все выводится корректно после подписи
Цитата:
<УТ2:НаименованиеКраткое>ООО «СЕВЕР»</УТ2:НаименованиеКраткое>

не забывайте про кодировку
Техническую поддержку оказываем тут
Наша база знаний
Offline max1v  
#198 Оставлено : 24 января 2022 г. 7:22:57(UTC)
max1v

Статус: Новичок

Группы: Участники
Зарегистрирован: 19.01.2022(UTC)
Сообщений: 4
Российская Федерация

Автор: Санчир Момолдаев Перейти к цитате
Автор: max1v Перейти к цитате
Попробовал указанную выше реализацию подписания внутри контейнера. Столкнулся с проблемами с кириллицей при подписании.
Первый print выводит корректую строку, где есть кириллица, например:

Цитата:
<ser:name>Роман</ser:name>


Второй print после подписания уже выводит закодированную кириллицу:

Цитата:
<ser:name>&#x420;&#x43E;&#x43C;&#x430;&#x43D;</ser:name>


Кусок кода с подписанием:

Цитата:
xml = ET.tostring(root, encoding='unicode')
print(xml)
signer = pycades.Signer()
signer.Certificate = certificate
signedXML = pycades.SignedXML()
signedXML.Content = xml
signedXML.SignatureType = pycades.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE
signed_xml = signedXML.Sign(signer)
print(signed_xml)


Подскажите, пожалуйста, сталкивался ли кто-то с этой проблемой? Как избавится от этого кодирования и что я делаю не так?


Добрый день!
убедитесь что в начале файла указана кодировка
Цитата:
<?xml version="1.0" encoding="UTF-8"?>

все выводится корректно после подписи
Цитата:
<УТ2:НаименованиеКраткое>ООО «СЕВЕР»</УТ2:НаименованиеКраткое>

не забывайте про кодировку


Большое спасибо! ElementTree по-умолчанию не выводит <?xml?> тэг, на что я не обратил внимания. После явного указания параметра xml_declaration в ET.tostring, проблема исчезла.
Offline gromperk  
#199 Оставлено : 14 апреля 2022 г. 19:22:24(UTC)
gromperk

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.04.2022(UTC)
Сообщений: 1

Добрый день. При запуске скрипта:
Код:
import pycades

store = pycades.Store()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert(certs.Count != 0), "Certificates with private key not found"

signer = pycades.Signer()
signer.Certificate = certs.Item(1)
signer.CheckCertificate = True

signedData = pycades.SignedData()
signedData.Content = "Test content to be signed"
signature = signedData.SignCades(signer, pycades.CADESCOM_CADES_BES)

print("--Signature--")
print(signature)
print("----")

_signedData = pycades.SignedData()
_signedData.VerifyCades(signature, pycades.CADESCOM_CADES_BES)
print("Verified successfully")


На строке
Код:
signature = signedData.SignCades(signer, pycades.CADESCOM_CADES_BES)

Вылетает ошибка
Цитата:
Internal error. (0x80004005)

Хотелось бы понять, что она означает.
Offline maslastja  
#200 Оставлено : 29 апреля 2022 г. 5:10:20(UTC)
maslastja

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.04.2022(UTC)
Сообщений: 2
Российская Федерация

Здравствуйте!
с помощью pycades можно зашифровать ЭЛН для ФСС?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
24 Страницы«<1819202122>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.