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

Уведомление

Icon
Error

6 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline it-for-bi  
#1 Оставлено : 21 июня 2019 г. 14:18:35(UTC)
it-for-bi

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

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

Здравствуйте!

Пытаемся перенести реализованный функционал шифрования ЭЛН из Delphi на web-клиент.
Этапы шифрования сообщения согласно спецификации ФСС:


Возникло непонимание правильно ли мы получаем эфемерный и сессионный ключи методом, из которых впоследствии собираем структуру GostR3410 KeyTransport?
В Delphi перед получением данных был шаг получения ключа согласования. Нужно ли в js его получать или это выполняется внутри метода?
Код:
ExportedKey = yield oSymAlgo.ExportKey(oCertificate);



Код:

//Константы для сборки GostR3410 KeyTransport
const
  T1 = '30 81 A4 30 28 04 20',
  T2 = '04 04',
  T3 = 'A0 78 06 07 2A 85 03 02 02 1F 01 A0 63 30 1C 06 06 2A 85 03 02 02 13 30 12 06 07 ' +
       '2A 85 03 02 02 24 00 06 07 2A 85 03 02 02 1E 01 03 43 00 04 40',
  T4 = '04 08';

var
  keyTransport,
  sessionSV, sessionKey, sessionMAC, publicKey,
  oSesKeyIV, EncryptedData, ExportedKey,
  ExportedKeyArr, sessionKey, sessionKeyBlob;

try {
        var oSymAlgo = yield cadesplugin.CreateObjectAsync("cadescom.symmetricalgorithm");
    } catch (err) {
        errormes = "Failed to create cadescom.symmetricalgorithm: " + err;
        alert(errormes);
        throw errormes;
    }

yield oSymAlgo.GenerateKey();

//var oSesKey = yield oSymAlgo.DiversifyKey();
//var oSesKeyDiversData = yield oSymAlgo.DiversData;
oSesKeyIV = yield oSymAlgo.IV;
EncryptedData = yield oSymAlgo.Encrypt(Base64.encode(data), 1);
ExportedKey = yield oSymAlgo.ExportKey(oCertificate);

ExportedKeyArr = ExportedKey.replace(/ /g, '').split(':');
publicKey = ExportedKeyArr[1]. substr(-64 * 2);
sessionKeyBlob = ExportedKeyArr[2];
sessionSV = sessionKeyBlob.substr(16  2, 8  2);
sessionKey = sessionKeyBlob.substr(24  2, 32  2);
sessionMAC = sessionKeyBlob.substr(56  2, 4  2);

keyTransport = (T1 + sessionKey + T2 + sessionMAC + T3 + publicKey + T4 + sessionSV)
                  .replace(/ /g, '');

EncryptedData = oSesKeyIV.replace(/ /g, '') + EncryptedData;


Отредактировано пользователем 23 июня 2019 г. 22:30:34(UTC)  | Причина: Не указана

Offline aiaks  
#2 Оставлено : 21 ноября 2019 г. 10:07:20(UTC)
aiaks

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

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

Согласно API Метод ISymmetricAlgorithm::ExportKey - экспортирует симметричный ключ в зашифрованном виде.

Существует вообще метод получения через Browser plug-in симметричного ключа в незашифрованном виде?
ФСС пишет "на базе закрытого ключа эфемерной пары", но через Browser plug-in нет возможности получить закрытый ключ эфемерной пары. ISymmetricAlgorithm::ExportKey - экспортирует Эфемерный открытый ключ.
Offline two_oceans  
#3 Оставлено : 21 ноября 2019 г. 10:41:09(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Добрый день.
Следите за логикой, у симметричного алгоритма нет разделения на открытый и закрытый ключ, так как они совпадают.
У ассиметричного алгоритма согласно требованиям сертификации не должно быть способа экспорта закрытого ключа без защиты шифрованием.

Отредактировано пользователем 21 ноября 2019 г. 10:45:52(UTC)  | Причина: Не указана

Offline user100000  
#4 Оставлено : 27 января 2020 г. 0:11:51(UTC)
user100000

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

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

Автор: it-for-bi Перейти к цитате
Здравствуйте!

реализованный функционал шифрования ЭЛН из Delphi


А можно посмотреть?)
Offline two_oceans  
#5 Оставлено : 27 января 2020 г. 14:59:32(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Если на Delphi с ручным формированием обвязки ключа гост-2001, то базовый пример тут. Для гост-2012 надо задать немного другое формирование ключа (указать парамсет TK26) и поправить обвязку (значения от Т1 до T4 выше с учетом другого парамсета и изменения длины). Схема PRO используется ФСС и для гост-2012, поэтому править на PRO12 нет необходимости. Также можно вызвать специальную функцию для автоматического формирования обвязки, не мучаться вручную. Это все есть фрагментарно на форуме, просто раскидано в разных темах.

