<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Рутокен &mdash; Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
		<link>https://forum.rutoken.ru/topic/2277/</link>
		<atom:link href="https://forum.rutoken.ru/feed/rss/topic/2277/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Использование rtPKCS11ECP.dll из Java через SunPKCS11».]]></description>
		<lastBuildDate>Thu, 09 Jul 2015 15:01:47 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8513/#p8513</link>
			<description><![CDATA[<div class="quotebox"><cite>Vladimir Ivanov пишет:</cite><blockquote><p>Вы сертификаты используете или просто сырую подпись?</p></blockquote></div><p>Просто подпись массива байтов. <br />SunMSCAPI c Signature.verify() c SHA1withRSA ее распознал и верифицировал. Еще раз спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 15:01:47 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8513/#p8513</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8512/#p8512</link>
			<description><![CDATA[<div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><div class="quotebox"><cite>Vladimir Ivanov пишет:</cite><blockquote><p>Можно использовать другой провайдер, JCE, например:<br /><a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#SunJCEProvider">https://docs.oracle.com/javase/7/docs/t … CEProvider</a></p></blockquote></div><p>Но SunJCE не имеет SHA1withRSA. <br />Или с SunJCE нужно не верифицировать, а дешифровать+сравнивать, используя Cipher? Я правильно понял?</p></blockquote></div><p>Прошу прощения, плохо посмотрел. По ссылке есть и другие провайдеры, которые поддерживают SHA1withRSA.<br />Вы сертификаты используете или просто сырую подпись?</p>]]></description>
			<author><![CDATA[null@example.com (Vladimir Ivanov)]]></author>
			<pubDate>Thu, 09 Jul 2015 14:01:21 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8512/#p8512</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8510/#p8510</link>
			<description><![CDATA[<div class="quotebox"><cite>Vladimir Ivanov пишет:</cite><blockquote><p>Можно использовать другой провайдер, JCE, например:<br /><a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#SunJCEProvider">https://docs.oracle.com/javase/7/docs/t … CEProvider</a></p></blockquote></div><p>С SunJCE ничего не вышло, но проблема решилась тупым перебором всех встроенных провайдеров. Удалось верифицировать с SunMSCAPI. <br />Благодарю за помощь.</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 13:56:28 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8510/#p8510</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8508/#p8508</link>
			<description><![CDATA[<div class="quotebox"><cite>Vladimir Ivanov пишет:</cite><blockquote><p>Можно использовать другой провайдер, JCE, например:<br /><a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#SunJCEProvider">https://docs.oracle.com/javase/7/docs/t … CEProvider</a></p></blockquote></div><p>Но SunJCE не имеет SHA1withRSA. <br />Или с SunJCE нужно не верифицировать, а дешифровать+сравнивать, используя Cipher? Я правильно понял?</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 13:20:54 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8508/#p8508</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8507/#p8507</link>
			<description><![CDATA[<div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><p>Я изначально пытался верифицировать подпись c BouncyCastle, но результат всегда false. Подумал, что проблема в несоответствии стандарта.</p></blockquote></div><p>Так часто бывает, если в разных реализациях используется разный порядок байтов, разные кодировки и т.п. вещи.</p><div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><p>Если возможно верифицировать подпись без sunpkcs11, я только за, но как заставить это работать?</p></blockquote></div><br /><p>Можно использовать другой провайдер, JCE, например:</p><p><a href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#SunJCEProvider">https://docs.oracle.com/javase/7/docs/t … CEProvider</a></p>]]></description>
			<author><![CDATA[null@example.com (Vladimir Ivanov)]]></author>
			<pubDate>Thu, 09 Jul 2015 13:02:05 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8507/#p8507</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8504/#p8504</link>
			<description><![CDATA[<div class="quotebox"><cite>Vladimir Ivanov пишет:</cite><blockquote><div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><p>А не подскажете, что мне из этого нужно добавить к моему, помимо name и library?<br />(учитывая,что мне нужно только верифицировать подпись, с самим рутокеном не взаимодействую)</p></blockquote></div><p>В таком случае вопрос, зачем Вам вообще PKCS#11 провайдер, если только проверка подписи программным способом нужна?</p></blockquote></div><p>Просто, насколько я знаю, рутокен подписывает по стандарту #11. <br />Я изначально пытался верифицировать подпись c BouncyCastle, но результат всегда false. Подумал, что проблема в несоответствии стандарта. <br />Вот мой код варианта с BouncyCastle: <a href="http://stackoverflow.com/questions/31286876/rsa-sign-by-usb-tokenc-and-verify-by-java">http://stackoverflow.com/questions/3128 … fy-by-java</a><br />(может Вы укажите на ошибку в том варианте). <br />Если возможно верифицировать подпись без sunpkcs11, я только за, но как заставить это работать?</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 12:42:21 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8504/#p8504</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8503/#p8503</link>
			<description><![CDATA[<div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><p>А не подскажете, что мне из этого нужно добавить к моему, помимо name и library?<br />(учитывая,что мне нужно только верифицировать подпись, с самим рутокеном не взаимодействую)</p></blockquote></div><p>В таком случае вопрос, зачем Вам вообще PKCS#11 провайдер, если только проверка подписи программным способом нужна?</p>]]></description>
			<author><![CDATA[null@example.com (Vladimir Ivanov)]]></author>
			<pubDate>Thu, 09 Jul 2015 12:34:04 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8503/#p8503</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8502/#p8502</link>
			<description><![CDATA[<div class="quotebox"><cite>Кирилл Мещеряков пишет:</cite><blockquote><div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><div class="quotebox"><cite>Кирилл Мещеряков пишет:</cite><blockquote><p>Возможно, что то в коде у вас не так</p></blockquote></div><p>Похоже на то.<br />А как у Вас выглядит файл pkcs11.cfg ?</p></blockquote></div><div class="codebox"><pre><code>name = provider
library = C:\Windows\System32\rtPKCS11ECP.dll
showInfo = true
slot = 0
attributes(generate, CKO_PUBLIC_KEY,  CKK_RSA) = {
  CKA_LABEL = 0h53616d706c6520525341205075626c6963204b6579
  CKA_ID = 0h525341
  CKA_ENCRYPT = true
  CKA_TOKEN = true
  CKA_PRIVATE = false
  CKA_MODULUS_BITS = 512
}

attributes(generate, CKO_PRIVATE_KEY,  CKK_RSA) = {
  CKA_LABEL = 0h53616d706c65205253412050726976617465204b6579
  CKA_ID = 0h525341
  CKA_DECRYPT = true
  CKA_TOKEN = true
  CKA_PRIVATE = true
}</code></pre></div></blockquote></div><p>А не подскажете, что мне из этого нужно добавить к моему, помимо name и library?<br />(учитывая,что мне нужно только верифицировать подпись, с самим рутокеном не взаимодействую) <br />Я предполагаю, что проблема в неправильном конфиге, ибо я не вижу ошибки в коде: <br /></p><div class="codebox"><pre><code>String config = &quot;E:\\Temp\\pkcs11.cfg&quot;;
PROVIDER = new SunPKCS11(config);
Security.addProvider(PROVIDER);
Signature signature = Signature.getInstance(&quot;SHA1withRSA&quot;, PROVIDER);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 11:23:30 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8502/#p8502</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8501/#p8501</link>
			<description><![CDATA[<div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><div class="quotebox"><cite>Кирилл Мещеряков пишет:</cite><blockquote><p>Возможно, что то в коде у вас не так</p></blockquote></div><p>Похоже на то.<br />А как у Вас выглядит файл pkcs11.cfg ?</p></blockquote></div><div class="codebox"><pre><code>name = provider
library = C:\Windows\System32\rtPKCS11ECP.dll
showInfo = true
slot = 0
attributes(generate, CKO_PUBLIC_KEY,  CKK_RSA) = {
  CKA_LABEL = 0h53616d706c6520525341205075626c6963204b6579
  CKA_ID = 0h525341
  CKA_ENCRYPT = true
  CKA_TOKEN = true
  CKA_PRIVATE = false
  CKA_MODULUS_BITS = 512
}

attributes(generate, CKO_PRIVATE_KEY,  CKK_RSA) = {
  CKA_LABEL = 0h53616d706c65205253412050726976617465204b6579
  CKA_ID = 0h525341
  CKA_DECRYPT = true
  CKA_TOKEN = true
  CKA_PRIVATE = true
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Кирилл Мещеряков)]]></author>
			<pubDate>Thu, 09 Jul 2015 11:19:34 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8501/#p8501</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8500/#p8500</link>
			<description><![CDATA[<div class="quotebox"><cite>Кирилл Мещеряков пишет:</cite><blockquote><p>Возможно, что то в коде у вас не так</p></blockquote></div><p>Похоже на то.<br />А как у Вас выглядит файл pkcs11.cfg ?</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 11:16:17 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8500/#p8500</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8499/#p8499</link>
			<description><![CDATA[<p>Возможно, что то в коде у вас не так<br /></p><div class="codebox"><pre><code>package ru.rutoken.Samples.sunJCA;

import java.security.*;
import javax.crypto.*;
import java.security.cert.*;
import java.util.Enumeration;

public class RSA {

    static byte[] message = {
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };

    public static void main(String[] args) {
        try {

            String userPin = &quot;12345678&quot;;
            int keySize = 512;

            System.out.println(&quot;Example of working with RSA algorithm using SunRsaSign Provider via JCA&quot;);

            String config = &quot;cfg/pkcs11.cfg&quot;;
            Provider sunPKCS11 = new sun.security.pkcs11.SunPKCS11(config);
            int pos = Security.addProvider(sunPKCS11);
            System.out.println(&quot;Provider Level: &quot; + pos);

            // Авторизация на токен
            char[] pin = userPin.toCharArray();
            KeyStore ks = KeyStore.getInstance(&quot;PKCS11&quot;, sunPKCS11);
            ks.load(null, pin);

            // Генерация ключевой пары
            KeyPairGenerator generator = KeyPairGenerator.getInstance(&quot;RSA&quot;, sunPKCS11);
            generator.initialize(keySize);
            KeyPair pair = generator.generateKeyPair();
            PrivateKey privKey = pair.getPrivate();
            PublicKey pubKey = pair.getPublic();

            // Поиск ключевой пары на токене (только если присутствует сертификат)
            Enumeration aliases = ks.aliases();
            String alias = null;
            while (aliases.hasMoreElements()) {
                alias = aliases.nextElement().toString();
            }
            if (alias != null) {
                X509Certificate cert = (X509Certificate) ks.getCertificate(alias);
                System.out.println(&quot;Certificate:\n &quot; + cert);
                pubKey = cert.getPublicKey();
                privKey = (PrivateKey) ks.getKey(alias, null);
            }

            System.out.println(&quot;Public key:\n &quot; + pubKey);
            System.out.println(&quot;Private key:\n &quot; + privKey);

            // Шифрование по алгоритму RSA
            Cipher rsaEncrypt = Cipher.getInstance(&quot;RSA/ECB/NoPadding&quot;, sunPKCS11);
            rsaEncrypt.init(Cipher.ENCRYPT_MODE, pubKey);
            byte[] encryptedMessage = rsaEncrypt.doFinal(message);

            System.out.println(&quot;Encrypted data:&quot;);
            for (int i = 0; i &lt; encryptedMessage.length; i++) {
                System.out.printf(&quot; %02X&quot;, encryptedMessage[i]);
                if ((i + 1) % 8 == 0)
                    System.out.printf(&quot;\n&quot;);
            }
            System.out.println(&quot;Data has been encrypted successfully.&quot;);

            // Расшифрование по алгоритму RSA
            Cipher rsaDecrypt = Cipher.getInstance(&quot;RSA/ECB/NoPadding&quot;, sunPKCS11);
            rsaDecrypt.init(Cipher.DECRYPT_MODE, privKey);
            byte[] decryptedMessage = rsaDecrypt.doFinal(encryptedMessage);

            System.out.println(&quot;Decrypted data:&quot;);
            for (int i = 0; i &lt; decryptedMessage.length; i++) {
                System.out.printf(&quot; %02X&quot;, decryptedMessage[i]);
                if ((i + 1) % 8 == 0)
                    System.out.printf(&quot;\n&quot;);
            }
            System.out.println(&quot;Data has been decrypted successfully.&quot;);

            // Подпись по алгоритму RSA
            String dataToSign = &quot;Aktiv Co., Ltd.&quot;;
            System.out.println(&quot;Data for signature: &quot; + dataToSign);

            Signature rsaSign = Signature.getInstance(&quot;SHA1withRSA&quot;, sunPKCS11);
            rsaSign.initSign(privKey);
            rsaSign.update(dataToSign.getBytes());
            byte[] signedData = rsaSign.sign();

            System.out.println(&quot;Signed data:&quot;);
            for (int i = 0; i &lt; signedData.length; i++) {
                System.out.printf(&quot; %02X&quot;, signedData[i]);
                if ((i + 1) % 8 == 0)
                    System.out.printf(&quot;\n&quot;);
            }
            System.out.println(&quot;Data has been signed successfully.&quot;);

            // Проверка подписи по алгоритму RSA
            Signature rsaVerify = Signature.getInstance(&quot;SHA1withRSA&quot;, sunPKCS11);
            rsaVerify.initVerify(pubKey);
            rsaVerify.update(dataToSign.getBytes());
            if (rsaVerify.verify(signedData)) {
                System.out.println(&quot;Signature has been verified successfully.&quot;);
            } else {
                System.out.println(&quot;Signature verification failed!&quot;);
            }
        } catch (Exception e) {
            System.out.printf(&quot;Some error occurred. Error code: &quot; + e.getMessage());
        }
    }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Кирилл Мещеряков)]]></author>
			<pubDate>Thu, 09 Jul 2015 11:10:41 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8499/#p8499</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8498/#p8498</link>
			<description><![CDATA[<div class="quotebox"><cite>Кирилл Мещеряков пишет:</cite><blockquote><p>RSA работать должен.<br />А какая модель рутокена у вас?</p></blockquote></div><p>Рутокен ЭЦП</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 11:06:30 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8498/#p8498</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8497/#p8497</link>
			<description><![CDATA[<p>RSA работать должен.<br />А какая модель рутокена у вас?</p>]]></description>
			<author><![CDATA[null@example.com (Кирилл Мещеряков)]]></author>
			<pubDate>Thu, 09 Jul 2015 11:04:14 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8497/#p8497</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8496/#p8496</link>
			<description><![CDATA[<div class="quotebox"><cite>Кирилл Мещеряков пишет:</cite><blockquote><div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><p>Signature.SHA1withRSA: <br />Signature.getInstance(&quot;SHA1withRSA&quot;, &quot;SunPKCS11-Rutoken&quot;);&nbsp; &nbsp;// NoSuchAlgorithmException</p></blockquote></div><p>Этот комбинированный алгоритм действительно не поддерживается.<br />Используйте отдельно SHA1 и RSA.</p></blockquote></div><p>Проблема в том, что и <br /></p><div class="quotebox"><blockquote><p>KeyFactory.getInstance(&quot;RSA&quot;, &quot;SunPKCS11-Rutoken&quot;);</p></blockquote></div><p>ругается с NoSuchAlgorithm, т.о. я даже public ключ из модуля и экспоненты собрать не могу.</p>]]></description>
			<author><![CDATA[null@example.com (ConstantineOupirum)]]></author>
			<pubDate>Thu, 09 Jul 2015 10:53:53 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8496/#p8496</guid>
		</item>
		<item>
			<title><![CDATA[Re: Использование rtPKCS11ECP.dll из Java через SunPKCS11]]></title>
			<link>https://forum.rutoken.ru/post/8495/#p8495</link>
			<description><![CDATA[<div class="quotebox"><cite>ConstantineOupirum пишет:</cite><blockquote><p>Signature.SHA1withRSA: <br />Signature.getInstance(&quot;SHA1withRSA&quot;, &quot;SunPKCS11-Rutoken&quot;);&nbsp; &nbsp;// NoSuchAlgorithmException</p></blockquote></div><p>Этот комбинированный алгоритм действительно не поддерживается.<br />Используйте отдельно SHA1 и RSA.</p>]]></description>
			<author><![CDATA[null@example.com (Кирилл Мещеряков)]]></author>
			<pubDate>Thu, 09 Jul 2015 10:45:32 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/8495/#p8495</guid>
		</item>
	</channel>
</rss>
