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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline bankir1980  
#1 Оставлено : 10 сентября 2021 г. 13:09:15(UTC)
bankir1980

Статус: Участник

Группы: Участники
Зарегистрирован: 20.12.2012(UTC)
Сообщений: 22
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Здравствуйте,

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

Нужно через интернет обмениваться сообщениями.

Предполагаю следующий алгоритм:

1. Сторона А имеет исходное сообщение в JSON формате
Код:
{message:"text"}


2. Высчитываем Хэш сообщения (message) и делаем подпись своим сертификатом. Вот тут теряюсь - присоединенную или отсоединенную?
3. К сообщению добавляю подпись
Код:
{message:"text", sign:"<подпись>"}

4. Шифруем JSON с помощью сертификата стороны Б (открытого ключа)
5. Отправляем стороне Б
6. Сторона Б расшифровывает сообщение своим закрытым ключём и получает содержимое в виде
Код:
{message:"text", sign:"<подпись>"}

7. Высчитывает Хэш сообщения (message),
8. Делает проверку по подписи из sign и Хэш(я правильно понимаю, что технически это просто подписывание (шифровка) сертификатом стороны А хэша и сравнение полученного результата с данными из sign?)

Я верно описал процесс или всё не так работает? :)

Online Андрей *  
#2 Оставлено : 10 сентября 2021 г. 13:13:13(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Здравствуйте.

Зачем сложности с промежуточным хешированием?

Сообщение -> подписать присоединенной подписью -> зашифровать.
//в виде файловых операций это: txt -> txt.sig -> txt.sig.enc

на получателе:
Расшифровать, проверить присоединенную подпись, получить подписанные данные (текст\файл\json .. что угодно).
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#3 Оставлено : 10 сентября 2021 г. 13:14:13(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Автор: bankir1980 Перейти к цитате

1. Сторона А имеет исходное сообщение в JSON формате
Код:
{message:"text"}





Код:
{encryptedmessage:"base64(enc(sig(json)))"}


Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#4 Оставлено : 10 сентября 2021 г. 13:16:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
либо:
если шифрование поверх, а внутри json:

тогда отсоединенная подпись.
(текст, подпись).
Всегда можно после расшифрования - увидеть json с текстом сообщения.
Если делать только присоединенную - тогда необходимо извлекать content после проверки cms.
Техническую поддержку оказываем тут
Наша база знаний
Offline bankir1980  
#5 Оставлено : 10 сентября 2021 г. 13:22:43(UTC)
bankir1980

Статус: Участник

Группы: Участники
Зарегистрирован: 20.12.2012(UTC)
Сообщений: 22
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Нам нужно обмениваться не файлами, а по TCP/IP протоколу.

Сложность для того, чтобы не гонять по сети жирные данные? Если, скажем сообщение будет 1 мегабайт размером? Подписывать такой объём будет быстро?
И как это будет выглядеть технически?
В примерах подпись делается так:
Код:

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)


Вот тут в signature только подпись или подпись вместе с сообщением? Это и будет присоединенная подпись?

Если только подпись, значит её нужно передавать вместе с текстом сообщения, как я и описывал и это будет отсоединенная подпись?

Offline bankir1980  
#6 Оставлено : 10 сентября 2021 г. 13:32:42(UTC)
bankir1980

Статус: Участник

Группы: Участники
Зарегистрирован: 20.12.2012(UTC)
Сообщений: 22
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате
либо:
если шифрование поверх, а внутри json:

тогда отсоединенная подпись.
(текст, подпись).
Всегда можно после расшифрования - увидеть json с текстом сообщения.
Если делать только присоединенную - тогда необходимо извлекать content после проверки cms.


Если объём передаваемых данных большой, то какой вариант лучше?

Правильно ли я понимаю, при присоединенной подписи в случае, если проверка подписи не прошла, данные просто уже не расшифровываем, а в случае с описанным мной вариантом (отсоединенная подпись) данные расшифровываются и в случае невалидности подписи мы просто тратим ресур на расшифровку впустую?
Online Андрей *  
#7 Оставлено : 10 сентября 2021 г. 13:45:00(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Автор: bankir1980 Перейти к цитате
Нам нужно обмениваться не файлами, а по TCP/IP протоколу.

Это был пример, чтобы было понятно, как выглядит.

