Установка сертификата и закрытого ключа
Мы опишем установку сертификата электронной подписи и закрытого ключа для ОС семейства Windows. В процессе настройки нам понадобятся права Администратора (поэтому нам может понадобится сисадмин, если он у вас есть).
Если вы еще не разобрались что такое Электронная подпись, то пожалуйста ознакомьтесь вот с этой инструкцией. Или если еще не получили электронную подпись, обратитесь в Удостоверяющий центр, рекомендуем СКБ-Контур.
Хорошо, предположим у вас уже есть электронная подпись (токен или флешка), но OpenSRO сообщает что ваш сертификат не установлен, такая ситуация может возникнуть, если вы решили настроить ваш второй или третий компьютер (разумеется подпись не "прирастает" только к одному компьютеру и ее можно использовать на нескольких компьютерах). Обычно первоначальная настройка осуществляется с помощью техподдержки Удостоверяющего центра, но допустим это не наш случай, итак поехали.
1. Убедитесь что КриптоПро CSP 4 установлен на вашем компьютере
Для этого зайдите в меню Пуск КРИПТО-ПРО КриптоПро CSP запустите его и убедитесь что версия программы не ниже 4-й.
Если ее там нет, то скачайте, установите и перезапустите браузер.

2. Если у вас токен (Рутокен например)
Прежде чем система сможет с ним работать понадобится установить нужный драйвер.
- Драйверы Рутокен:https://www.rutoken.ru/support/download/drivers-for-windows/
- Драйверы eToken:https://www.aladdin-rd.ru/support/downloads/etoken
- Драйверы JaCarta:https://www.aladdin-rd.ru/support/downloads/jacarta
Алгоритм такой: (1) Скачиваем; (2) Устанавливаем.
Для токена может понадобиться стандартный (заводской) пин-код, здесь есть стандартные пин-коды носителей.
3. Если закрытый ключ в виде файлов
Закрытый ключ может быть в виде 6 файлов: header.key , masks.key , masks2.key , name.key , primary.key , primary2.key
Тут есть тонкость если эти файлы записаны на жесткий диск вашего компьютера, то КриптоПро CSP не сможет их прочитать, поэтому все действия надо производить предварительно записав их на флешку (съемный носитель), причем нужно расположить их в папку первого уровня, например: E:\Andrey\ <файлики>, если расположить в E:\Andrey\keys\ <файлики>, то работать не будет.
(Если вы не боитесь командной строки, то съемный носитель можно сэмулировать примерно так: subst x: C:\tmp появится новый диск (X:), в нем будет содержимое папки C:\tmp, он исчезнет после перезагрузки. Такой способ можно использовать если вы планируете установить ключи в реестр)
Нашли файлы, записали на флешку, переходим к следующему шагу.
4. Установка сертификата из закрытого ключа
Теперь нам нужно получить сертификат, сделать это можно следующим образом:
- Открываем КриптоПро CSP
- Заходим на вкладку Сервис
- Нажимаем кнопку Просмотреть сертификаты в контейнере, нажимаем Обзор и здесь (если на предыдущих шагах сделали все правильно) у нас появится наш контейнер. Нажимаем кнопку Далее, появятся сведения о сертификате и тут нажимаем кнопку Установить (программа может задать вопрос проставить ли ссылку на закрытый ключ, ответьте "Да")
- После этого сертификат будет установлен в хранилище и станет возможным подписание документов (при этом, в момент подписания документа, нужно будет чтобы флешка или токен были вставлены в компьютер)
5. Использование электронной подписи без токена или флешки (установка в реестр)
Если скорость и удобство работы для вас стоит чуть выше чем безопасность, то можно установить ваш закрытый ключ в реестр Windows. Для этого нужно сделать несколько простых действий:
- Выполните подготовку закрытого ключа, описанную в пунктах (2) или (3)
- Далее открываем КриптоПро CSP
- Заходим на вкладку Сервис
- Нажимаем кнопку Скопировать
- С помощью кнопки Обзор выбираем наш ключ
- Нажимаем кнопку Далее, потом придумаем какое-нибудь имя, например "Пупкин, ООО Ромашка" и нажимаем кнопку Готово
- Появится окно, в котором будет предложено выбрать носитель, выбираем Реестр, жмем Ок
- Система попросит Установить пароль для контейнера, придумываем пароль, жмем Ок
Чтобы для сертификата проставить ссылку на этот закрытый ключ выполните действия из пункта (4).
Важное замечание: портал OpenSRO не "увидит" сертификат, если вышел срок его действия.
Как скопировать ЭЦП с рутокена
Сертификат электронной цифровой подписи — электронный либо бумажный документ, дающий право проконтролировать достоверность текстового или иного файла, принадлежность операции конкретному владельцу. Его выдает специализированный удостоверяющий центр (УЦ), где идет оформление ЭЦП. В обязательном порядке в нем есть следующая информация:
- наименование средства ЭЦП;
- наименование УЦ, которое выпустило сертификат;
- данные о датах начала и завершения действия ЭЦП;
- ключ для выполнения проверки ЭЦП;
- сведения об актуальной точке списка отозванных сертификатов (СОС).
Также в состав сертификата входит информация о владельце ЭЦП. Для физического (частного) лица — это фамилия имя и отчество, номер СНИЛС, ИНН при наличии. Для юрлица — это наименование компании, адрес расположения, ИНН. Дополнительно в сертификате могут находиться сведения о сфере применения, данные об издателе и иные данные.
В общем случае сертификат ЭЦП состоит из трех компонентов:
- закрытый ключ (служит для формирования уникальной ЭЦП при подписи каждого документа);
- открытый ключ (служит для контроля подлинности подписи автором);
- внесенные в систему данные о владельце.
Как правило, срок действия сертификата составляет 1 год с момента выдачи, по истечение которого надо повторно получать новый. Сделано это для повышения общей надежности и предотвращения компрометации конфиденциальных данных.
Как произвести копирование сертификата с Рутокен
На одном накопителе Рутокен может находиться до 28 сертификатов ЭЦП (зависит от объема встроенной памяти). Этого достаточно для решения задач даже с учетом постепенного копирования на имеющийся носитель дополнительных ключей. На практике иногда приходится сталкиваться с необходимостью копирования сертификата с токена для переноса на другой или временного хранения на жестком диске, в облаке. Также актуальна обратная операция, позволяющая создать копию ЭЦП на другом носителе для передачи ее коллеге, который также получил право на использование.
Перед выполнением копирования необходимо понимать, что сделать это традиционным способом с локального диска компьютера невозможно. Подобная операция доступна при наличии одного из следующих считывателей:
- Рутокен;
- съемный диск любого типа;
- реестр компьютера.
Если в качестве исходного носителя используется USB-накопитель, то контейнер с размещенным сертификатом должен находиться в корневой папке. Параллельно на нем может располагаться другая информация любой степени вложенности, которая не будет мешать работе с контейнером во время подписи документации.
Обратим внимание, что использование обычного USB-накопителя стоит рассматривать исключительно в качестве временной меры для хранения сертификатов и ключей из-за риска их хищения злоумышленниками. Исключением будет случай, когда подобное копирование используется для получения дополнительного комплекта файлов на случай выхода из строя Рутокен.
Как выполнить копирование сертификата с Рутокена через КриптоПРО
Для решения задачи понадобится программа КриптоПРО CSP. Непосредственно копирование ЭЦП с токена идет следующим образом:
- запускаем КриптоПРО CSP через панель управления вашего ПК;
- переходим на вкладку «Сервис»;
- нажимаем кнопку «Просмотреть сертификаты в контейнере»;
- находим через кнопку «Обзор» и в списке ключевых носителей выбираем необходимый;
- подтверждаем выбор клавишей ОК;
- нажимаем кнопку «Далее» (на этом этапе может понадобиться ввод PIN-кода, который в статусе «по умолчанию» для ruToken составляет 12345678, а для eToken 1234567890);
- в открывшемся новом окне выбираем «Свойства» и переходим во вкладку «Состав»;
- нажимаем «Копировать в файл…» и в мастере сертификатов нажимаем «Далее»;
- помечаем, что нам не нужно экспортировать закрытый ключ, выбрав соответствующую опцию;
- выбираем необходимую кодировку (DER X.509);
- определяем место хранения копии и дополнительно подтверждаем его кнопкой ОК (менять название папки не следует);
- вводим дважды пароль для копии и подтверждаем его кнопкой ОК.
В указанном нами месте на жестком диске или USB-носителе появится новая папка с ключами, которую далее можно копировать «традиционным» способом.
Обратим внимание, что если вы планируете далее использовать скопированную ЭЦП по прямому назначению, то находиться указанная папка должна в корневой директории диска.
Проведение копирования контейнера с помощью встроенных средств операционной системы Windows
При использовании USB-накопителя либо дискеты все можно выполнить стандартными средствами Windows. Для этого достаточно скопировать папку с сертификатом на конкретный носитель. Внутри этой папки будет 6 файлов с одинаковым расширением .key. Также здесь может находиться ключ в виде файла типа keyName.cer, копировать который необязательно.
Файлы для электронной цифровой подписи имеют следующие наименования (все имеют расширение .key):
- header:
- masks;
- masks2;
- name;
- primary;
- primary2.
Файл primary.key включает в себя 32 байта ключа, представленного в формате ASN1. При этом данное значение представляет собой только 50% искомого ключа, так как полная его версия может быть получена при делении на маску с учетом модуля Q.
Файл masks.key включает 32 байта маски ключа, которая также представлена в формате ASN1. Также здесь есть 12 байт данных для генерации ключа при условии, что криптографический контейнер защищен от несанкционированного доступа паролем (последний также принимает участие при генерации уникального ключа хранения). Завершает перечень информации в файле контрольная сумма, занимающая 4 байта.
Файл header.key представляет собой набор параметров ЭЦП и другую общую информацию.
Как выполнить копирование ЭП из реестра
Внимание!
Рекомендуется использовать данный способ в тех случаях, когда выполнение штатными средствами СКЗИ копирование не удалось.
Если вы желаете скопировать криптографический контейнер с требуемым нам сертификатом непосредственно из реестра компьютера, то сначала необходимо найти папку, где он располагается. В зависимости от версии Windows необходимо перейти по следующему адресу в ветке реестра:
- для 32-разрядной: HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\*Наш идентификатор пользователя ЭЦП*\Keys\*Имя контейнера с ЭЦП*; (HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\Users\
\Keys\) - для 64-разрядной: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\USERS\*Наш идентификатор пользователя ЭЦП*\Keys\*Имя контейнера ЭЦП*. (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\CryptoPro\Settings\Users\
\Keys\)
Теперь достаточно для копирования выполнить действия в соответствии со следующим алгоритмом:
- выделите интересующую папку и правой кнопкой мыши вызовите контекстное меню;
- выполните команду «Экспортировать»;
- введите название файла и сохраните его;
- скопируйте полученный файл на жесткий диск компьютера, где планируете организовать рабочее место обычным способом;
- откройте скопированный файл реестра (формат .reg,), через «Блокнот» или иное аналогичное приложение;
- измените в открытом файле SID* пользователя (он имеет аналогичный формат и обычно расположен в третьей строке сверху);
- добавьте после папки Software дополнительно Wow6432Node в случае, если копирование идет из Windows 32-бита в версию с 64-бита;
- сохраните все изменения;
- выберите опять файл реестра;
- произведите «Слияние», выбрав этот пункт в контекстном меню.
*Примечание:
SID — Идентификатор безопасности пользователя ОС Windows. У каждого пользователя Windows свой SID. Для того чтобы узнать SID пользователя запустите ОС Windows под его учетной записью, после чего перейдите в командную строку (Пуск → Выполнить → cmd) и введите команду whoami/user. Команда отобразит основные сведения о текущем пользователе, включая его SID.
Пример SID: S-1-5-12-12345678-1234567890-1234567890-1234.
Если все действия были выполнены верно, то должно на экране появиться сообщение об успешных изменениях в реестре. Если есть ошибки, то появится с ошибкой и вам нужно проконтролировать корректность указанного пути к файлу. После завершения процедуры все данные о контейнере будут находиться в реестре операционной системы, а вам понадобится для работы только установить вручную личный сертификат. Сделать это можно с помощью стандартных инструментов КриптоПро CSP.
Выгрузка личного сертификата с исходного компьютера: Для начала на ПК (исходный), с которого идет установка, выполняем его экспорт следующим образом:
- переходим на вкладку «Содержание» в настройках вашего браузера;
- нажимаем на кнопку под названием «Сертификаты»;
- находим актуальный для нас сертификат и нажимаем кнопку «Экспорт»;
- нажимаем кнопку «Далее» в появившемся на мониторе окне;
- выбираем пункт «Нет, не экспортировать закрытый ключ» и опять нажимаем «Далее»;
- выбираем нужный формат сертификата в виде файла X.509 (.CER) с кодировкой DER;
- указываем каталог, где будет сохранен сертификат и сохраняем его.
- Данный файл необходимо перенести на конечный ПК.
- Необходимо запустить КриптоПРО CSP и перейти на вкладку «Сервис» и выбрать пункт «Просмотреть сертификат в контейнере»;
- Нажмите кнопку «Обзор» и выберете ранее перенесенный контейнер из отображенного списка;
- После выбора контейнера откроется «Сертификаты в контейнере закрытого» ключа. Нажмите кнопку кнопку «Установить»;
В случае успеха будет выдано окно о завершении операции. Нажмите кнопку «ОК»
Как перенести нужный контейнер на Рутокен из другого источника
В идеальном случае, контейнер с действующим сертификатом должен храниться в реестре либо на токене, где обеспечен максимальный уровень защиты. Для копирования его на Рутокен необходимо предварительно подключить считыватель и проконтролировать его доступность через КриптоПро. Если ее нет, то настраиваем, а в противном случае, выполняем действия в соответствии со следующим алгоритмом:
- переходим на вкладку «Сервис»;
- нажимаем на кнопку «Скопировать»;
- выбираем нужный нам контейнер с помощью кнопки «Обзор»;
- нажимаем кнопку «Далее»;
- вводим PIN-код;
- указываем наименование контейнера, который будет находиться на токене;
- выбираем актуальный носитель;
- вводим пользовательский PIN-код Рутокена;
- нажимаем для контроля копирования кнопку «Просмотреть сертификаты контейнера» во вкладке Сервис.
Для использования обновленного контейнера для подписи различных документов необходимо переместить сертификат с токена непосредственно в хранилище. В зависимости от вашей версии КриптоПро необходимо либо нажать на кнопку «Установить» либо сначала нажать «Свойства» и затем выбрав соответствующую операцию по установке нужного сертификата. В дальнейшем достаточно соблюдать рекомендации специального мастера.
Обратим внимание, что если уже этим сертификатом пользовались на компьютере с использованием другого носителя, то старый необходимо удалить из хранилища. Для этого можно использовать несколько способов. Если вы планируете это сделать на компьютере под управлением Windows, то придерживайтесь следующего алгоритма:
- запустите браузер Internet Explorer (версия, как минимум 8.0);
- перейдите в настройках во вкладку «Свойства браузера» (раздел «Сервис»);
- перейдите теперь на вкладку «Содержание»;
- кликните по пункту «Сертификаты»;
- выберите лишний сертификат и после этого нажмите на кнопку «Удалить»;
- подтвердите действие.
Удалить также можно с помощью программы КриптоПро CSP, которое значительно упрощает действия с контейнерами. Для проведения операции сделайте ряд действий:
- запустите программное обеспечение;
- перейдите теперь на вкладку «Сервис»;
- выберите раздел «Удалить» или «Удалить контейнер» (название зависит от конкретной версии программного обеспечения);
- выберите в окне сертификат, от которого вы хотите избавиться;
- подтвердите действие, нажав кнопку «Готово».
Подобным образом рекомендовано также удалять ненужные уже сертификаты или иные электронные подписи, которые уже недействительны, или если обновление ЭЦП запланировано в другом удостоверяющем центре. В этих случаях старый корневой сертификат больше не нужен, но одновременно вы не сможете открывать зашифрованные «старыми» ЭЦП документы.
При необходимости решить вопросы с копированием, организацией рабочих мест, где понадобится использование ЭЦП Рутокен любого типа, обращайтесь в компанию «Астрал-М». Мы специализируемся на внедрении в компаниях IT-решений по автоматизации электронного документооборота, выпуске электронных цифровых подписей любой степени сложности. Вы получите высокое качество услуг по доступной цене. Дополнительно мы предлагаем возможность оформления ЭЦП в ускоренном формате, когда заявка будет выполнена в течение 1-2 часов при наличии пакета документов.
Truecrypt
Header Key Derivation, Salt, and Iteration Count
July 31, 2015 by admin
Header key is used to encrypt and decrypt the encrypted area of the TrueCrypt volume header (for system encryption, of the key data area), which contains the master key and other data (see the sections Encryption Scheme and TrueCrypt Volume Format Specification). In volumes created by TrueCrypt 5.0 or later (and for system encryption), the area is encrypted in XTS mode (see the section Modes of Operation). The method that TrueCrypt uses to generate the header key and the secondary header key (XTS mode) is PBKDF2, specified in PKCS #5 v2.0; see References.
512-bit salt is used, which means there are 2 512 keys for each password. This significantly decreases vulnerability to ‘off-line’ dictionary/’rainbow table’ attacks (pre-computing all the keys for a dictionary of passwords is very difficult when a salt is used) [7]. The salt consists of random values generated by the TrueCrypt random number generator during the volume creation process. The header key derivation function is based on HMAC-SHA-512, HMAC-RIPEMD-160, or HMAC- Whirlpool (see [8, 9, 20, 22]) – the user selects which. The length of the derived key does not depend on the size of the output of the underlying hash function. For example, a header key for the AES-256 cipher is always 256 bits long even if HMAC-RIPEMD-160 is used (in XTS mode, an additional 256-bit secondary header key is used; hence, two 256-bit keys are used for AES-256 in total). For more information, refer to [7]. 1000 iterations (or 2000 iterations when HMAC-RIPEMD-160 is used as the underlying hash function) of the key derivation function have to be performed to derive a header key, which increases the time necessary to perform an exhaustive search for passwords (i.e., brute force attack) [7].
Header keys used by ciphers in a cascade are mutually independent, even though they are derived from a single password (to which keyfiles may have been applied). For example, for the AES- Twofish-Serpent cascade, the header key derivation function is instructed to derive a 768-bit encryption key from a given password (and, for XTS mode, in addition, a 768-bitsecondary header key from the given password). The generated 768-bit header key is then split into three 256-bit keys (for XTS mode, the secondary header key is split into three 256-bit keys too, so the cascade actually uses six 256-bit keys in total), out of which the first key is used by Serpent, the second key is used by Twofish, and the third by AES (in addition, for XTS mode, the first secondary key is used by Serpent, the second secondary key is used by Twofish, and the third secondary key by AES).
Hence, even when an adversary has one of the keys, he cannot use it to derive the other keys, as there is no feasible method to determine the password from which the key was derived (except for brute force attack mounted on a weak password).
How does Veracrypt work?
I’m a layman in security and was trying to understand how hashes and encryption algorithms are used in Veracrypt/Truecrypt.
Reading the documentation, this is what I understood (please, feel free to correct me if I’m wrong):
For simplification’s sake, let’s consider a non-system volume, no hidden volumes and no Cascade.
An encrypted HEADER is generated containing two Master Keys (Primary and Secondary). Those Master Keys were created using RNG based on the HASH.
To Decrypt the HEADER, the correct password must generate a HEADER KEY (two keys, actually) using a derivation function from the selected HASH Algorithm.
This HEADER KEY decrypts the HEADER. In other words, the HEADER is not the HASH itself from which the key is compared with.
Edit: The documentation explains how the Header Key Derivation is done:
12-bit salt is used, which means there are 2512 keys for each password. This significantly decreases vulnerability to ‘off-line’ dictionary/’rainbow table’ attacks (pre-computing all the keys for a dictionary of passwords is very difficult when a salt is used) [7]. The salt consists of random values generated by the VeraCrypt random number generator during the volume creation process. The header key derivation function is based on HMAC-SHA-512, HMAC-SHA-256, HMAC-RIPEMD-160, or HMAC-Whirlpool (see [8, 9, 20, 22]) – the user selects which. The length of the derived key does not depend on the size of the output of the underlying hash function. For example, a header key for the AES-256 cipher is always 256 bits long even if HMAC-RIPEMD-160 is used (in XTS mode, an additional 256-bit secondary header key is used; hence, two 256-bit keys are used for AES-256 in total).
Also, about the decryption, it says:
Decryption is considered successful if the first 4 bytes of the decrypted data contain the ASCII string “VERA”, and if the CRC-32 checksum of the last 256 bytes of the decrypted data (volume header) matches the value located at byte #8 of the decrypted data (this value is unknown to an adversary because it is encrypted – see the section VeraCrypt Volume Format Specification). If these conditions are not met, the process continues from (3) again, but this time, instead of the data read in (1), the data read in (2) are used (i.e., possible hidden volume header). If the conditions are not met again, mounting is terminated (wrong password, corrupted volume, or not a VeraCrypt volume).
If this is correct, I have some questions:
Is the encryption method of the HEADER the same of the rest of the volume? And only the keys are different…
If I got it correctly, the two HEADER Keys are 256 bit longer. Does those two combined key have the same power as a single 512 bits longer hash? Or is it equivalent to 2^256 + 2^256?
If not for (2), what’s the point of selecting a 512 bits HASH Algorithm?
If yes for (2), does the subsequent two Master Keys also have 512-bit long equivalent power?
Does the subsequent two Master Keys also uses the same HASH algorithm that HEADER Keys uses? For instance, if I select Whirlpool algorithm in the wizard, does it only affects the HEADER KEY or both?