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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Влад Степанов  
#1 Оставлено : 12 марта 2014 г. 10:56:16(UTC)
Влад Степанов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.12.2007(UTC)
Сообщений: 30
Откуда: Москва

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

пользуемся, по лицензии, КриптоПро CSP, но не предполагается использование КриптоПро .Net.

Пытаюсь создать зашифрованный XML аналогично как это делается в .Net с помощью EncryptedXml.
В тэги и атрибуты XML записываю информацию об алгоритмах, сертификат получателя в Base64,
а также Base64-строку с ASN-структурой, содержащей симметричный и эфемерный публичный ключи (структуру см. ниже).
и Base64-строку с зашифрованными данными, выровненными на границу 8 байт (смотрел, что длина зашифрованных данных, сформированных .Net, равна длине данных до шифрования, дополняемых видимо символами 0, чтобы их длина была кратной 8 байтам).

Поступаю следующим образом: формирую зашифрованный файл PKCS7, из него извлекаю фрагмент с симметричным и эфемерным ключом (имеющий точно такой же формат, как в XML), а также зашифрованные данные (они в PKCS7 тоже равны по длине исходным шифруемым данным, правда, по длине сами не выравнены на границу октета байт).

Для сфоимрованного мной XML при попытке дешифрации - ошибка "Плохие данные", сформированный в .Net XML расшифровывается нормально. В чем может быть проблема? Может быть, двоичные данные симметричного ключа, эфемерного публичного ключа или зашифрованные данные записываются в какой-то другой последовательности или при ГОСТ есть разница в их умалчиваемом формировании для PKCS7 и для XML?
Пробовал переворачивать данные симметричного ключа или/и эфемерного - не помогало. Может, зашифрованные данные в XML, помимо выравнивания по 8 байт, пишутся как-то не так?


P.S. Декодирование структуры с симметричным и эфемерным публичным ключом для XML аналогично соответствующему фрагаменту декодированного PKCS7:

0 164: SEQUENCE {
3 40: SEQUENCE {
5 32: OCTET STRING
: 7F F1 21 25 65 87 68 A3 54 54 1A 7E 87 3A 07 2D
: 39 20 90 51 0D 5E 84 0F 6A D0 60 81 92 EF E4 EB
39 4: OCTET STRING FA 38 EA 09
: }
45 120: [0] {
47 7: OBJECT IDENTIFIER
: id-Gost28147-89-CryptoPro-A-ParamSet (1 2 643 2 2 31 1)
56 99: [0] {
58 28: SEQUENCE {
60 6: OBJECT IDENTIFIER GOST R 34.10-2001 (1 2 643 2 2 19)
68 18: SEQUENCE {
70 7: OBJECT IDENTIFIER '1 2 643 2 2 36 0'
79 7: OBJECT IDENTIFIER
: id-GostR3411-94-CryptoProParamSet (1 2 643 2 2 30 1)
: }
: }
88 67: BIT STRING, encapsulates {
91 64: OCTET STRING
: 43 34 6E E9 6A CE 2B 51 90 42 E5 8F 26 E1 52 7A
: F7 68 C0 54 26 91 3D B1 C0 1F A1 4B C1 56 C5 07
: 1B 94 41 74 36 30 8D 5D 08 4D 5F CE 24 1A DE 38
: E8 3D AD 8D D5 B6 49 56 42 9B 84 29 11 EF EE 82
: }
: }
157 8: OCTET STRING 77 F6 E0 6D CF 97 55 65
: }
: }

Offline Максим Коллегин  
#2 Оставлено : 13 марта 2014 г. 12:00:10(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,399
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Вот так упаковывается зашифрованный ключ:
Код:

                asnTransport.sessionEncryptedKey =
                    new Gost28147_89_EncryptedKey();
                asnTransport.sessionEncryptedKey.encryptedKey =
                    new Gost28147_89_Key(
                        transport.sessionEncryptedKey_.encryptedKey_);
                asnTransport.sessionEncryptedKey.macKey =
                    new Gost28147_89_MAC(transport.sessionEncryptedKey_.mac_);
                asnTransport.transportParameters =
                    new GostR3410_TransportParameters();
                asnTransport.transportParameters.ukm =
                    new Asn1OctetString(transport.sessionEncryptedKey_.ukm_);
                asnTransport.transportParameters.encryptionParamSet =
                    CreateGost28147_89_ParamSet(
                        transport.sessionEncryptedKey_.encryptionParamSet_);
                asnTransport.transportParameters.ephemeralPublicKey =
                    PackPublicKeyInfo(transport.transportParameters_);
                asnTransport.Encode(buffer);

Отредактировано пользователем 13 марта 2014 г. 12:00:44(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Влад Степанов  
#3 Оставлено : 14 марта 2014 г. 9:59:33(UTC)
Влад Степанов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.12.2007(UTC)
Сообщений: 30
Откуда: Москва

Спасибо! Склоняюсь все-таки к тому, что формат ключа совпадает с используемым в PKCS7. Поэтому очень интересует - каков формат зашифрованных данных в XML?

Сначала ошибся, считая, что длина зашифрованных данных XML равна длине незашифрованных, просто дополнительно выравнена до границы 8 байт.
На самом деле, длина зашифрованных данных XML минимум на 9 байт больше, чем содержимое XML/шифруемого узла XML, записано в максимально компактном виде (без пробелов по краям строк, без переводов строк, без означающей формат UTF-8 сигнатуры BOM вначале) + обеспечивается выравнивание длины зашифрованных данных до границы 8 байт.

Т.е. вопросы следующие.
1) Зашифрованные данные в XML длинее, чем исходные незашифрованные данные - засчет чего, каков формат зашифрованных данных и этих дополнительных байт?
2) А также какой метод шифрации используется CryptoPro .Net по умолчанию (метод, который можно задавать в параметре KP_MODE функции CryptSetKeyParam, http://www.cryptopro.ru/...ro/forum/view.asp?q=2291 - отличается ли от используемого в зашифрованном PKCS7, в котором длина зашифрованных данных точно равна длине незашифрованных, ничего до границы 8 байт не выравнивается, длина может оказаться нечетной)?

Отредактировано пользователем 14 марта 2014 г. 10:03:58(UTC)  | Причина: Не указана

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