Есть также исходники на Джава и .NET, только поискать по форуму. Пока не видел полного текста через плагин или php. ЭЛН (ФСС) очень активно обсуждается на форуме, но почему-то все создают отдельные темы где придумают, вместо аккамулирования решений в одном месте.

Отредактировано пользователем 27 января 2020 г. 15:13:07(UTC)  | Причина: Не указана

Offline razinkinav  
#6 Оставлено : 14 октября 2020 г. 14:21:05(UTC)
razinkinav

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

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

Добрый день.
Удалось реализовать шифрование XML для отправки ЭЛН в ФСС через Крипто-Про browser plugin?
Если да, не поделитесь решением?
Offline delem  
#7 Оставлено : 4 декабря 2021 г. 21:33:41(UTC)
delem

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

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

Сказал(а) «Спасибо»: 1 раз
Здравствуйте,
тоже интересен вопрос, удалась ли реализация?
Offline SkySandy  
#8 Оставлено : 28 января 2023 г. 10:24:52(UTC)
SkySandy

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

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

Сказал «Спасибо»: 1 раз
Поблагодарили: 15 раз в 9 постах
К сожалению, с помощью оригинального Browser plug-in зашифровать-расшифровать сообщение для ФСС или любого другого органа государственной власти в России невозможно

Для этой работы используется SymmetricAlgorithm. Но все параметры по обмену информацией программисты КриптоПро заложили внутрь и не дают настраивать. Мне пришлось дизассемблировать весь обмен весь обмен с помощью SymmetricAlgorithm что бы посмотреть что реально происходит - какие функции Windows API вызываются

Так например простейшее действие по расшифровке сообщения ФСС начинается со строк:
SymmetricAlgorithm oSymAlgo = new SymmetricAlgorithm();
oSymAlgo.ImportKey(ExportedKey, cert);

Это порождает следующие вызовы Windows API:
CryptGetUserKey
CryptImportKey
CryptSetKeyParam KP_ALGID 0x6621
CryptSetKeyParam KP_CIPHEROID '1.2.643.7.1.2.5.1.1
CryptImportKey

На первый взгляд все вроде правильно, но как говорится смотри детали. Если взять работающую расшифровку сообщения то она будет такая:
CryptGetUserKey
CryptImportKey
CryptSetKeyParam KP_ALGID = 7 0x661F
CryptSetKeyParam KP_CIPHEROID '1.2.643.7.1.2.5.1.1
CryptImportKey

Отличие в том, что в ImportKey программистами КриптоПро жестко заложено что KP_ALGID 0x6621 а для ФСС необходимо 0x661F. В результате второй CryptImportKey не может импортировать ключ и вылетает по ошибке.
И таких моментов еще несколько (7 мест вызовов). Настроить это в высокоуровневом SymmetricAlgorithm невозможно (нет параметров).

Поэтому зашифровать-расшифровать сообщение для ФСС на данный момент с помощью Browser plug-in не представляется возможным.
Выше только звезды
thanks 2 пользователей поблагодарили SkySandy за этот пост.
Санчир Момолдаев оставлено 28.01.2023(UTC), Baki111 оставлено 07.02.2023(UTC)
Offline Андрей Русев  
#9 Оставлено : 10 февраля 2023 г. 23:55:20(UTC)
Русев Андрей

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

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,432

Сказал(а) «Спасибо»: 37 раз
Поблагодарили: 574 раз в 400 постах
Постараемся поправить. Запрос для ориентира - CADES-2472.
Официальная техподдержка. Официальная база знаний.
thanks 2 пользователей поблагодарили Русев Андрей за этот пост.
SkySandy оставлено 11.02.2023(UTC), Baki111 оставлено 27.02.2023(UTC)
Offline SkySandy  
#10 Оставлено : 11 февраля 2023 г. 20:57:34(UTC)
SkySandy

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

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

Сказал «Спасибо»: 1 раз
Поблагодарили: 15 раз в 9 постах
Автор: Андрей Русев Перейти к цитате
Постараемся поправить. Запрос для ориентира - CADES-2472.


Я так понимаю Вы должны ввести новое свойство для SymmetricAlgorithm? Иначе не смогут быть зашифрованы-расшифрованы старые сообщения.

Да еще. Это будет несомненное движение вперед но проблему не решит, потому что кроме алгоритма шифрования есть и другие параметры которые не устанавливаются при шифровке-расшифровке информации (единственный параметр который у Вас есть это KP_IV)

Мне пришлось дизассемблировать весь SymmetricAlgorithm, что бы понять что у вас с ней не так. Поэтому могу делать такое заявление ))
Выше только звезды
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
6 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.