По размерам:
Snimok ehkrana ot 2021-09-10 14-42-50.png (14kb) загружен 2 раз(а).
Скорость? ...
1 Мб (cms - текст с присоединенной подписью) у меня за 63 мсек зашифровался на 2 сертификата (отправитель\получатель)...
Snimok ehkrana ot 2021-09-10 14-42-40.png (8kb) загружен 1 раз(а).
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#8 Оставлено : 10 сентября 2021 г. 13:51:16(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Автор: bankir1980 Перейти к цитате

Правильно ли я понимаю, при присоединенной подписи в случае, если проверка подписи не прошла, данные просто уже не расшифровываем, а в случае с описанным мной вариантом (отсоединенная подпись) данные расшифровываются и в случае невалидности подписи мы просто тратим ресур на расшифровку впустую?


Зачем подписывать зашифрованные данные?
Чтобы знать от кого (если рассматриваем разбор ситуаций\дамп с файлом есть)?

Выше же написали:
подписали, зашифровали.
Никто без расшифровки - не сможет получить cms с подписанными данными\проверить подпись.


Но, если желаете..
то получается:
1. подписали отсоединенной
2. зашифровали json (внутри: текст, отсоединенная подпись)
3. подписали зашифрованный json (присоединенной или отсоединенной)?

Если отсоединенная - всегда нужно передавать то, что было подписано...
Техническую поддержку оказываем тут
Наша база знаний
Online Андрей *  
#9 Оставлено : 10 сентября 2021 г. 13:53:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Автор: bankir1980 Перейти к цитате
Нам нужно обмениваться не файлами, а по TCP/IP протоколу.


зашифрованные данные[подписанные присоединенной подписью данные]

данные = json (text\file)


Техническую поддержку оказываем тут
Наша база знаний
Offline bankir1980  
#10 Оставлено : 10 сентября 2021 г. 16:59:17(UTC)
bankir1980

Статус: Участник

Группы: Участники
Зарегистрирован: 20.12.2012(UTC)
Сообщений: 22
Откуда: Москва

Сказал(а) «Спасибо»: 1 раз
Автор: Андрей * Перейти к цитате


Но, если желаете..
то получается:
1. подписали отсоединенной
2. зашифровали json (внутри: текст, отсоединенная подпись)
3. подписали зашифрованный json (присоединенной или отсоединенной)?

Если отсоединенная - всегда нужно передавать то, что было подписано...


С этой схемой всё понятно.


Автор: Андрей * Перейти к цитате


Зачем подписывать зашифрованные данные?
Чтобы знать от кого (если рассматриваем разбор ситуаций\дамп с файлом есть)?

Выше же написали:
подписали, зашифровали.
Никто без расшифровки - не сможет получить cms с подписанными данными\проверить подпись.




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

Непонятно как работает с присоединенной подписью.

есть функция подписи - на входе такст - на выходе что? текст + подпись в каком-то внутреннем формате? В виде абракадабры или как? это всё подаём на вход функции шифрации, получая на выходе зашифрованную абракадабру и отправляем её по TCP/IP соединению?


А если сначала из текста путём шифрации получить абракадабру, а потом её подписать, что будет на выходе? зашифрованная абракадабра + подпись в каком то внутреннем формате (что позволить гипотетически подменить подпись на другую)? Или получится совершенно другая абракадабра, в которой подпись поменять не так то просто?

Online Андрей *  
#11 Оставлено : 10 сентября 2021 г. 17:20:01(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1595 раз в 1226 постах
Цитата:

signature = signedData.SignCades(signer, pycades.CADESCOM_CADES_BES)



https://docs.cryptopro.r.../icpsigneddata2signcades

Цитата:
SignCades (
VARIANT Signer,
CADESCOM_CADES_TYPE CadesType,
VARIANT_BOOL bDetached,
CAPICOM_ENCODING_TYPE EncodingType,
BSTR *pVal

Цитата:

bDetached Вид подписи: отделенная (true) или совмещенная (false). По умолчанию совмещенная.



Тогда делайте так:
json -> шифрование -> подписание (присоединенная).

На сервере\получателе:
проверка подписи - узнали от кого
расшифрование - если есть ключ - получили исходный json

Если нужно доказательства неизменности "текста" + от кого он:
в json добавлять отсоединенную подпись (несколько Кб):

Цитата:

{message:"text", sign:"<подпись отсоединенная>"}
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.