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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
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,125
Российская Федерация
Откуда: Иркутская область

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

Отредактировано пользователем 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,125
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 75 раз
Поблагодарили: 257 раз в 241 постах
Если на 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?
Если да, не поделитесь решением?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.