Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Здравствуйте, Подскажите, пожалуйста, каков правильный алгоритм для операции шифрования и подписания данных? Нужно через интернет обмениваться сообщениями. Предполагаю следующий алгоритм: 1. Сторона А имеет исходное сообщение в JSON формате 2. Высчитываем Хэш сообщения (message) и делаем подпись своим сертификатом. Вот тут теряюсь - присоединенную или отсоединенную? 3. К сообщению добавляю подпись Код:{message:"text", sign:"<подпись>"}
4. Шифруем JSON с помощью сертификата стороны Б (открытого ключа) 5. Отправляем стороне Б 6. Сторона Б расшифровывает сообщение своим закрытым ключём и получает содержимое в виде Код:{message:"text", sign:"<подпись>"}
7. Высчитывает Хэш сообщения (message), 8. Делает проверку по подписи из sign и Хэш(я правильно понимаю, что технически это просто подписывание (шифровка) сертификатом стороны А хэша и сравнение полученного результата с данными из sign?) Я верно описал процесс или всё не так работает? :)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,704 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Здравствуйте.
Зачем сложности с промежуточным хешированием?
Сообщение -> подписать присоединенной подписью -> зашифровать. //в виде файловых операций это: txt -> txt.sig -> txt.sig.enc
на получателе: Расшифровать, проверить присоединенную подпись, получить подписанные данные (текст\файл\json .. что угодно).
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,704 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Автор: bankir1980 1. Сторона А имеет исходное сообщение в JSON формате Код:{encryptedmessage:"base64(enc(sig(json)))"}
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,704 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
либо: если шифрование поверх, а внутри json:
тогда отсоединенная подпись. (текст, подпись). Всегда можно после расшифрования - увидеть json с текстом сообщения. Если делать только присоединенную - тогда необходимо извлекать content после проверки cms.
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 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 только подпись или подпись вместе с сообщением? Это и будет присоединенная подпись? Если только подпись, значит её нужно передавать вместе с текстом сообщения, как я и описывал и это будет отсоединенная подпись?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * либо: если шифрование поверх, а внутри json:
тогда отсоединенная подпись. (текст, подпись). Всегда можно после расшифрования - увидеть json с текстом сообщения. Если делать только присоединенную - тогда необходимо извлекать content после проверки cms.
Если объём передаваемых данных большой, то какой вариант лучше? Правильно ли я понимаю, при присоединенной подписи в случае, если проверка подписи не прошла, данные просто уже не расшифровываем, а в случае с описанным мной вариантом (отсоединенная подпись) данные расшифровываются и в случае невалидности подписи мы просто тратим ресур на расшифровку впустую?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,704 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Автор: 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 раз(а). |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,704 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Автор: bankir1980 Правильно ли я понимаю, при присоединенной подписи в случае, если проверка подписи не прошла, данные просто уже не расшифровываем, а в случае с описанным мной вариантом (отсоединенная подпись) данные расшифровываются и в случае невалидности подписи мы просто тратим ресур на расшифровку впустую? Зачем подписывать зашифрованные данные? Чтобы знать от кого (если рассматриваем разбор ситуаций\дамп с файлом есть)? Выше же написали: подписали, зашифровали. Никто без расшифровки - не сможет получить cms с подписанными данными\проверить подпись. Но, если желаете.. то получается: 1. подписали отсоединенной 2. зашифровали json (внутри: текст, отсоединенная подпись) 3. подписали зашифрованный json (присоединенной или отсоединенной)? Если отсоединенная - всегда нужно передавать то, что было подписано... |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,704 Сказал «Спасибо»: 500 раз Поблагодарили: 2051 раз в 1591 постах
|
Автор: bankir1980 Нам нужно обмениваться не файлами, а по TCP/IP протоколу.
зашифрованные данные[подписанные присоединенной подписью данные] данные = json (text\file) |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.12.2012(UTC) Сообщений: 29 Откуда: Москва
Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей * Но, если желаете.. то получается: 1. подписали отсоединенной 2. зашифровали json (внутри: текст, отсоединенная подпись) 3. подписали зашифрованный json (присоединенной или отсоединенной)?
Если отсоединенная - всегда нужно передавать то, что было подписано...
С этой схемой всё понятно. Автор: Андрей * Зачем подписывать зашифрованные данные? Чтобы знать от кого (если рассматриваем разбор ситуаций\дамп с файлом есть)?
Выше же написали: подписали, зашифровали. Никто без расшифровки - не сможет получить cms с подписанными данными\проверить подпись.
Вот тут всё равно не понятно. Задача передать сообщение с шифрацией и точно знать, что оно пришло от того, от кого ожидаем. Если просто шифрация всё понятно, на входе функции шифрации текст, на выходе абракадабра. Непонятно как работает с присоединенной подписью. есть функция подписи - на входе такст - на выходе что? текст + подпись в каком-то внутреннем формате? В виде абракадабры или как? это всё подаём на вход функции шифрации, получая на выходе зашифрованную абракадабру и отправляем её по TCP/IP соединению? А если сначала из текста путём шифрации получить абракадабру, а потом её подписать, что будет на выходе? зашифрованная абракадабра + подпись в каком то внутреннем формате (что позволить гипотетически подменить подпись на другую)? Или получится совершенно другая абракадабра, в которой подпись поменять не так то просто?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close