Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 : } : }
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 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)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close