<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Key is not permitted to be used in operation]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/2840" />
	<updated>2018-08-27T09:22:15Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/2840/</id>
		<entry>
			<title type="html"><![CDATA[Re: Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12044/#p12044" />
			<content type="html"><![CDATA[<p>Сырое шифрование RSA я проверял и оно работает. Пока выберу этот вариант.<br />Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[gas]]></name>
				<uri>https://forum.rutoken.ru/user/10970/</uri>
			</author>
			<updated>2018-08-27T09:22:15Z</updated>
			<id>https://forum.rutoken.ru/post/12044/#p12044</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12042/#p12042" />
			<content type="html"><![CDATA[<p><strong>gas</strong>, похоже в pkicore действительно есть проблема с расшифровыванием. Исправим в будущем релизе.</p><p>На данный момент есть несколько обходных вариантов:<br /></p><ul><li><p>Использовать &quot;сырое&quot; шифрование\расшифрование с помощью PKCS#11. Пример можно посмотреть тут - sdk\pkcs11\samples\Standard\EncDecRSA</p></li><li><p>Если нужен именно CMS, то использовать openssl. Пример можно посмотреть тут - sdk\openssl\rtengine\samples\EncryptCMS (DecryptCMS)</p></li></ul>]]></content>
			<author>
				<name><![CDATA[Владимир Салыкин]]></name>
				<uri>https://forum.rutoken.ru/user/10195/</uri>
			</author>
			<updated>2018-08-27T08:56:07Z</updated>
			<id>https://forum.rutoken.ru/post/12042/#p12042</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12041/#p12041" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Какое именно устройство Вы используете?</p></blockquote></div><p>Использую смарт-карту Рутокен ЭЦП 2.0.<br /></p><div class="quotebox"><blockquote><p>в каком именно у Вас не заработали сертификаты с RSA</p></blockquote></div><p> Сертификаты с RSA не заработали во всех нижеперечисленных сценариях:<br />1. Сертификат с ключевой парой RSA (1024), выданный моим местным контроллером домена (файл обмена личной информацией .pfx). Импорт сертификата на устройство проходит успешно, приватный ключ перечисляется в общем списке c помощью методов Pkcs11Device::enumeratePrivateKeys и&nbsp; Pkcs11UserCert::getCorrespondingPrivateKey. Но при попытке выполнить enveloped_data.decrypt(cms::EnvelopedData::DecryptParams{ cert }) для сертификата с RSA-ключем, получаю исключение &quot;Key is not permitted to be used in operation&quot;<br />2. Сертификат, сделанный на ключевой паре RSA, которая была сгенерирована в самом устройстве. Для этого я генерил ключевую пару RSA (2048), на ее основе выдавал запрос на выдачу сертификата. Получал сертификат, экспортировал его на устройство. В итоге на устройстве получался сертификат с нормальной ключевой парой, которой вел себя точно так же, как описано в первом случае.</p><p>Единственное, что пока заработало - это выполнение п.2, но для ключевой пары, полученной на устройстве с помощью Pkcs11Device::generateKeyPair с настройками Pkcs11Device::Gost34102012_512KeyGenParams.<br />Такой сертификат перечисляется, объект его приватного ключа можно получить обеими указанными выше методами и при этом enveloped_data.decrypt(cms::EnvelopedData::DecryptParams{ cert }) для указанного сертификата нормально выполняется и расшифровывает ранее зашифрованное сообщение.</p><p>Однако, по определенным причинам хотелось бы того же, но для RSA 1024 и выше.</p><div class="quotebox"><blockquote><p>Импорт ГОСТ ключей на сертифицированные Рутокен ЭЦП запрещен регулятором (ФСБ), такие токены генерируют ключи на борту и никогда не выдают их наружу, что гарантирует их существование в единственном экземпляре.</p></blockquote></div><p>Это очевидно, я и не пытался экспортировать ключевую пару наружу из устройства или импортировать имеющийся (у меня такого и нет). Создавал сертификат на основе запроса из устройства и импортировал его на устройство, где он уже самостоятельно подклеивал приватный ключ, от сгенерированной ранее ключевой пары.</p>]]></content>
			<author>
				<name><![CDATA[gas]]></name>
				<uri>https://forum.rutoken.ru/user/10970/</uri>
			</author>
			<updated>2018-08-27T07:33:37Z</updated>
			<id>https://forum.rutoken.ru/post/12041/#p12041</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12040/#p12040" />
			<content type="html"><![CDATA[<p>Добрый день, <strong>gas</strong>.</p><p>Вы описали несколько сценариев работы и не совсем понятно в каком именно у Вас не заработали сертификаты с RSA. Можете уточнить? Какое именно устройство Вы используете?</p><p>Судя по тому, что Вам не удалось импортировать ГОСТ ключевую пару, скорее всего это одна из моделей смарт-карты семейства Рутокен ЭЦП. Импорт ГОСТ ключей на сертифицированные Рутокен ЭЦП запрещен регулятором (ФСБ), такие токены генерируют ключи на борту и никогда не выдают их наружу, что гарантирует их существование в единственном экземпляре.</p>]]></content>
			<author>
				<name><![CDATA[Владимир Салыкин]]></name>
				<uri>https://forum.rutoken.ru/user/10195/</uri>
			</author>
			<updated>2018-08-27T07:09:42Z</updated>
			<id>https://forum.rutoken.ru/post/12040/#p12040</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12038/#p12038" />
			<content type="html"><![CDATA[<p>Похоже сертификаты с RSA не поддерживаются. Печаль. Причем если самому сгенерить RSA на устройстве, то можно зашифровать/расшифровать сообщения (если разбить на блоки и соблюсти паддинг, но это уже другая история).</p>]]></content>
			<author>
				<name><![CDATA[gas]]></name>
				<uri>https://forum.rutoken.ru/user/10970/</uri>
			</author>
			<updated>2018-08-24T14:08:30Z</updated>
			<id>https://forum.rutoken.ru/post/12038/#p12038</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12037/#p12037" />
			<content type="html"><![CDATA[<p>В общем, методом тыка выяснилось, что если сгенерить ключевую пару на устройстве (например гост), создать CSR, выдать по нему самоподписанный сертификат и экспортировать его обратно на устройство, то все работает как надо. Но если загрузить на устройство сертификат, изначально содержащий ключевую пару, то получаем &quot;Key is not permitted to be used in operation&quot;.</p>]]></content>
			<author>
				<name><![CDATA[gas]]></name>
				<uri>https://forum.rutoken.ru/user/10970/</uri>
			</author>
			<updated>2018-08-24T12:45:25Z</updated>
			<id>https://forum.rutoken.ru/post/12037/#p12037</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Key is not permitted to be used in operation]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/12036/#p12036" />
			<content type="html"><![CDATA[<p>Здравствуйте! Разбираюсь с API pkicore, работаю с ЭЦП смарт-картой. Использую тестовый сертификат, который мне выдал мой локальный контроллер домена. Сертификат успешно экспортирован на карту. Открытый ключ - RSA (1024). Успешно шифрую им тестовое сообщение, но при попытке его тут же расшифровать на устройстве, получаю &quot;Key is not permitted to be used in operation&quot;.<br />В чем может быть причина? Может ключевая пара не той системы?</p><p>Код примерно такой:<br /></p><div class="codebox"><pre><code>    try
    {
        cout &lt;&lt; boolalpha;
        rutoken::pkicore::initialize(&quot;.&quot;);
        SCOPE_EXIT() { rutoken::pkicore::deinitialize(); };

        auto devices = Pkcs11Device::enumerate();
        const std::string plaint_text = &quot;Hello, World!&quot;; //Типа секретные данные
        const std::vector&lt;uint8_t&gt; plaint_data{ plaint_text.begin(), plaint_text.end() };

        for (auto&amp;&amp; device : devices)
        {
            device.login(&quot;12345678&quot;);
            SCOPE_EXIT(&amp;device) { device.logout(); };

            auto cert_file_data = readFile(&quot;D:\\Temp\\123-dev.cer&quot;);
            ExternalCert cert_file(cert_file_data.data(), cert_file_data.size());
            cms::EnvelopParams enlelop_params{ device };
            enlelop_params.addRecipient(cert_file);
            auto enveloped_data = cms::envelop(plaint_data, enlelop_params);

            auto certs = device.enumerateCerts();
            if (certs.empty())
            {
                throw runtime_error(&quot;Token has no certificates.&quot;);
            }

            auto cert = move(certs.front());
            try
            {
                cert.getCorrespondingPrivateKey();
            }
            catch (std::exception&amp;)
            {
                throw runtime_error(&quot;Certificate has no private key.&quot;);
            }

            auto message = enveloped_data.decrypt(cms::EnvelopedData::DecryptParams{ cert }); // &lt;&lt;= Вот тут вылетает исключение с сообщением &quot;Key is not permitted to be used in operation&quot;
            if (message.contentType() != cms::ContentType::data)
            {
                throw runtime_error(&quot;Unsupported content type of enveloped data&quot;);
            }
        }
    }
    catch (const exception&amp; e)
    {
        cerr &lt;&lt; e.what() &lt;&lt; endl;
        return 1;
    }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[gas]]></name>
				<uri>https://forum.rutoken.ru/user/10970/</uri>
			</author>
			<updated>2018-08-24T10:21:44Z</updated>
			<id>https://forum.rutoken.ru/post/12036/#p12036</id>
		</entry>
</feed>
