<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Запись неизменяемых данных]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/3367/" />
	<updated>2021-06-11T06:52:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/3367/</id>
		<entry>
			<title type="html"><![CDATA[Re: Запись неизменяемых данных]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/15649/#p15649" />
			<content type="html"><![CDATA[<p>Спасибо за развернутый ответ !</p>]]></content>
			<author>
				<name><![CDATA[muzi]]></name>
				<uri>https://forum.rutoken.ru/user/11676/</uri>
			</author>
			<updated>2021-06-11T06:52:57Z</updated>
			<id>https://forum.rutoken.ru/post/15649/#p15649</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись неизменяемых данных]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/15645/#p15645" />
			<content type="html"><![CDATA[<p>Теперь понял вашу задачу.</p><p>К сожалению модель доступа к объектам pkcs#11 не дает возможность создавать объекты, которые<br />1. могут читаться без PIN-кода.<br />2. модифицироваться после получения PIN-кода.</p><p>Вы или создаете объект, который может видеть (+ возможно изменять) только авторизованный пользователь, или все пользователи.</p><p>К счастью, это ограничение можно обойти с помощью криптографии, причем используя криптопровайдер внутри Рутокена.</p><p>1. Попробуйте сгенерировать ключевую пару на токене<br /></p><div class="codebox"><pre><code>pkcs11-tool --module ./librtpkcs11ecp.so --key-type RSA:2048 --keypairgen --id 45 -l --pin 12345678</code></pre></div><p>2. Подпишите на ней данные, которые вы хотите использовать:<br /></p><div class="codebox"><pre><code>pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  -s --id 45 -l --pin 12345678 -i data.txt -o sign.txt</code></pre></div><p>3. Загрузите подпись и данные в качестве CKO_DATA объектов на токен<br /></p><div class="codebox"><pre><code>pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  --write-object data.txt --application-label &quot;app-data&quot; --type data
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  --write-object sign.txt --application-label &quot;app-sign&quot; --type data</code></pre></div><p>Дальше, если вы захотите проверить, что объект не изменялся, просто проверьте его подпись:<br /></p><div class="codebox"><pre><code>pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  --read-object --type data --application-label &quot;app-sign&quot; -o sign.txt
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  --read-object --type data --application-label &quot;app-data&quot; -o data.txt
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so  --verify --id 45 -i data.txt --signature-file sign.txt</code></pre></div><p>Таким образом вы защитите данные подписью, которую можно создать только зная PIN-код токена, в то же время проверить данные может кто угодно.</p><p>Проблему того, что пользователь может создавать несколько объектов с одинаковым CKA_LABEL и CKA_ID обойти нельзя: стандарт не запрещает это. В то же время, если вы выгрузили данные и подпись для них сошлась, то этим данным точно можно доверять.</p>]]></content>
			<author>
				<name><![CDATA[Пётр Михалицын]]></name>
				<uri>https://forum.rutoken.ru/user/11560/</uri>
			</author>
			<updated>2021-06-10T09:57:52Z</updated>
			<id>https://forum.rutoken.ru/post/15645/#p15645</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись неизменяемых данных]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/15641/#p15641" />
			<content type="html"><![CDATA[<p>Добрый день.</p><p>Уточняю задачу (извиняюсь если сразу написал неясно):</p><p>1. Необходимо записать, использую PIN, небольшой файл (действие выполнит &quot;установщик&quot;)<br />2. При работе пользователь должен иметь возможность считать эти данные<br />3. Пользователь не должен иметь возможность перезаписать данные (т.к. не знает PIN)</p><p>Делаю так:<br />1. pkcs11-tool --module /usr/lib/librtpkcs11ecp.so&nbsp; -l --pin 12345678 --write-object ./admin_file.txt --type data --label &quot;MYFILE&quot;<br />2. pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --read-object --type data --label &#039;MYFILE&#039; --output-file ./some_file.txt<br />3. Но пользователь может записать свой файл под темже label так:&nbsp; pkcs11-tool --module /usr/lib/librtpkcs11ecp.so&nbsp; --write-object ./user_file.txt --type data --label &quot;MYFILE&quot;<br />3.1 После такой записи --list-objects покажет две записи с одинаковым label</p><p>Хотя, если&nbsp; пользователь и записал свой файл под темже label, то содержимое будет как у admin_file.txt</p><p>Это почти хорошо, но хотелось бы запретить запись пользователю свои данные под темже label (возможно следует использовать --application-label, но назначение этих ключей еще не понимаю)</p>]]></content>
			<author>
				<name><![CDATA[muzi]]></name>
				<uri>https://forum.rutoken.ru/user/11676/</uri>
			</author>
			<updated>2021-06-10T07:16:24Z</updated>
			<id>https://forum.rutoken.ru/post/15641/#p15641</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись неизменяемых данных]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/15640/#p15640" />
			<content type="html"><![CDATA[<p>Добрый день</p><p>Опишу вашу задачу на уровне атрибутов PKCS#11 -- <a href="http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html">http://docs.oasis-open.org/pkcs11/pkcs1 … 40-os.html</a>.</p><br /><p>Вы хотите, чтобы:<br />1. Объект читался только по предъявлению PIN-кода<br />2. Объект нельзя было изменять</p><br /><p>За возможность чтения объекта по предъявлению PIN-кода отвечает атрибут CKA_PRIVATE. Если он установлен в CK_TRUE, то без авторизации на токене найти объект будет нельзя.</p><p>За возможность изменения объекта отвечает атрибут CKA_MODIFIABLE. Если этот атрибут установлен в CK_FALSE, то объект помечается как read-only и дальнейшее изменение ВСЕХ его атрибутов невозможно. Любая попытка изменить объект будет приводить к ошибке CKR_ATTRIBUTE_READ_ONLY.</p><br /><p>Таким образом ваша задача сводится к созданию объекта с таким шаблоном атрибутов:<br /></p><div class="codebox"><pre><code>{
    { CKA_CLASS, &amp;dataObject, sizeof(dataObject) },
    { CKA_APPLICATION, applicationLabel, sizeof(applicationLabel) - 1 },  // Описание приложения, которое записывает данные
    { CKA_MODIFIABLE, attributeFalse, sizeof(attributeFalse) },
    { CKA_PRIVATE, attributeTrue, sizeof(attributeTrue) },
    { CKA_VALUE, data, sizeof(data) }, // сами данные
}</code></pre></div><br /><p>pkcs11-tool позволяет задавать только эти атрибуты:<br />1. CKA_CLASS (флаг --type)<br />2. CKA_APPLICATION (флаг --aplication-label)<br />3. CKA_PRIVATE (флаг --private)<br />4. CKA_VALUE (флаг -w)</p><p>Так что если вы все-таки хотите добиться неизменяемости объекта, то атрибут CKA_MODIFIABLE вам придется устанавливать программным способом.</p>]]></content>
			<author>
				<name><![CDATA[Пётр Михалицын]]></name>
				<uri>https://forum.rutoken.ru/user/11560/</uri>
			</author>
			<updated>2021-06-09T13:54:01Z</updated>
			<id>https://forum.rutoken.ru/post/15640/#p15640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Запись неизменяемых данных]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/15639/#p15639" />
			<content type="html"><![CDATA[<p>Здравствуйте, <strong>muzi</strong>, <br />Уточните пожалуйста, вам необходимо чтоб при записи данных всегда запрашивался PIN-код или на чтение данных запрашивался PIN-код?<br />Опишите подробнее какая перед вами стоит задача.</p>]]></content>
			<author>
				<name><![CDATA[Фатеева Светлана]]></name>
				<uri>https://forum.rutoken.ru/user/11129/</uri>
			</author>
			<updated>2021-06-09T10:47:57Z</updated>
			<id>https://forum.rutoken.ru/post/15639/#p15639</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Запись неизменяемых данных]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/15638/#p15638" />
			<content type="html"><![CDATA[<p>Добрый день.</p><p>Прошу пояснить правильность моих действий: хочу записать на Rutoken ECP пользовательские данные так, чтобы возможно было только их чтение.</p><p>Пишу: pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l --pin 12345678 --write-object ./myfile.txt --type data --label &quot;MYFILE&quot;</p><p>Читаю: pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --read-object --type data --label &#039;MYFILE&#039; --output-file myfile_read.txt</p><p>Но потом записать могу и без пароля (пина) - можно ли запретить такое поведение ?</p>]]></content>
			<author>
				<name><![CDATA[muzi]]></name>
				<uri>https://forum.rutoken.ru/user/11676/</uri>
			</author>
			<updated>2021-06-08T13:53:29Z</updated>
			<id>https://forum.rutoken.ru/post/15638/#p15638</id>
		</entry>
</feed>
