Статус: Участник
Группы: Участники
Зарегистрирован: 08.09.2023(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
Автор: Андрей * Странная версия плагина,откуда информация? Версия плагина: 2.0.14815
Такую возвращает хром в инфе о расширении. В виндовом списке программ указан номер сборки 2.0.14928. зы: вот тоже прямо то, что кажет ваша тестовая страница: Версия плагина: 2.0.14928 Версия криптопровайдера: 5.0.12922 Криптопровайдер: Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider Платформа: Windows UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Отредактировано пользователем 2 октября 2023 г. 17:37:46(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Автор: Максим Коллегин Добрый день, спасибо за исследование. Какая у вас версия плагина? Кажется, мы подобное недавно исправляли. Вы и сами можете убедиться что не работает шифрование. 1) Войдите на страницу на Вашем сайте https://www.cryptopro.ru...page/symalgo_sample.html2) Выберите 2 сертификата 3) Установите точку останова на файле https://www.cryptopro.ru...async_code.js?v=28675b12Строка 931 document.getElementById("DataEncryptedKey1").innerHTML = escapeHtml(ExportedKey1); 4) Нажмите Шифровать 5) Почитайте значение переменной var ExportedKey1 = yield oSymAlgo.ExportKey(certificate1); Там будет следующее "31 2E 32 2E 36 34 33 2E 37 2E 31 2E 32 2E 35 2E 31 2E 31 00:0A 20 00 00 49 2E 00 00 4D 41 47 31 00 02 00 00 30 13 06 07 2A 85 03 02 02 24 00 06 08 2A 85 03 07 01 01 02 02 F5 D3 0F 04 6A 3E F3 12 5F F7 34 85 9A 03 2A 37 7E 78 7F 15 78 39 7F 8F BD 19 A6 FB 8A 1E A1 B9 54 85 2F B4 36 94 3D DD 00 20 77 DF 63 D9 95 A6 AB 6C 7E 31 25 02 2E 3D AB 61 EC A2 74 CE 2E C1:01 20 00 00 1E 66 00 00 FD 51 4A 37 1E 66 00 00 73 D8 35 F3 AD F5 84 E0 F7 B6 E7 62 6B F1 00 57 79 18 26 8C 4F 4A F6 21 4E 91 67 73 13 D7 2D 6E 6F B7 49 9F 42 2C AD EE 1F 3C AE FD 30 09 06 07 2A 85 03 02 02 1F 01" Обратите внимание на конец строки 30 09 06 07 2A 85 03 02 02 1F 01 Именно об этом я и писал А исправляли судя по всему вы то что я писал на 1-й странице этого обсуждения https://www.cryptopro.ru...&m=138487#post138487Это совершенно разные вещи Я уже 4 раза дизассемблировал код вашего плагина и думаю что то в нем понимаю ) Отредактировано пользователем 2 октября 2023 г. 17:49:32(UTC)
| Причина: Не указана |
Выше только звезды |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.09.2023(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
Так. У меня есть некоторый прогресс. После очередных манипуляций с передаваемыми параметрами, они таки принялись в ImportKey. После этого также отработали SetMode/SetPadding - по всей видимости, они могли принять нужные параметры только после и в контексте импортированного ключа (это мое предположение). Дешифрование после этого отработало без ошибок, но выдало полную муть. Соответственно, ввиду отсутствия доков, есть вопросы: - точно ли строка шифрованных данных передается именно в Hex, а не в Base64, как в других методах? - учитывая, что первые 8 байт - это вектор инициализации, точно ли их нужно отрезать, или надо передавать вместе с преамбулой? - для вектора инициализации - играет ли роль форматирование Hex (наличие пробелов между байтами либо их отсутствие) при передаче в setprop_IV(...)? - при импорте ключа - проверяется ли результат декодирования симметричного ключа по MAC (что собственно обеспечивает "дуроустойчивость" к выбору нужного личного сертификата)?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Автор: Евгений111 Так. У меня есть некоторый прогресс. После очередных манипуляций с передаваемыми параметрами, они таки принялись в ImportKey. После этого также отработали SetMode/SetPadding - по всей видимости, они могли принять нужные параметры только после и в контексте импортированного ключа (это мое предположение). Дешифрование после этого отработало без ошибок, но выдало полную муть. Соответственно, ввиду отсутствия доков, есть вопросы: - точно ли строка шифрованных данных передается именно в Hex, а не в Base64, как в других методах? - учитывая, что первые 8 байт - это вектор инициализации, точно ли их нужно отрезать, или надо передавать вместе с преамбулой? - для вектора инициализации - играет ли роль форматирование Hex (наличие пробелов между байтами либо их отсутствие) при передаче в setprop_IV(...)? - при импорте ключа - проверяется ли результат декодирования симметричного ключа по MAC (что собственно обеспечивает "дуроустойчивость" к выбору нужного личного сертификата)? - шифрованная строка передается в формате: FF FF FF где FF - шестнадцатеричный код - шифрованная строка она без первых 8 байт - форматирование роли не играет. Но лучше все таки его соблюсти как в примерах - да насколько я понимаю при импорте ключа проверяется. Поэтому ключ должен быть правильный (при декодировании ключ МО) |
Выше только звезды |
1 пользователь поблагодарил SkySandy за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.09.2023(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
И я правильно понимаю, что в варианте, использованном ФСС, не применяется диверсификация ключа (DiversData)? Этого блока там просто нет. У них есть Ukm, идущий внутри блоба SessionKey, и они этим вроде бы ограничиваются.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Автор: Евгений111 И я правильно понимаю, что в варианте, использованном ФСС, не применяется диверсификация ключа (DiversData)? Этого блока там просто нет. У них есть Ukm, идущий внутри блоба SessionKey, и они этим вроде бы ограничиваются. Да в варианте шифрования-дешифрования ФСС - DiversData совсем не нужен |
Выше только звезды |
1 пользователь поблагодарил SkySandy за этот пост.
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,423
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 568 раз в 396 постах
|
Автор: SkySandy Обратите внимание на конец строки 30 09 06 07 2A 85 03 02 02 1F 01 Там будет Код:30 0B 06 09 2A 85 03 07 01 02 05 01 01
Это исправлено в составе релиз-кандидата КриптоПро CSP 5.0.12922 от 17.08.2023, версия плагина при этом должна быть 2.0.14926 на Windows и 2.0.14928 на unix-ах. Отдельного дистрибутива плагина с исправлением пока нет. Предыдущие версии плагина не годятся. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.09.2023(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
Новым плагином удалось успешно расшифровать, потому что он наконец-то принял в ImportKey OID от TZ26 (на который до этого упорно выдавал "плохие данные", что и заставило меня поменять оид в передаваемом блобе на вербу и получать хлам при расшифровке). Ура. Всем огромное спасибо.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2023(UTC) Сообщений: 1
|
Здравствуйте, пытаюсь отправить зашифрованное сообщение. Шифрую данные следующим образом: Код:
const oSymAlgo = await cadesplugin.CreateObjectAsync("cadescom.symmetricalgorithm");
await oSymAlgo.GenerateKey();
const oSesKeyIV = await oSymAlgo.IV;
const data = Buffer.from(`${unencryptedMessage}`).toString('base64');
await oSymAlgo.SetMode(cadesplugin.CRYPT_MODE_CBCSTRICT);
await oSymAlgo.SetPadding(cadesplugin.ISO10126_PADDING);
const EncryptedData = await oSymAlgo.Encrypt(data, 1);
const dataBase64 = Buffer.from(`${oSesKeyIV.replace(/ /g, '')}${EncryptedData}`, 'hex').toString('base64');
Далее, собираю KeyTransport: Код:
const ExportedKey = await oSymAlgo.ExportKey(cadesCertificate);
const ExportedKeyArr = ExportedKey.replace(/ /g, '').split(':');
const publicKey = ExportedKeyArr[1].substr(-64 * 2);
const sessionKeyBlob = ExportedKeyArr[2];
// UKM
const sessionSV = sessionKeyBlob.substr(16 * 2, 8 * 2);
// sessionKey
const sessionKey = sessionKeyBlob.substr(24 * 2, 32 * 2);
// MAC сессионного ключа
const sessionMAC = sessionKeyBlob.substr(56 * 2, 4 * 2);
const
T1 = '30 81 A9 30 28 04 20',
T2 = '04 04',
T3 = 'A0 7D 06 09 2A 85 03 07 01 02 05 01 01 A0 66 30 1F 06 08 2A 85 03 07 01 01 01 01 30 13 06 07 2A 85 03 02 02 24 00 ' +
'06 08 2A 85 03 07 01 01 02 02 03 43 00 04 40',
T4 = '04 08';
const keyTransport = (T1 + sessionKey + T2 + sessionMAC + T3 + publicKey + T4 + sessionSV)
.replace(/ /g, '');
const keyTransportBase64 = Buffer.from(keyTransport, 'hex').toString('base64');
Но получаю ошибку "Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС". Подскажите, в чем может быть ошибка? Отредактировано пользователем 20 ноября 2023 г. 14:38:45(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.12.2023(UTC) Сообщений: 2
|
Автор: cloud_gd Здравствуйте, пытаюсь отправить зашифрованное сообщение. Шифрую данные следующим образом: Код:
const oSymAlgo = await cadesplugin.CreateObjectAsync("cadescom.symmetricalgorithm");
await oSymAlgo.GenerateKey();
const oSesKeyIV = await oSymAlgo.IV;
const data = Buffer.from(`${unencryptedMessage}`).toString('base64');
await oSymAlgo.SetMode(cadesplugin.CRYPT_MODE_CBCSTRICT);
await oSymAlgo.SetPadding(cadesplugin.ISO10126_PADDING);
const EncryptedData = await oSymAlgo.Encrypt(data, 1);
const dataBase64 = Buffer.from(`${oSesKeyIV.replace(/ /g, '')}${EncryptedData}`, 'hex').toString('base64');
Далее, собираю KeyTransport: Код:
const ExportedKey = await oSymAlgo.ExportKey(cadesCertificate);
const ExportedKeyArr = ExportedKey.replace(/ /g, '').split(':');
const publicKey = ExportedKeyArr[1].substr(-64 * 2);
const sessionKeyBlob = ExportedKeyArr[2];
// UKM
const sessionSV = sessionKeyBlob.substr(16 * 2, 8 * 2);
// sessionKey
const sessionKey = sessionKeyBlob.substr(24 * 2, 32 * 2);
// MAC сессионного ключа
const sessionMAC = sessionKeyBlob.substr(56 * 2, 4 * 2);
const
T1 = '30 81 A9 30 28 04 20',
T2 = '04 04',
T3 = 'A0 7D 06 09 2A 85 03 07 01 02 05 01 01 A0 66 30 1F 06 08 2A 85 03 07 01 01 01 01 30 13 06 07 2A 85 03 02 02 24 00 ' +
'06 08 2A 85 03 07 01 01 02 02 03 43 00 04 40',
T4 = '04 08';
const keyTransport = (T1 + sessionKey + T2 + sessionMAC + T3 + publicKey + T4 + sessionSV)
.replace(/ /g, '');
const keyTransportBase64 = Buffer.from(keyTransport, 'hex').toString('base64');
Но получаю ошибку "Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС". Подскажите, в чем может быть ошибка? Добрый день. Нашли решение? В чем была проблема?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close