Стандарт ЭЦП DSA, Формирование и проверка подписи DSА – Электронная цифровая подпись

Стандарт ЭЦП DSA, Формирование и проверка подписи DSА - Электронная цифровая подпись Сертификаты

C# – есть ли способ сгенерировать сертификат dsa с использованием чистой .net framework, а если нет, то почему? –

Начиная с .NET 4.7.2 можно создавать сертификаты RSA и EC с помощью .NET CertificateRequest. Однако я не могу найти ничего, что позволило бы мне генерировать сертификаты DSA. Вот как я бы сделал это для RSA и EC:

private static X509Certificate2 GenerateRsaCertificate()
{
    var hashAlgorithm = HashAlgorithmName.SHA256;
    var rsaKey = RSA.Create(2048);
    var subject = new X500DistinguishedName("CN=mycert");
    var request = new CertificateRequest(subject, rsaKey, hashAlgorithm, RSASignaturePadding.Pkcs1);
    var certificate = request.CreateSelfSigned(DateTime.Now - TimeSpan.FromDays(5), DateTime.Now   TimeSpan.FromDays(365));
    return certificate;
}

private static X509Certificate2 GenerateEcDsaCertificate()
{
    var hashAlgorithm = HashAlgorithmName.SHA256;
    var curve = ECCurve.NamedCurves.nistP256;
    var ecDsaKey = ECDsa.Create(curve);
    var subject = new X500DistinguishedName("CN=mycert");
    var request = new CertificateRequest(subject, ecDsaKey, hashAlgorithm);
    var certificate = request.CreateSelfSigned(DateTime.Now - TimeSpan.FromDays(5), DateTime.Now   TimeSpan.FromDays(365));
    return certificate;
}

Раньше я использовал Bouncy Castle для генерации всех трех типов сертификатов, но с переходом на .NET я могу использовать только RSA и ECDsa в вызовах CertificateRequest. Есть ли причины, по которым DSA не включены? Однако я все еще могу сгенерировать ключ с помощью DSA.Create(keySize). Также .NET Framework включает другие классы, которые работают с DSA: DSA, DSACng, DSACryptoServiceProvider, DSACertificateExtensions, но я не вижу ничего для генерации сертификатов. Есть ли проблемы с самим алгоритмом (может вообще не стоит его использовать)? Или мне что-то не хватает в API?

Есть ли проблемы с самим алгоритмом (может вообще не стоит его использовать)?

DSA, не входящая в ЕС, умирает.

Я предполагаю, что на самом деле это было сделано в исходной спецификации (FIPS 186-1), ограничивающей ключи до 1024 бит, а алгоритм – до SHA-1. В 2009 году алгоритм был обновлен в FIPS 186-3 для поддержки ключей немного большего размера и хэшей SHA-2. FIPS 186-1 (и FIPS 186-2) для подписей DSA требуются только данные и закрытый ключ (для проверки требуются только данные, подпись и открытый ключ), для подписей FIPS 186-3 также требуется хэш-алгоритм в качестве входных данных … поэтому API не совсем совместим.

Windows CAPI (более старая из двух криптографических платформ Windows) игнорировала обновление FIPS 186-3, как и Apple Security.framework. И Windows CNG, и OpenSSL поддерживают «новый DSA». Apple не может обрабатывать сертификаты, подписанные «новым DSA» (и, возможно, даже не «классическим DSA», я забыл), а Windows не поддерживает «новый DSA» в цепочках сертификатов, только «DSA classic».

Таким образом, сертификаты DSA обычно ограничиваются ограничениями FIPS 186-1 / 186-2, что означает SHA-1 (в наши дни не на пользу) и 1024-битные ключи (которые по сегодняшним меркам слишком малы). Если вы знаете, что вас проверяет OpenSSL, вы можете использовать более качественные ключи DSA.

DSA также обычно намного медленнее при проверке подписи, чем RSA.

На уровне безопасности 80 бит, используя инструмент скорости OpenSSL на моей случайной виртуальной машине (вывод, слегка измененный для целей презентации, отсортированный по убыванию verify / s):

                                sign    verify    sign/s verify/s
rsa  1024 bits               0.000301s 0.000018s   3326.3  56419.7
dsa  1024 bits               0.000309s 0.000236s   3236.2   4240.5
ecdsa 160 bits (secp160r1)   0.0005s   0.0004s     1984.6   2385.7

112 бит безопасности

                                sign    verify    sign/s verify/s
rsa  2048 bits               0.002030s 0.000062s    492.6  16062.4
ecdsa 224 bits (nistp224)    0.0001s   0.0002s     9020.6   4252.2
dsa  2048 bits               0.000885s 0.000802s   1129.4   1247.3

