Evmctl: различия между версиями
Нет описания правки |
мНет описания правки |
||
(не показано 18 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
<b>evmctl</b> - программа для создания и проверки цифровых подписей, а также для добавления ключей в набор ключей ядра. Распространяется по лицензии | <b>evmctl</b> - программа для создания и проверки цифровых подписей для IMA/EVM, а также для добавления ключей в набор ключей ядра. Распространяется по лицензии GPL2.0+. | ||
{{Памятка|ГОСТ алгоритмы поддерживаются в ima-evm-utils с версии v1.2 (2019-07-24), поддержка ГОСТ алгоритмов в ядре Линукс — хэш по ГОСТ 34.11 с версии 5.0 (2019-03-03), ЭЦП по ГОСТ 34.10 с версии 5.2 (2019-07-07). Видео презентация на Linux Security Summit 2019<ref>[https://www.youtube.com/watch?v=a968cQWc7zk Subsystem Update: Linux Integrity Status Update - Mimi Zohar, IBM. англ.]</ref>}} | |||
== Установка == | == Установка == | ||
Установить пакет | Установить пакет {{pkg|ima-evm-utils}}: | ||
<source>apt-get install ima-evm-utils</source> | <source lang="bash">apt-get install ima-evm-utils</source> | ||
Для создания | Для создания ключей также потребуется программа {{pkg|openssl}}: | ||
<source>apt-get install openssl</source> | <source lang="bash">apt-get install openssl</source> | ||
== Использование == | == Использование == | ||
Описание <i>ima-evm-utils</i> находится в файле <code>/usr/share/doc/ima-evm-utils- | Описание <i>ima-evm-utils</i> находится в файле <code>/usr/share/doc/ima-evm-utils-*/README</code>, а так же в <code>man evmctl</code>. | ||
=== | Ниже примеры использования. | ||
=== Подписи в старом формате v1 (RSA ключи) === | |||
Импорт RSA-ключа, подпись файла с помощью этого ключа и проверка подписи файла:<br> | Импорт RSA-ключа, подпись файла с помощью этого ключа и проверка подписи файла:<br> | ||
#Создание RSA-ключей и копирование их в | #Создание RSA-ключей (для подписей типа v1) и копирование их в каталог <code>/etc/keys</code>, в котором находятся ключи используемые по умолчанию: | ||
#:<source lang="bash">openssl genrsa -out privkey_evm.pem 1024 | |||
openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem | openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem | ||
mkdir /etc/keys | mkdir /etc/keys | ||
cp {pubkey_evm.pem,privkey_evm.pem} /etc/keys</source> | cp {pubkey_evm.pem,privkey_evm.pem} /etc/keys</source> | ||
#Импорт созданного публичного ключа<source>evmctl import --rsa /etc/keys/pubkey_evm.pem $evm_id</source> | #:<code>privkey_evm.pem</code> — приватный RSA ключ, <code>pubkey_evm.pem</code> — публичный RSA ключ (не сертификат). | ||
# | #Импорт созданного публичного ключа в набор ключей ядра (keyring): | ||
#Проверка подписи<source>evmctl verify <название файла></source>В случае соответствия подписи будет выдано сообщение - < | #:<source lang="bash">evmctl import --rsa /etc/keys/pubkey_evm.pem $evm_id</source> | ||
#IMA + EVM подпись (формата v1, что характеризуется опцией <code>--rsa</code>) произвольного файла ключом <code>/etc/keys/privkey_evm.pem</code>: | |||
#:<source lang="bash">evmctl sign --imasig --rsa <название файла></source> | |||
#Проверка EVM подписи (IMA не проверяется) по публичному ключу <code>/etc/keys/pubkey_evm.pem</code>: | |||
#:<source lang="bash">evmctl verify <название файла></source> | |||
#:В случае соответствия подписи будет выдано сообщение — <code>Verification is OK</code>. | |||
=== Подписи в новом формате v2 (RSA ключ и x509 сертификат) === | |||
* Пример конфига для генерации ключа и сертификата от организации "IMA-CA" положить в файл <code>test-ca.conf</code>: | |||
*:<source lang="text">[ req ] | |||
distinguished_name = req_distinguished_name | |||
prompt = no | |||
string_mask = utf8only | |||
x509_extensions = v3_ca | |||
[ req_distinguished_name ] | |||
O = IMA-CA | |||
CN = IMA/EVM certificate signing key | |||
emailAddress = ca@ima-ca | |||
[ v3_ca ] | |||
basicConstraints=CA:TRUE | |||
subjectKeyIdentifier=hash | |||
authorityKeyIdentifier=keyid:always,issuer</source> | |||
* Генерация 2048-битного RSA ключа и x509 сертификата (на 10000 дней) с использованием этого конфига: | |||
*:<source lang="bash">$ openssl req -verbose -new -nodes -utf8 -sha1 -days 10000 -batch -x509 \ | |||
-config test-ca.conf \ | |||
-newkey rsa:2048 \ | |||
-out x509_evm.der -outform DER \ | |||
-keyout privkey_evm.pem</source> | |||
*:На выходе файл <code>privkey_evm.pem</code> с приватным ключом и <code>x509_evm.der</code> с публичным сертификатом. Их можно положить в каталог <code>/etc/keys</code>. | |||
* IMA + EVM подпись (формата v2, что характеризуется отсутствием опции <code>--rsa</code>) произвольного файла ключом <code>/etc/keys/privkey_evm.pem</code>: | |||
*:<source lang="bash">evmctl sign --imasig <название файла></source> | |||
* Проверка EVM подписи (IMA не проверяется!) по публичному сертификату <code>/etc/keys/x509_evm.der</code>: | |||
*:<source lang="bash">evmctl verify -v <название файла></source> | |||
*:В случае соответствия подписи будет выдано сообщение <code>verification is OK</code>. | |||
* Только IMA подпись произвольного файла ключом <code>/etc/keys/privkey_evm.pem</code>: | |||
*:<source lang="bash">evmctl ima_sign <название файла></source> | |||
* Проверка IMA подписи по публичному сертификату <code>/etc/keys/x509_evm.der</code>: | |||
*:<source lang="bash">evmctl ima_verify -v <название файла></source> | |||
*:В случае соответствия подписи будет выдано сообщение <code>verification is OK</code> и код возврата будет успешный (exit code 0). | |||
=== Подписи в новом формате v2 (ГОСТ ключ и x509 сертификат) === | |||
* Генерация 256-битного ГОСТ 34.10 ключа и x509 сертификата (на 10000 дней) с использованием вышеприведенного конфига (<code>test-ca.conf</code>): | |||
*:<source lang="bash">$ openssl req -nodes -x509 -utf8 -days 10000 -batch \ | |||
-config test-ca.conf \ | |||
-newkey gost2012_256 \ | |||
-pkeyopt paramset:A \ | |||
-out x509_evm.der -outform DER \ | |||
-keyout privkey_evm.pem</source> | |||
* Только IMA подпись произвольного файла ключом <code>/etc/keys/privkey_evm.pem</code>: | |||
*:<source lang="bash">evmctl ima_sign --hashalgo md_gost12_256 <название файла></source> | |||
* Проверка IMA подписи по публичному сертификату <code>/etc/keys/x509_evm.der</code>: | |||
*:<source lang="bash">evmctl ima_verify -v <название файла></source> | |||
*:В случае соответствия подписи будет выдано сообщение <code>verification is OK</code> и код возврата будет 0. | |||
== Ссылки == | == Ссылки == |
Текущая версия от 14:35, 20 апреля 2022
evmctl - программа для создания и проверки цифровых подписей для IMA/EVM, а также для добавления ключей в набор ключей ядра. Распространяется по лицензии GPL2.0+.
Установка
Установить пакет ima-evm-utils:
apt-get install ima-evm-utils
Для создания ключей также потребуется программа openssl:
apt-get install openssl
Использование
Описание ima-evm-utils находится в файле /usr/share/doc/ima-evm-utils-*/README
, а так же в man evmctl
.
Ниже примеры использования.
Подписи в старом формате v1 (RSA ключи)
Импорт RSA-ключа, подпись файла с помощью этого ключа и проверка подписи файла:
- Создание RSA-ключей (для подписей типа v1) и копирование их в каталог
/etc/keys
, в котором находятся ключи используемые по умолчанию:openssl genrsa -out privkey_evm.pem 1024 openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem mkdir /etc/keys cp {pubkey_evm.pem,privkey_evm.pem} /etc/keys
privkey_evm.pem
— приватный RSA ключ,pubkey_evm.pem
— публичный RSA ключ (не сертификат).
- Импорт созданного публичного ключа в набор ключей ядра (keyring):
evmctl import --rsa /etc/keys/pubkey_evm.pem $evm_id
- IMA + EVM подпись (формата v1, что характеризуется опцией
--rsa
) произвольного файла ключом/etc/keys/privkey_evm.pem
:evmctl sign --imasig --rsa <название файла>
- Проверка EVM подписи (IMA не проверяется) по публичному ключу
/etc/keys/pubkey_evm.pem
:evmctl verify <название файла>
- В случае соответствия подписи будет выдано сообщение —
Verification is OK
.
Подписи в новом формате v2 (RSA ключ и x509 сертификат)
- Пример конфига для генерации ключа и сертификата от организации "IMA-CA" положить в файл
test-ca.conf
:[ req ] distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = v3_ca [ req_distinguished_name ] O = IMA-CA CN = IMA/EVM certificate signing key emailAddress = ca@ima-ca [ v3_ca ] basicConstraints=CA:TRUE subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer
- Генерация 2048-битного RSA ключа и x509 сертификата (на 10000 дней) с использованием этого конфига:
$ openssl req -verbose -new -nodes -utf8 -sha1 -days 10000 -batch -x509 \ -config test-ca.conf \ -newkey rsa:2048 \ -out x509_evm.der -outform DER \ -keyout privkey_evm.pem
- На выходе файл
privkey_evm.pem
с приватным ключом иx509_evm.der
с публичным сертификатом. Их можно положить в каталог/etc/keys
.
- IMA + EVM подпись (формата v2, что характеризуется отсутствием опции
--rsa
) произвольного файла ключом/etc/keys/privkey_evm.pem
:evmctl sign --imasig <название файла>
- Проверка EVM подписи (IMA не проверяется!) по публичному сертификату
/etc/keys/x509_evm.der
:evmctl verify -v <название файла>
- В случае соответствия подписи будет выдано сообщение
verification is OK
.
- Только IMA подпись произвольного файла ключом
/etc/keys/privkey_evm.pem
:evmctl ima_sign <название файла>
- Проверка IMA подписи по публичному сертификату
/etc/keys/x509_evm.der
:evmctl ima_verify -v <название файла>
- В случае соответствия подписи будет выдано сообщение
verification is OK
и код возврата будет успешный (exit code 0).
Подписи в новом формате v2 (ГОСТ ключ и x509 сертификат)
- Генерация 256-битного ГОСТ 34.10 ключа и x509 сертификата (на 10000 дней) с использованием вышеприведенного конфига (
test-ca.conf
):$ openssl req -nodes -x509 -utf8 -days 10000 -batch \ -config test-ca.conf \ -newkey gost2012_256 \ -pkeyopt paramset:A \ -out x509_evm.der -outform DER \ -keyout privkey_evm.pem
- Только IMA подпись произвольного файла ключом
/etc/keys/privkey_evm.pem
:evmctl ima_sign --hashalgo md_gost12_256 <название файла>
- Проверка IMA подписи по публичному сертификату
/etc/keys/x509_evm.der
:evmctl ima_verify -v <название файла>
- В случае соответствия подписи будет выдано сообщение
verification is OK
и код возврата будет 0.