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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline xvector  
#1 Оставлено : 5 мая 2015 г. 11:03:55(UTC)
xvector

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

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

Приветствую!

Не могу понять почему после кодирования при помощи Asn1BerEncodeBuffer не получается декодировать при помощи Asn1BerDecodeBuffer.
Использую CryptoPro 2.0.38.

Пробовал кодировать ContentInfo с EncryptedData, потом передалал на EnvelopedData (с разными OID), как в примере показано.

В результате вот такой код дает ошибку:
Код:

ContentInfo contentInfo = ... (ContentInfo с EncryptedData или EnvelopedData)

final Asn1BerEncodeBuffer encodeBuffer = new Asn1BerEncodeBuffer();
contentInfo.encode(encodeBuffer);

byte[] encoded = encodeBuffer.getMsgCopy();

final Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(encoded);
final ContentInfo ci = new ContentInfo();
ci.decode(decodeBuffer); // здесь ошибка


Ошибка такая:
Код:

com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0:
Tag match failed: expected [UNIVERSAL 16], parsed [UNIVERSAL 5]
        at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:449)
        at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:466)
        at ru.CryptoPro.JCP.ASN.Gost28147_89_EncryptionSyntax.Gost28147_89_Parameters.decode(Gost28147_89_Parameters.java:55)
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.checkTC(AlgorithmIdentifier.java:162)
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.decode(AlgorithmIdentifier.java:112)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EncryptedContentInfo.decode(EncryptedContentInfo.java:113)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EnvelopedData.decode(EnvelopedData.java:144)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
        at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
        at com.tcs.crypto.engine.cms.parcer.AbstractContentInfoParser.getEnvelopedContentInfoParser(AbstractContentInfoParser.java:28)
        at com.tcs.crypto.impl.TcsCryptoServiceImpl.decryptDataAndCheckSign(TcsCryptoServiceImpl.java:87)
        at com.tcs.crypto.TcsCryptoServiceTest.perform(TcsCryptoServiceTest.java:34)
        at com.tcs.crypto.TcsCryptoServiceTest.testGost3410_2001(TcsCryptoServiceTest.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
com.objsys.asn1j.runtime.Asn1Exception: table constraint: parameters decode failed
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.checkTC(AlgorithmIdentifier.java:166)
        at ru.CryptoPro.JCP.ASN.PKIX1Explicit88.AlgorithmIdentifier.decode(AlgorithmIdentifier.java:112)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EncryptedContentInfo.decode(EncryptedContentInfo.java:113)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.EnvelopedData.decode(EnvelopedData.java:144)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.checkTC(ContentInfo.java:137)
        at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:90)
        at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
        at com.tcs.crypto.engine.cms.parcer.AbstractContentInfoParser.getEnvelopedContentInfoParser(AbstractContentInfoParser.java:28)
        at com.tcs.crypto.impl.TcsCryptoServiceImpl.decryptDataAndCheckSign(TcsCryptoServiceImpl.java:87)
        at com.tcs.crypto.TcsCryptoServiceTest.perform(TcsCryptoServiceTest.java:34)
        at com.tcs.crypto.TcsCryptoServiceTest.testGost3410_2001(TcsCryptoServiceTest.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
        at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
        at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)

Offline xvector  
#2 Оставлено : 6 мая 2015 г. 13:47:33(UTC)
xvector

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

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

В общем, разобрался с EncryptedData. Проблема была с тем, что в encryptedData.encryptedContentInfo.contentEncryptionAlgorithm создавался без параметров, т.е. передавался new Asn1Null():

Код:

encryptedData.encryptedContentInfo.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier(CmsUtils.oid(CMS.ENCRYPTION_SYNTAX_OID), new Asn1Null());


После вот таких изменений стало работать:
Код:

final Gost28147_89_Parameters params = new Gost28147_89_Parameters();
params.iv = new Gost28147_89_IV(iv);
params.encryptionParamSet = new Gost28147_89_ParamSet(AlgIdSpec.getDefaultCryptParams().getOID().value);

encryptedData.encryptedContentInfo.contentEncryptionAlgorithm = new ContentEncryptionAlgorithmIdentifier(CmsUtils.oid(CMS.ENCRYPTION_SYNTAX_OID), params);


Вообще, очень не хватает подробной документации по таким классам как ContentInfo (в частности метода checkTC(..)), а так же описание работы, раз нет исходников, чтобы можно было поотлаживаться. А то энкодинг проходит, а декодинг - нет; и приходится гадать из-за какого параметра (сообщения в стектрейсе не особо информативны для понимания, что происходит).

Отредактировано пользователем 6 мая 2015 г. 13:49:38(UTC)  | Причина: уточнение

Online Евгений Афанасьев  
#3 Оставлено : 6 мая 2015 г. 14:23:26(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: xvector Перейти к цитате

Вообще, очень не хватает подробной документации по таким классам как ContentInfo (в частности метода checkTC(..)), а так же описание работы, раз нет исходников, чтобы можно было поотлаживаться. А то энкодинг проходит, а декодинг - нет; и приходится гадать из-за какого параметра (сообщения в стектрейсе не особо информативны для понимания, что происходит).

Код сгенерирован по asn1 структурам, описанным в RFC. Он генерируется специализированным ПО и не документируется. По названиям большинства структур можно найти описание в тех же RFC документах.

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