128 бит безопасности

                                      sign    verify    sign/s verify/s
rsa  3072 bits                     0.006935s 0.000135s    144.2   7401.6
ecdsa 256 bits (nistp256)          0.0001s   0.0002s    16901.5   5344.7
ecdsa 256 bits (brainpoolP256t1)   0.0010s   0.0008s      980.1   1262.5
ecdsa 256 bits (brainpoolP256r1)   0.0010s   0.0008s     1012.9   1209.5
dsa  3072 bits (not in test suite)

192 бит безопасности

                                      sign    verify    sign/s verify/s
rsa  7680 bits                     0.122805s 0.000820s      8.1   1220.2
ecdsa 384 bits (nistp384)          0.0024s   0.0018s      416.1    571.2
ecdsa 384 bits (brainpoolP384t1)   0.0024s   0.0018s      410.0    545.1
ecdsa 384 bits (brainpoolP384r1)   0.0025s   0.0019s      407.4    540.1
dsa  7680 bits (beyond FIPS 186-3 DSA maximum of 3072 bits)

256 бит безопасности

                                      sign    verify    sign/s verify/s
ecdsa 521 bits (nistp521)          0.0006s   0.0012s     1563.1    841.3
ecdsa 512 bits (brainpoolP512t1)   0.0038s   0.0027s      265.2    369.1
ecdsa 512 bits (brainpoolP512r1)   0.0038s   0.0028s      262.4    360.5
rsa 15360 bits                     0.783846s 0.003190s      1.3    313.5
dsa 15360 bits (beyond FIPS 186-3 DSA maximum of 3072 bits)

Я могу использовать только RSA и ECDsa в вызовах CertificateRequest. Есть ли причины, по которым DSA не включены?

Из потока с исходным предложением функций:

На основе новых данных из Windows (и отсутствия поддержки сертификатов DSA FIPS 186-3) я собираюсь извлечь типизированный конструктор DSA и оставить DSA в качестве сценария «опытного пользователя» (настраиваемый класс X509SignatureGenerator и т. д.)

Итак, его удалили в основном потому, что DSA умирает.

Или мне что-то не хватает в API?

API позволяет предоставлять настраиваемые генераторы подписей. В тестах для CertificateRequest он доказывает это с помощью DSAX509SignatureGenerator

X509SignatureGenerator dsaGen = new DSAX509SignatureGenerator(dsaCsp);

// Use SHA-1 because that's all DSACryptoServiceProvider understands.
HashAlgorithmName hashAlgorithm = HashAlgorithmName.SHA1;

CertificateRequest request = new CertificateRequest(
    new X500DistinguishedName($"CN={KeyName}-{provType}"),
    dsaGen.PublicKey,
    hashAlgorithm);

DateTimeOffset now = DateTimeOffset.UtcNow;

using (X509Certificate2 cert = request.Create(request.SubjectName, dsaGen, now, now.AddDays(1), new byte[1]))
using (X509Certificate2 certWithPrivateKey = cert.CopyWithPrivateKey(dsaCsp))
using (DSA dsa = certWithPrivateKey.GetDSAPrivateKey())
{
    byte[] signature = dsa.SignData(Array.Empty<byte>(), hashAlgorithm);

    Assert.True(dsaCsp.VerifyData(Array.Empty<byte>(), signature, hashAlgorithm));
}

