Пытаюсь реализовать на клиентской части шифрование для ФСС.
Вследствие изысканий по подписанию оказалось, что для плагина не все так сложно как на форуме пишут=)
Лично у меня сформировать математически корректную подпись руками (с RawSignature и хэшами) не удалось.. Спасло подписание XML по шаблону oSignedXML.Sign(oSigner). Поэтому предположила что на js реализация шифрования тоже может быть проще, чем кажется.
Обзор темы:
Предполагается использовать:
Вариант 1. CPEnvelopedData
https://docs.cryptopro.r...om_class/cpenvelopeddataИЛИ
Вариант 2. использовать SymmetricAlgorithm
https://docs.cryptopro.r...class/symmetricalgorithmВариант 1 oEnvelopedData.Encrypt выдает ответ в котором включены данные в ASN.1( шифрованные данные и сессионный ключ в hex.
тут человек говорит, что этот метод не делает как нужно для фсс - т.е. не генерит сессионный ключ, т.е. вероятно этот вариант не подходит и прикладывает исходники на с которые он прикрутил к своему коду.
В
документации метода же указана что сессионный ключ генерится:
Цитата:The Encrypt method generates a session key, uses that key to encrypt the contents, envelops the encrypted content for each recipient by encrypting the session key with each recipient's public key, and then returns the BLOB that contains the encrypted contents and the encrypted session keys as an encoded string.
Вариант 2 работает со следующими параметрами:
IV - вектор инициализаци
DiverseData - данные диверсификации ключа. Что такое диверсификация ключа и необходимы ли они для ФСС алгоритма - непонятно.
ExportKey - ключи (вероятно, согласования), которые почему-то всегда одинаковые, что здесь, что в дефолтной в
утилите шифрования от крипто про (UPD - они все-таки разные!!!).
Вот параметры Export Key
Цитата:1.Компонент является результатом выполнения CryptGetKeyParam(KP_CIPHEROID).
2.Эфемерный открытый ключ, который использовался для выработки ключа обмена. Компонент является результатом выполнения CryptExportKey(PUBLICKEYBLOBEX).
3.Симметричный ключ, зашифрованный на ключе обмена. Компонент является результатом выполнения CryptExportKey(SIMPLEBLOB).
и сами зашифрованные данные.
По идее из этих данных нужно получить ключ структуры вот такой (https://lapo.it/asn1js/#MIGpMCgEINeJQo4go2GVXm61yd8N4sexMqgMQyW9wOmGDiDse1vyBARiF_Ff[…]qu-lrBVBSG2D3FZQqwexkmg3GkXevCEettqzfdiTOLCIxatBAjxlNtjmaUsYw)
и к данным возможно прибавлять IV перед отправкой.
Главный вопрос: можно ли получить из структуры варианта 2 (из IV,DiverseData и ExportKey) сессионный ключ в формате, который можно будет передать в ФСС? Есть ли идеи как это сделать и как тут можно применить или не нужно DiverseData?
Отредактировано пользователем 23 марта 2022 г. 14:43:44(UTC)
| Причина: Не указана