Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Зашифровать бинарный файл с помощью "PKCS#7 Message" (в файл - p7m)
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.04.2010(UTC) Сообщений: 4 Откуда: moscow
|
Здравствуйте, у меня, наверное, очень простой вопрос, как написано в теме, необходимо зашифровать бинарный файл с помощью "PKCS#7 Message" (в файл p7m), для этого, как написано необходимо задействовать сертификат. Реализую я это на Java, использовать пробую и JCP и BC :) и пока все не очень удачно. К сожалению, я плохо разбираюсь в шифровании, но после того как я просмотрел почти все исходники на google/codesearch и здесь, все что связано с почтовыми p7m и PKCS7, я пришел к выводу, что зашифровать файл, используя только сертификат невозможно, что нужно еще генерировать ключ. Не мог бы мне кто-нибудь помочь, действительно ли можно зашифровать файл используя только сертификат? В примерах КриптоПро я разбирался с файлом Encrypt.java, но, к сожалению в этом примере помимо шифрования файла - генерируется туча ключей, я пробовал сократить количество ключей до минимума, но все равно секретный ключ остается и получается, что одним сертификатом я не обошелся. Отредактировано пользователем 27 апреля 2010 г. 16:41:18(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.04.2010(UTC) Сообщений: 4 Откуда: moscow
|
Ну как я понял, чтобы зашифровать данные в "PKCS7 Message" нужно действовать по другому. Теперь вопрос, собственно, в том, может ли быть ошибка из-за того, что сертификат не тот, который требуется? вот пример кода: Код:
KeyStore ks = KeyStore.getInstance("HDImageStore");
ks.load(new FileInputStream("C:\\root\\sdk\\jdk1.6.0_20\\bin\\test.jks"), "test".toCharArray());
SMIMEEnvelopedGenerator gen = new SMIMEEnvelopedGenerator();
X509Certificate cert = (X509Certificate)ks.getCertificate("test");
gen.addKeyTransRecipient(cert);
MimeBodyPart msg = new MimeBodyPart();
msg.setText("Hello world!");
MimeBodyPart mp = gen.generate(msg, SMIMEEnvelopedGenerator.RC2_CBC , "BC");
...
и на этой строчке вызывается исключение, Код:
org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator$WrappingIOException: org.bouncycastle.cms.CMSException: error making encrypted content.
at org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator$ContentEncryptor.write(SMIMEEnvelopedGenerator.java:330)
at org.bouncycastle.mail.smime.handlers.PKCS7ContentHandler.writeTo(PKCS7ContentHandler.java:98)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:869)
at javax.activation.DataHandler.writeTo(DataHandler.java:302)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1743)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1719)
at org.sts.util.crypt.MailCrypt.encrypt2MIME(MailCrypt.java:123)
at org.zenit.nbki.ckki.CKKI.main(CKKI.java:414)
Caused by: org.bouncycastle.cms.CMSException: error making encrypted content.
at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(CMSEnvelopedDataStreamGenerator.java:169)
at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(CMSEnvelopedDataStreamGenerator.java:296)
at org.bouncycastle.mail.smime.SMIMEEnvelopedGenerator$ContentEncryptor.write(SMIMEEnvelopedGenerator.java:298)
... 8 more
Caused by: java.security.NoSuchAlgorithmException: No such algorithm: 1.2.643.2.2.19
at javax.crypto.Cipher.getInstance(DashoA13*..)
at javax.crypto.Cipher.getInstance(DashoA13*..)
at org.bouncycastle.cms.CMSEnvelopedHelper.createAsymmetricCipher(CMSEnvelopedHelper.java:55)
at org.bouncycastle.cms.CMSEnvelopedGenerator$RecipientInf.toRecipientInfo(CMSEnvelopedGenerator.java:261)
at org.bouncycastle.cms.CMSEnvelopedDataStreamGenerator.open(CMSEnvelopedDataStreamGenerator.java:157)
... 10 more
этот алгоритм "1.2.643.2.2.19" - ГОСТ3410, и в сертификате написано, что открытый ключ ГОСТ3410
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.04.2010(UTC) Сообщений: 4 Откуда: moscow
|
нет, это тоже был неверный вариант, сертификат тот, нужно просто сделать действие, эквивалентное команде cryptcp Код:
cryptcp -encr -der -f "c:\test.cer" file.zipl file.encr.message
может кто-то знает ссылки на документацию соответствующую. C bouncy CMSEvelopedDataGenerator возникает ошибка "KeyGenerator not available для ГОСТ 3410_2001"
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Термин «шифрование на сертификате» происходит из алгоритма RSA. Там можно зашифровать сообщение на сертификате получателя, так чтоб он своим закрытым ключом его расшифровал. С российскими алгоритмами так нельзя. Для эмуляции шифрования на сертификате можно использовать такую схему. 1. Сначала надо создать эфемерную ключевую пару. 2. Потом выработать ключ согласования из эфемерного закрытого и сертификата получателя. 3. Создать случайный секретный ключ шифрования. 4. Этот секретный ключ зашифровать на ключе согласования. 5. Данные шифровать случайным секретным ключом. 6. Отправить получателю зашифрованные данные, зашифрованный секретный ключ и открытый ключ или его сертификат. Т.е. стандартная схема, как в примерах, только ключевая пара не постоянная, а эфемерная, одноразовая. Эта схема позволяет шифровать сообщение для пользователя имея только его сертификат. Он сможет его расшифровать, но не будет гарантированно знать, от кого оно пришло, может и от противника. Если создавать вместо эфемерной пары пользовательский постоянный ключ с сертификатом, то вся схема сохранится, но получатель сможет гарантированно назвать отправителя.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 27.04.2010(UTC) Сообщений: 4 Откуда: moscow
|
большое спасиботогда не совсем понятно - cryptcp.exe так и поступает? он не требовал ключа при шифровании а с указываемым сертификатом не было связано закрытых ключей Отредактировано пользователем 6 мая 2010 г. 12:01:46(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Чтоб не появлялся биодатчик при создании эфемерной пары ключей KeyPairGenerator keyGen = KeyPairGenerator.getInstance(algorithm); В качестве алгоритма надо указывать не "GOST3410DH", а "GOST3410DHEPH" Секретный ключ из такой ключевой пары нельзя использовать как пользовательский и нельзя сохранить в хранилище, во всем остальном он такой же.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 19.03.2010(UTC) Сообщений: 19
|
Именно эта схема с эфемерной ключевой парой реализована в консольном приложении CryptCP ?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 19.05.2015(UTC) Сообщений: 41 Сказала «Спасибо»: 4 раз
|
Добрый день! Подскажите, пожалуйста. Используем эмуляцию шифрования на сертификате с эфимерной ключевой парой. Цитата: Чтоб не появлялся биодатчик при создании эфемерной пары ключей KeyPairGenerator keyGen = KeyPairGenerator.getInstance(algorithm); В качестве алгоритма надо указывать не "GOST3410DH", а "GOST3410DHEPH" Секретный ключ из такой ключевой пары нельзя использовать как пользовательский и нельзя сохранить в хранилище, во всем остальном он такой же.
На JCP 1.0.54 все работает как надо. Перешли на версию JCP 2.0 И там GOST3410DHEPH KeyPairGenerator not available Я правильно понимаю, что нужно использовать "GOST3410DHELEPH" (т.е. JCP.GOST_EL_DH_EPH_NAME)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,926 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Добрый день. Да, В версии 2.0 часть старых алгоритмов, классов и т.п. была удалена, рабочие алгоритмы описаны в документации (руководство программиста). Автор: ThinkingAnna Я правильно понимаю, что нужно использовать "GOST3410DHELEPH" (т.е. JCP.GOST_EL_DH_EPH_NAME)? Да. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Зашифровать бинарный файл с помощью "PKCS#7 Message" (в файл - p7m)
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close