Evmctl: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 5 промежуточных версий 1 участника)
Строка 4: Строка 4:
== Установка ==
== Установка ==


Установить пакет <i>ima-evm-utils</i>
Установить пакет {{pkg|ima-evm-utils}}:
<source>apt-get install ima-evm-utils</source>
<source lang="bash">apt-get install ima-evm-utils</source>
Для создания ключей также потребуется программа <i>openssl</i>
Для создания ключей также потребуется программа {{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-1.0/README</code>, а так же в <code>man evmctl</code>.
Описание <i>ima-evm-utils</i> находится в файле <code>/usr/share/doc/ima-evm-utils-*/README</code>, а так же в <code>man evmctl</code>.


Ниже примеры использования.
Ниже примеры использования.
Строка 17: Строка 17:
=== Подписи в старом формате v1 (RSA ключи) ===
=== Подписи в старом формате v1 (RSA ключи) ===
Импорт RSA-ключа, подпись файла с помощью этого ключа и проверка подписи файла:<br>
Импорт RSA-ключа, подпись файла с помощью этого ключа и проверка подписи файла:<br>
#Создание RSA-ключей (для подписей типа v1) и копирование их в каталог <code>/etc/keys</code>, в котором находятся ключи используемые по-умолчанию <source>openssl genrsa -out privkey_evm.pem 1024
#Создание 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> <code>privkey_evm.pem</code> - приватный RSA ключ, <code>pubkey_evm.pem</code> - публичный RSA ключ (не сертификат).
cp {pubkey_evm.pem,privkey_evm.pem} /etc/keys</source>
#Импорт созданного публичного ключа в набор ключей ядра (keyring): <source>evmctl import --rsa /etc/keys/pubkey_evm.pem $evm_id</source>
#:<code>privkey_evm.pem</code> приватный RSA ключ, <code>pubkey_evm.pem</code> публичный RSA ключ (не сертификат).
#IMA + EVM подпись (формата v1, что характеризуется опцией <code>--rsa</code>) произвольного файла ключом <code>/etc/keys/privkey_evm.pem</code>: <source>evmctl sign --imasig --rsa <название файла></source>
#Импорт созданного публичного ключа в набор ключей ядра (keyring):
#Проверка EVM подписи (IMA не проверяется) по публичному ключу <code>/etc/keys/pubkey_evm.pem</code>: <source>evmctl verify <название файла></source>В случае соответствия подписи будет выдано сообщение - <code>Verification is OK</code>.
#:<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 сертификат) ===
=== Подписи в новом формате v2 (RSA ключ и x509 сертификат) ===
* Пример конфига для генерации ключа и сертификата от организации "IMA-CA" положить в файл <code>test-ca.conf</code>: <source>[ req ]
* Пример конфига для генерации ключа и сертификата от организации "IMA-CA" положить в файл <code>test-ca.conf</code>:
*:<source lang="text">[ req ]
distinguished_name = req_distinguished_name
distinguished_name = req_distinguished_name
prompt = no
prompt = no
Строка 41: Строка 48:
subjectKeyIdentifier=hash
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer</source>
authorityKeyIdentifier=keyid:always,issuer</source>
* Генерация 2048-битного RSA ключа и x509 сертификата (на 10000 дней) с использованиев этого конфига: <source>$ openssl req -verbose -new -nodes -utf8 -sha1 -days 10000 -batch -x509 \
* Генерация 2048-битного RSA ключа и x509 сертификата (на 10000 дней) с использованием этого конфига:
*:<source lang="bash">$ openssl req -verbose -new -nodes -utf8 -sha1 -days 10000 -batch -x509 \
       -config test-ca.conf \
       -config test-ca.conf \
       -newkey rsa:2048 \
       -newkey rsa:2048 \
       -out x509_evm.der -outform DER \
       -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>.
       -keyout privkey_evm.pem</source>
* IMA + EVM подпись (формата v2, что характеризуется отутствием опции <code>--rsa</code>) произвольного файла ключом <code>privkey_evm.pem</code>: <source>evmctl sign --imasig <название файла></source>
*:На выходе файл <code>privkey_evm.pem</code> с приватным ключом и <code>x509_evm.der</code> с публичным сертификатом. Их можно положить в каталог <code>/etc/keys</code>.
* Проверка EVM подписи (IMA не проверяется!) по публичному сертификату <code>x509_evm.der</code>: <source>evmctl verify <название файла></source> В случае соответствия подписи будет выдано сообщение <code>Verification is OK</code>.
* IMA + EVM подпись (формата v2, что характеризуется отсутствием опции <code>--rsa</code>) произвольного файла ключом <code>/etc/keys/privkey_evm.pem</code>:
* Только IMA подпись произвольного файла ключом <code>privkey_evm.pem</code>: <source>evmctl ima_sign <название файла></source>
*:<source lang="bash">evmctl sign --imasig <название файла></source>
* Проверка IMA подписи по публичному сертификату <code>x509_evm.der</code>: <source>evmctl ima_verify <название файла></source> В случае соответствия подписи будет выдано сообщение <code>Verification is OK</code> и код возврата будет успешный (exit code 0).
* Проверка 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 с версии v1.2 (2019-07-24), поддержка ГОСТ алгоритмов в ядре Линукс — хэш по ГОСТ 34.11 с версии 5.0 (2019-03-03), ЭЦП по ГОСТ 34.10 с версии 5.2 (2019-07-07). Видео презентация на Linux Security Summit 2019[1]

Установка

Установить пакет 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-ключа, подпись файла с помощью этого ключа и проверка подписи файла:

  1. Создание 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 ключ (не сертификат).
  2. Импорт созданного публичного ключа в набор ключей ядра (keyring):
    evmctl import --rsa /etc/keys/pubkey_evm.pem $evm_id
    
  3. IMA + EVM подпись (формата v1, что характеризуется опцией --rsa) произвольного файла ключом /etc/keys/privkey_evm.pem:
    evmctl sign --imasig --rsa <название файла>
    
  4. Проверка 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.

Ссылки

Страница проекта на sourceforge.net