(отрывок из https://github.com/dotnet/runtime/blob/4f9ae42d861fcb4be2fcd5d3d55d5f227d30e723/src/libraries/System.Security.Cryptography.X509Certificates/System.Security.Cryptography.X509Certificates/Security.Cryptography.X509Certificates/6tests/ru/

Гостевая статья – цифровые подписи, ecdsa и eddsa

Цифровые подписи

– это криптографический инструмент для

подписи сообщений

и

проверки подписей сообщений

с целью подтверждения

подлинности

цифровых сообщений или электронных документов. Цифровые подписи обеспечивают:

  • Аутентификация сообщения – доказательство того, что определенный известный отправитель (владелец секретного ключа) создал и подписал сообщение.
  • Целостность сообщения – доказательство того, что сообщение не было изменено после подписания.
  • Безотказность – подписавшая сторона не может отрицать подписание документа после того, как подпись однажды создана.

Цифровые подписи

широко используются сегодня в бизнесе и в финансовой индустрии, например для авторизации банковских платежей (перевода денег), для обмена подписанными электронными документами, для подписания транзакций в публичных системах блокчейнов (например, для перевода монет, токенов или других цифровых активов), для подписания цифровых контрактов и во многих других сценариях.

Цифровые подписи

не могут идентифицировать, кто является лицом, созданой подписи. Это может быть решено в сочетании с цифровым сертификатом, который связывает владельца открытого ключа с личностью (человеком, организацией, веб-сайтом или другим). С помощью

цифровых подписей

сообщения связываются с открытыми ключами, а не с цифровыми удостоверениями.

Подписывать сообщения и проверять подписи: как это работает?
Схемы цифровой подписи

обычно используют криптосистему с

открытым ключом

(например, RSA или ECC) и используют

пары открытый / закрытый ключи.

Сообщение подписывается закрытым ключом, а подпись проверяется соответствующим открытым ключом:

Сообщения

подписываются

отправителем с использованием

закрытого ключа

(ключа подписи). Обычно входное сообщение

хэшируется

, а затем

подпись

рассчитывается по алгоритму подписи. Большинство алгоритмов подписи выполняют некоторые вычисления с помощью хэша сообщения ключ подписи таким образом, что результат не может быть вычислен без ключа подписи. Результатом подписания сообщения является

цифровая подпись

(одно или несколько целых чисел):

signMsg(msg, privKey) 🡒 signature

Подписи

сообщений

проверяются

соответствующим открытым ключом

Про сертификаты:  Европейский сертификат психотерапевта (ECP)

(ключом проверки). Обычно подписанное сообщение

хэшируется

, и некоторые вычисления выполняются алгоритмом подписи с использованием хеша сообщения открытый ключ. Результатом подписания является логическое значение (действительная или недействительная подпись):

verifyMsgSignature(msg, signature, pubKey) 🡒 valid / invalid
Подпись сообщения

математически гарантирует, что определенное сообщение было подписано определенным (секретным)

закрытым ключом,

который соответствует определенному (не секретному)

открытому ключу

. После того, как сообщение подписано,

сообщение и подпись не могут быть изменены

, и, таким образом,

аутентификация

и

целостность

сообщения гарантируются. Любой, кто знает

открытый ключ

подписавшего сообщения,

может проверить подпись

. После подписания автор не может отказаться от акта подписания (это известно как

отказ от авторства

).

Большинство схем подписи работают так, как показано на следующей диаграмме:

При

подписании

входное сообщение

хэшируется

(либо отдельно, либо вместе с открытым ключом и другими входными параметрами), затем некоторое

вычисление

(на основе эллиптических кривых, дискретных логарифмов или другого криптографического примитива) вычисляет

цифровую подпись

. Полученное

подписанное сообщение

состоит из исходного сообщения вычисленной подписи.

При

проверке подписи сообщение

для проверки

хэшируется

(либо отдельно, либо вместе с открытым ключом), и выполняются некоторые вычисления между

хешем

сообщения,

цифровой подписью

и открытым

ключом

, и, наконец, сравнение решает, действительна ли подпись или нет ,

Цифровые подписи

отличаются от

КАС

(кодов аутентификации сообщений), поскольку MAC создаются и проверяются одним и тем же секретным ключом с использованием

симметричного алгоритма

, а цифровые подписи создаются ключом подписи и проверяются другим ключом проверки, соответствующим подписи, ключ с использованием

асимметричного алгоритма

. И подписи, и коды КAС обеспечивают аутентификацию и целостность сообщений.

Схемы и алгоритмы цифровой подписи

Большинство криптосистем с открытым ключом, таких как

RSA

и

ECC

, предоставляют безопасные схемы цифровой подписи (алгоритмы подписи). Примерами хорошо известных схем цифровой подписи являются:

DSA, ECDSA, EdDSA, подписи RSA, подписи Эль-Гамаля и подписи Шнорра.

Вышеупомянутые схемы подписи основаны на сложности

DLP

(проблема дискретного логарифма) и

ECDLP

(проблема дискретного логарифма эллиптической кривой) и

являются квантово-разрушаемыми

(достаточно мощные квантовые компьютеры могут вычислить ключ подписи на основе подписи сообщения).

Квантово-безопасные подписи

(такие как

SPHINCS, BLISS и XMSS

) не используются массово из-за большой длины ключа, длинных подписей и более низкой производительности по сравнению с ECDSA и EdDSA.

Наиболее популярные схемы цифровой подписи (по состоянию на ноябрь 2021 г.): подписи

RSA, ECDSA и EdDSA

. Давайте дадим некоторые подробности о них, а также некоторые примеры кода.

Подписи RSA

Криптосистема с открытым ключом

RSA

предоставляет криптографически б

езопасную схему цифровой подписи

(sign verify), основанную на математике модульных возведения в степень и дискретных логарифмах и сложности

задачи целочисленной факторизаци

и (ЗЦФ). Процесс

подписи / проверки RSA

работает следующим образом:

  • Алгоритм подписи RSA вычисляет хеш сообщения, затем шифрует хеш с показателем частного ключа для получения подписи. Полученная подпись представляет собой целое число (хэш зашифрованного сообщения RSA).
  • Алгоритм проверки RSA сначала вычисляет хэш сообщения, затем расшифровываетподпись сообщения с показателем открытого ключа и сравнивает полученный дешифрованный хеш с хешем подписанного сообщения, чтобы убедиться, что подпись действительна.

Подписи RSA являются

детерминированными

(одно и то же сообщение один и тот же закрытый ключ создают одну и ту же подпись). Недетерминированный вариант RSA-подписей легко создать, добавив во входное сообщение несколько случайных байтов перед подписанием.

Подписи RSA

широко используются в современной криптографии, например, для подписания цифровых сертификатов для защиты веб-сайтов. Например (по состоянию на ноябрь 2021 г.) официальный веб-сайт Microsoft использует Sha256RSA для своего цифрового сертификата. Тем не менее, в последнее десятилетие наблюдается тенденция перехода от RSA и DSA

к подписям на основе эллиптических кривых

(например, ECDSA и EdDSA). Современные криптографы и разработчики

предпочитают подписи ECC

за их более короткую длину ключа, более короткую подпись, более высокий уровень безопасности (при той же длине ключа) и лучшую производительность.

DSA (алгоритм цифровой подписи)

DSA (алгоритм цифровой подписи) – это криптографически безопасный стандарт для

цифровых подписей

(подписывание сообщений и проверка подписи), основанный на математике

модульных возведений

в степень и дискретных логарифмов и сложности проблемы дискретного логарифма (DLP). Это альтернатива RSA и используется вместо RSA из-за ограничений патентов с RSA (до сентября 2000 года).

DSA

является вариантом схемы подписи Эль-Гамаля.

Процесс подписи / проверки DSA

работает следующим образом:

  • Алгоритм подписи DSA вычисляет хеш сообщения, затем генерирует случайное целое число k и вычисляет подпись (пара целых чисел {r, s}), где r вычисляется из k, а s вычисляется с использованием хеша сообщения показатель частного ключа случайное число k. Из-за случайности подпись недетерминирована.
  • Алгоритм проверки подписи DSA включает вычисления, основанные на хэше сообщения показатель открытого ключа подпись {r, s}.

Случайное

значение k

(генерируемое при вычислении подписи) открывает потенциальную уязвимость: если два разных сообщения подписаны с использованием одного и того же значения

k

и одного и того же

закрытого ключа

, то злоумышленник может вычислить закрытый ключ подписавшего напрямую (см.

tintinweb/ecdsa-private-key-recovery

).

Вариант

детерминированного DSA

определен в

RFC 6979

, который вычисляет случайное число

k

как

HMAC

из личного ключа, хэша сообщения и нескольких других параметров.

Детерминированный DSAсчитается более безопасным.

В современной криптографии подписи

на основе эллиптических кривых

(например, ECDSA и EdDSA) предпочтительнее DSA из-за более короткой длины ключа, более короткой длины подписи, более высокого уровня безопасности (для той же длины ключа) и лучшей производительности.

ECDSA (алгоритм цифровой подписи эллиптической кривой)

ECDSA (алгоритм цифровой подписи эллиптической кривой) представляет собой криптографически безопасную схему

цифровой подписи

, основанную на криптографии с эллиптической кривой (ECC).

ECDSA

опирается на математику циклических групп эллиптических кривых над конечными полями и сложность задачи ECDLP (задача дискретного логарифма эллиптической кривой).

ECDSA

– это адаптация классического алгоритма

DSA

, который основан на схеме подпись Эль-Гамаля. Точнее, алгоритм ECDSA представляет собой вариант

подпись Эль-Гамаля

с некоторыми изменениями и оптимизациями для обработки представления элементов группы (точек эллиптической кривой). Как и любой другой криптоалгоритм эллиптической кривой, ECDSA использует

эллиптическую кривую

(например, secp256k1),

закрытый ключ

(случайное целое число в пределах длины ключа кривой – для подписи сообщений) и открытый ключ (точка EC, вычисляемая из закрытого ключа путем умножения его на точка генератора кривой – для проверки подписей).

Процесс подписи / проверки ECDSA

работает следующим образом:

  • Алгоритм подписания ECDSA вычисляет хэш сообщения, затем генерирует случайное целое число k и вычисляет подпись (пара целых чисел {r, s}), где r вычисляется из k, а s вычисляется с использованием хеша сообщения закрытый ключ случайное число k . Из-за случайности подпись недетерминирована.
  • Алгоритм проверки подписи ECDSA включает вычисления, основанные на хэше сообщения открытый ключ подпись {r, s}.

Случайное значение k

(генерируемое при вычислении подписи) открывает потенциальную уязвимость: если два разных сообщения подписаны с использованием одного и того же значения

k

и одного и того же з

акрытого ключа

, то злоумышленник может вычислить закрытый ключ подписавшего напрямую (см.

tintinweb/ecdsa-private-key-recovery

).

Вариант

детерминированного ECDSA

определен в

RFC 6979

, который вычисляет случайное число

k

как

HMAC

из закрытого ключа хеш сообщения несколько других параметров.

Детерминированный ECDSA считается более безопасным.
Подписи ECDSA

являются наиболее широко используемым алгоритмом подписи, который используется миллионами каждый день (по состоянию на ноябрь 2021 года). Например, цифровые сертификаты на веб-сайтах Amazon подписываются схемой подписи Sha256ECDSA

Про сертификаты:  ФЗ об осуществлении судебных исков, передаче конфискованных объектов и аукционе имущества, принадлежащего заемщику

EdDSA (алгоритм цифровой подписи Эдвардса)
EdDSA

(алгоритм цифровой подписи кривой Эдвардса) – это быстрый алгоритм

цифровой подписи

, использующий

эллиптические кривые в форме Эдвард

са (например,

Ed25519

и

Ed448-Goldilocks

), детерминированный вариант схемы п

одписи Шнорра

, разработанный командой известного криптографа.

Даниэль Бернштейн.
EdDSA

является более

простым

, чем

ECDSA

, более

безопасным

, чем

ECDSA

, и предназначен для работы

быстрее

, чем

ECDSA

(для кривых с сопоставимой длиной ключа). Как и

ECDSA

, схема подписей

EdDSA

основывается на

сложности задачи ECDLP

(проблема дискретного логарифма с эллиптической кривой) в плане надежности.

Алгоритм подписи EdDSA

работает с эллиптическими кривыми Эдвардса, такими как

Curve25519

и

Curve448

, которые высоко

оптимизированы

для производительности и

безопасности

. Показано, что подписи

Ed25519

обычно

быстрее

, чем традиционные

подписи ECDSA

по кривым с сопоставимой длиной ключа. Тем не менее, конкурс производительности является спорным. Процесс

подписи / проверки EdDSA

работает следующим образом:

  • Алгоритм подписи EdDSA генерирует детерминированное (не случайное) целое число r (вычисляется путем хеширования сообщения и хэша секретного ключа), а затем вычисляет подпись {Rs, s}, где Rs вычисляется из r, а s вычисляется из хеш (сообщение открытый ключ, полученный из частного число r) закрытый ключ. Подпись является детерминированной (одно и то же сообщение, подписанное одним и тем же ключом, всегда дает одну и ту же подпись).
  • Алгоритм проверки подписи EdDSA включает вычисления эллиптической кривой на основе сообщения (хешированного вместе с открытым ключом и точкой EC Rs из подписи) открытый ключ число s из подписи {Rs, s}.

По своей сути подписи

EdDSA

являются

детерминированными

(что повышает их безопасность). Недетерминированный вариант EdDSA-подписей легко создать, добавив во входное сообщение несколько случайных байтов перед подписанием.

Краткое сравнение между подписей

EdDSA Ed25519

и

ECDSA secp256k

приведено ниже:

Современные разработчики часто используют

подписи Ed25519

вместо 25

6-битных кривых ECDSA

, потому что схема подписи EdDSA-Ed25519 использует ключи, которые умещаются в 32 байта (64 шестнадцатеричных цифры), подписи умещаются в 64 байта (128 шестнадцатеричных цифр), подпись и проверка быстрее и безопасность считается лучше.

Публичные

цепочки блоков

(например, Биткойн и Эфириум) часто используют подписи

ECDSA

на основе

secp2561

, поскольку открытый ключ подписчика (и его адрес цепочки блоков) можно легко восстановить из подписи (вместе с подписанным сообщением), добавив в подпись всего 1 дополнительный бит ,

В общем случае, считается, что

подписиEdDSA рекомендуется ECDSA

, но это весьма спорно и зависит от случая использования, на кривых, участвующих и многих других параметров.

Другие схемы подписи и алгоритмы

Большинство алгоритмов подписи основаны на общих схемах подписи, таких как

подписи Эль-Гамаля и подписи Шнорра.

  • Подпись RSA получена из схемы шифрования RSA.
  • DSA и ECDSA основаны на схеме подписи ElGamal.
  • EdDSA является производной от схемы подписи Шнорра.

Другие

схемы подписи

включают в себя:

  • ECGDSA: схема цифровой подписи с эллиптической кривой (основанная на сложности проблемы ECDLP), слегка упрощенный вариант ECDSA, известный как немецкая версия ECDSA.
  • ECKDSA: схема цифровой подписи с эллиптической кривой (основанная на сложности проблемы ECDLP), сложный вариант ECDSA, известный как корейская версия ECDSA. ECKDSA подписывает данное сообщение с помощью закрытого ключа EC вместе с хешем цифрового сертификата подписавшего. Это добавляет идентичность к цифровой подписи, в дополнение к аутентификации сообщения, целостности и невозможности отказа.
  • Подпись SM2: схема цифровой подписи с эллиптической кривой (основанная на сложности задачи ECDLP), известная как китайский алгоритм цифровой подписи, разработанный Китайской академией наук.
  • ГОСТ Р 34.10-2001: схема цифровой подписи с эллиптической кривой (основанная на сложности задачи ECDLP), известная как российский алгоритм цифровой подписи, один из российских стандартных алгоритмов криптографии (называемых алгоритмами ГОСТ).

После краткого обзора самых популярных алгоритмов цифровой подписи давайте познакомимся с техническими подробностями о алгоритмах

подписи RSA, ECDSA и EdDSA

с примерами кода.

Источник

Как добавить корневой сертификат в доверенные в linux на уровне системы

Сертификат с расширением .crt можно открыть двойным кликом и просмотреть его содержимое:

Если вы работаете в системе от обычного пользователя (не root), то кнопка «Импортировать» будет недоступна.


Чтобы разблокировать кнопку «Импортировать», выполните следующую команду:

sudo gcr-viewer /ПУТЬ/ДО/СЕРТИФИКАТА.crt

Например:

sudo gcr-viewer ./HackWareCA.crt

Данный способ может не сработать, поэтому рассмотрим, как добавить доверенные корневые центры сертификации в командной строке.


Суть метода очень проста:

  1. Добавить свой корневой CA сертификат в папку, предназначенную для таких сертификатов.
  2. Запустить программу для обновления общесистемного списка сертификатов.

Пути и команды в разных дистрибутивах Linux чуть различаются.

Просмотреть Subject всех корневых CA сертификатов можно уже знакомой командой:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt


Для демонстрации я добавлю сертификат с Common Name, включающим «HackWare», тогда для проверки, имеется ли сертификат с таким именем среди корневых CA, я могу использовать команду:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWare

Для добавления своего корневого CA в доверенные в Debian, Kali Linux, Linux Mint, Ubuntu и их производных:

1. Проверьте, существует ли директория /usr/local/share/ca-certificates:

ls -l /usr/local/share/ca-certificates


Если её ещё нет, то создайте:

sudo mkdir /usr/local/share/ca-certificates

Сертификат должен быть в формате PEM (обычно так и есть) и иметь расширение .crt — если расширение вашего сертификата .pem, то достаточно просто поменять на .crt.

2. Скопируйте ваш сертификат командой вида:

sudo cp СЕРТИФИКАТ.crt /usr/local/share/ca-certificates/

Например:

sudo cp ./HackWareCA.crt /usr/local/share/ca-certificates/

3. Запустите следующую команду для обновления общесистемного списка:

sudo update-ca-certificates


Пример вывода:

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:HackWareCA.pem
done.
done.

Проверим наличие нашего CA сертификата среди доверенных:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep -i HackWare

Сертификат успешно найден:

Чтобы его удалить:

sudo rm /usr/local/share/ca-certificates/СЕРТИФИКАТ.crt
sudo update-ca-certificates


Для добавления своего корневого CA в доверенные в Arch Linux, BlackArch и их производных:

1. Выполните команду вида:

sudo cp ./СЕРТИФИКАТ.crt /etc/ca-certificates/trust-source/anchors/

Например:

sudo cp ./HackWareCA.crt /etc/ca-certificates/trust-source/anchors/

2. Обновите общесистемный список доверенных CA:

sudo update-ca-trust


Чтобы удалить этот сертификат:

sudo rm /etc/ca-certificates/trust-source/anchors/СЕРТИФИКАТ.crt
sudo update-ca-trust

Добавление сертификатов в базу данных NSS

Некоторые приложения используют базу данных NSS, и у вас может быть необходимость добавить доверенные CA в неё.


Последующие изменения повлияют только на приложения, использующие базу данных NSS и учитывающие файл /etc/pki/nssdb.

1. Сначала создайте структуру каталогов для системных файлов базы данных NSS:

sudo mkdir -p /etc/pki/nssdb

Затем создайте новый набор файлов базы данных. Пароль нужен для того, чтобы базу данных могли редактировать только люди, которые его знают. Если все пользователи в системе (и с доступом к резервным копиям) заслуживают доверия, этот пароль можно оставить пустым.

sudo certutil -d sql:/etc/pki/nssdb -N

2. Убедитесь, что файлы базы данных доступны для чтения всем:

sudo chmod go r /etc/pki/nssdb/*

3. Теперь, когда доступны файлы базы данных NSS, добавьте сертификат в хранилище следующим образом:

sudo certutil -d sql:/etc/pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"


Например:

sudo certutil -d sql:/etc/pki/nssdb -A -i ./HackWareCA.crt -n "HackWare CA" -t "C,,"

Биты доверия, используемые в приведённом выше примере, помечают сертификат как надёжный для подписи сертификатов, используемых для связи SSL/TLS. Имя (указывается после опции -n), используемое в команде, можно выбрать любое, но убедитесь, что его легко отличить от других сертификатов в магазине.

Про сертификаты:  Сертификаты качества ISO — получить в Щекине под ключ по низкой цене

Для проверки:

certutil -L -d /etc/pki/nssdb

Аналогичные инструкции можно использовать для включения сертификата только в базу данных NSS конкретного пользователя:

certutil -d sql:$HOME/.pki/nssdb -A -i ФАЙЛ-СЕРТИФИКАТА.crt -n "ИМЯ-СЕРТИФИКАТА" -t "C,,"


Удаление из файлов базы данных NSS

Чтобы удалить сертификат из любой базы данных NSS, используйте команду certutil следующим образом. В этом примере используется общесистемное расположение базы данных NSS, но его можно легко изменить на пользовательское ~/.pki/nssdb местоположение.

sudo certutil -d sql:/etc/pki/nssdb -D -n "certificateName"

Симметричная или асимметричная криптография?

Однозначного ответа на вопрос о том, какие алгоритмы – симметричные или асимметричные – предпочтительнее, конечно же, нет. Основным достоинством симметричной криптографии является высокая скорость обработки данных. Проблемы криптосистем с закрытым ключом обсуждались подробно в лекции 8. Попробуем теперь оценить особенности алгоритмов шифрования с открытым ключом.

Главным достоинством асимметричной криптографии является отсутствие необходимости в предварительном доверенном обмене ключевыми элементами при организации секретного обмена сообщениями. К основным недостаткам асимметричных криптосистем, мешающим им вытеснить симметричные методы шифрования, относят следующие.

  1. Алгоритмы с открытым ключом работают намного (в сотни раз) медленнее классических алгоритмов с закрытым ключом. Это их самый главный недостаток. Связан он с тем, что основной операцией в системах с открытым ключом является возведение в степень по большому модулю 500-1000 битовых чисел, что при программной реализации производится намного медленнее, чем шифрование того же объема данных классическими способами.
  2. Алгоритмы с открытым ключом требуют обеспечения достоверности открытых ключей, что порой превращается в довольно сложную задачу. То же самое относится и к протоколам цифровой подписи. Для управления открытыми ключами используют специальную инфраструктуру открытых ключей, обеспечивающую функции управления открытыми ключами.
  3. Алгоритмы с открытым ключом чувствительны к атакам по выбранному открытому тексту.

Таким образом, с практической точки зрения системы с открытым ключом и асимметричным шифрованием целесообразно использовать лишь для распределения секретных ключей и организации цифровых подписей, так как для решения этих задач не требуется шифрования больших блоков данных.

Использование асимметричных алгоритмов позволяет создавать сеансовые ключи шифрования, которые удаляются после окончания сеанса связи. Это значительно снижает риск вскрытия зашифрованных сообщений, так как, если каждое передаваемое сообщение шифруется уникальным сеансовым ключом, задача взломщика существенно усложняется.

  1. Пользователь А генерирует случайный сеансовый ключК и зашифровывает им с помощью симметричного алгоритмаFсим свое сообщение M:
  2. Пользователь А получает из базы данных открытый ключ U пользователя Б и зашифровывает им сеансовый ключК:
  3. Пользователь А посылает своему абоненту зашифрованное сообщение и зашифрованный сеансовый ключCk. Для защиты от вскрытия “человек-в-середине” передаваемые данные могут быть дополнены цифровой подписью.
  4. Пользователь Б расшифровывает полученный сеансовый ключCk с помощью своего закрытого ключа R:
  5. Пользователь Б расшифровывает сообщение с помощью сеансового ключа К:

Такая криптографическая система называется смешанной, так как в ней используется и асимметричное, и симметричное шифрование. Смешанные криптосистемы широко применяются на практике: в банковских и платежных сетях передачи данных, в мобильной связи, в системах электронной почты и др.

Для лучшего обеспечения безопасности они могут быть дополнены цифровыми подписями пользователей и удостоверяющего центра, метками времени. Цифровая подпись в сочетании с открытым распределением ключей позволяют организовывать защищенный обмен электронными документами.

Симметричное шифрование файлов в openssl

Данный вид шифрования выполняется командой enc. Кстати она также задействуется при создании ключей, если выбрано их шифрование — это шифрование выполняется с помощью enc.

Для шифрования используется команда следующего вида:

openssl enc -ШИФР -in ДЛЯ-ШИФРОВАНИЯ -out ЗАШИФРОВАНЫЕ-ДАННЫЕ

Для расшифровки похожая команда, но с опцией -d, также ЗАШИФРОВАНЫЕ-ДАННЫЕ теперь являются входными, а на выходе РАСШИФРОВАННЫЕ-ДАННЫЕ:

openssl enc -ШИФР -d -in ЗАШИФРОВАНЫЕ-ДАННЫЕ -out РАСШИФРОВАННЫЕ-ДАННЫЕ


В качестве ШИФРА рекомендуют aes-256-cbc, а полный список шифров вы можете посмотреть командой:

openssl enc -list

Ещё настоятельно рекомендуется использовать опцию -iter ЧИСЛО. Она использует указанное ЧИСЛО итераций для пароля при получении ключа шифрования. Высокие значения увеличивают время, необходимое для взлома пароля брут-форсом зашифрованного файла.

Эта опция включает использование алгоритма PBKDF2 для получения ключа. Указывать можно высокие значения — десятки и сотни тысяч. В разделе «Как создать базу данных KeePass» при создании базы данных используется такой же алгоритм (первая версия), там для 1 секундной задержки я выставлял значение в 25 миллионов инераций.

Пример шифрования файла art.txt шифром aes-256-cbc, зашифрованные данные будут помещены в файл с именем art.txt.enc, при получении ключа шифрования используется десять миллионов итераций (на моём железе выполнение команды заняло несколько секунд):

openssl enc -aes-256-cbc -in art.txt -out art.txt.enc -iter 10000000

Введите, а затем подтвердите пароль для шифрования:

В результате будет создан зашифрованный файл art.txt.enc.


Для расшифровки файла art.txt.enc и сохранения данных в файл art-new.txt:

openssl enc -aes-256-cbc -d -in art.txt.enc -out art-new.txt -iter 10000000

Если файл успешно расшифрован, то не будет выведена никакая дополнительная информация.

В случае неудачной расшифровки будет показано примерно следующее:

bad decrypt
140381536523584:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:583:

Возможные причины ошибки:

  • неверный пароль
  • неверный алгоритм для расшифровки
  • неправильно указано количество итераций с опцией -iter
  • неверно указан файл для расшифровки

Обратите внимание, что для расшифровки также нужно указать опцию -iter с тем же самым значением, которое было указано при шифровании. Конечно, можно не использовать опцию -iter при шифровании (а, следовательно, и при расшифровке), но в этом случае шифрование считается ненадёжным!

Не рекомендуется пропускать опцию. Если у вас слабое железо ИЛИ если файл будет расшифровываться на слабом железе, то вам необязательно использовать такие большие значения -iter — укажите хотя бы десятки или сотни тысяч (например, полмиллиона).

Предыдущие команды для шифрования и расшифровки могут запускаться чуть иначе:

openssl ШИФР


Например:

openssl aes-256-cbc -in art.txt -out art.txt.enc -iter 10000000

То есть пропускается слово enc, и перед шифром убирается дефис. Обе команды равнозначны.

Зашифрованный файл представляет собой бинарные данные, которые не получится передать, например, в текстовом сообщении (в чате). Используя опцию -a (или её псевдоним -base64), можно закодировать зашифрованные данные в кодировку Base64:

openssl enc -aes-256-cbc -in art.txt -out art.txt.b64 -iter 10000000 -a


Содержимое полученного файла art.txt.b64 можно открыть любым текстовым редактором и переслать в мессенджере или в чате.

Для расшифровки также нужно указать опцию -a:

openssl enc -aes-256-cbc -d -in art.txt.b64 -out art-new.txt -iter 10000000 -a

Чтобы просто закодировать бинарный файл в кодировку base64:

openssl enc -base64 -in file.bin -out file.b64


Чтобы раскодировать этот файл:

openssl enc -base64 -d -in file.b64 -out file.bin

Чтобы зашифровать файл используя указанный ПАРОЛЬ в команде (не интерактивный режим):

openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt -pass pass:ПАРОЛЬ

Зашифровать файл, затем закодировать его с помощью base64 (например, его можно отправить по почте), используя AES-256 в режиме CTR и с получением производной ключа PBKDF2:

openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256


Декодировать файл из Base64 , затем расшифровывать его, используя пароль, указанный в файле:

openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt -pass file:<ФАЙЛ-С-ПАРОЛЕМ>

Оцените статью
Мой сертификат
Добавить комментарий