Эцп сертификат алгоритм

Секретный ключ

Главный компонент всего — криптография, точнее криптографические алгоритмы.

[[email protected]]$ openssl genrsa 2048Generating RSA private key, 2048 bit long modulus..........................................   ......................   e is 65537 (0x10001)-----BEGIN RSA PRIVATE KEY-----MIIEowIBAAKCAQEAtqYUwQ3QwKf8l9St1IK2jNyZiL7PDVKdaWo8BoY0a7zZLySTa5lS09k0Jcdsh3pV0X9PkNb1x m4YGETjNfZUsd2O1/IwP1Fj w3y75cy/ON4/so6oxrUrIYwCbu9i2IxvevQJpClmn105QbIF4d Pp5pMSfivngNl/BGLm4O5uyqhfnLaouOCOroY9b77vNVHBkbq eQjZBwvIFz1DzVfGVXsS1oCt36nTI38txHGTaCqgicxznqj7GBiaJi1b7jCvWLUoZi64AGCK4gWFkijNLuDsnR4h0WUJ90wge9Xt srii/iElvo2P1U9feL1znj4PZumZNJ3BzYU3qNWJ8wIDAQABAoIBAQCzb3X0Mx5iJqaAgvBDVicBO7eaH9pJvF/or/VIc5AMR/sV1Vj 3CIC/d 9Pa3has3kgq4oHQZY38PC65vJQkS jjYZHoCbGDa rdIi12FS/HLpBlWsF0dYdp7aJ2WbdCBrV lUDjhcjLx0n4wGwG xqmDW/lO tL0QrgGFyO61nxdEsltgvjlGFhUu4ugskwOvL3QoWv4SghHm6oIyDhlGo3W6WpGV Xt3/IR5bWFF0bn5bt9arHDiow1Vg0MeBxB iuMYuctlXHaJO5UMs/BgqidV2m4wjoQxWg41tdeKEWmetWOm7LVZinmC7EIugug7xKrGVGAAexajfENVOxgBAoGBAN/9sB9BSZsA C9DYtbKHTEO5IY nBYGzxigyj8JlqwsibpN9dyZZXML/UvgspYbKS8nafip/GQpdxIPeAhqKJSI3dVeml6MxKTwJj7HCr 0iuXg5m9dAwLBLxHi 6hEN7TJb7JONB07QB9y78eAk94y9q4exAYh3Pnzn1lZR9JJAoGBANC/9iiMFagQrvCkcKCRiQr1cD6J2FdyXl0jMAK250ZQ3Kxg5vmpFVhk3EYR /5tb5S0QeG7VqumXONTPnAzt6IHRHQyUzaLuy99zIOekKzlVGPOKbJGJQsKuRXc8nRnDN8Yfl7C8kPHwahQqiJL3Sa6fvTVINdxkFa VvRhX3pbAoGAVHlMTr1EkRyQfOKhB/g5giLntGkwXG489EDPhW6MUGqLlqOIMaX4SKcg49jeARZFNe9bW9hfwzaQHVOQJTxECaCEaM/A0B umbWn9s0CFMJ2D7P9s8oUNJm srQzzIXNrHS7lzc/GDccO8ARBeBL4 S8e3ZG3zkuKWXjlsLA/2ECgYB7XrfQRtoVtaZuOgEGJHzlqSBpFXZyV/lE iLJt b/O5LvnWVkb3VaBGHaV46iU3L6Y338NoeGco 7Gdtw3F/OtpTSR1u hN5ftu1DbFb8l5xET/d8kNAbsn6oWShBexW0U/l7b6NWQ5xEKUgjdMqCtP2LHNqH WngmiUx0MpouQKBgAkW/zgeXt5BiexQ9QLHOkpZQNdT48WTKOFDxM5b7R87E7rG6Phyx01WtVEs5BJ9a1DizingvL2TAMglP0t5WETmkNEwIDfH8ey2KZBsfrB9Mb9BsV4xZP783sM6yJXbWTOMfUXByxWKdxNx9EFjes0WP0rhFgPQGCBvTZjxtAkj-----END RSA PRIVATE KEY-----
[[email protected]]$ openssl genrsa -out private.pem 2048Generating RSA private key, 2048 bit long modulus..................................................................................................   ......................................................   e is 65537 (0x10001)

С подобным форматом представления криптографических данных вам предстоит сталкиваться постоянно, называется он PEM, что расшифровывается как Privacy-enhanced Electronic Mail. Его предназначение — кодировать бинарные криптографические данные в виде ASCII-текста. И фактически между маркерами из минусов находятся закодированные в base64 бинарные данные, в данном случае — секретный ключ.

[[email protected]]$ openssl rsa -inform PEM -outform DER -in private.pem -out private.der
writing RSA key

Имя формата данных DER расшифровывается как Distinguished Encoding Rules и является частью стандарта ASN.1. В стандарте ASN.1 описываются правила и структуры для кодирования, раскодирования и передачи данных по телекоммуникационным и компьютерным сетям. По сути можно считать ASN.1 форматом для сериализации структурированных бинарных данных. Существует специальный компилятор, который из формальных спецификаций ASN.1 генерирует C-код для работы с бинарными данными такой структуры.

Также существует консольная программа dumpasn1 для просмотра бинарных данных, в дебиане/убунте она ставится через sudo apt-get install dumpasn1, для макоси можно поставить через macports, через homebrew (инструкция), либо скомпилировать самостоятельно из исходников.

[[email protected]]$ dumpasn1 private.der
   0 1186: SEQUENCE {   4    1:   INTEGER 0   7  257:   INTEGER         :     00 CB F8 C1 9B 6E 29 63 39 3C 24 9B 2D A3 7D 00         :     B0 B8 5C E8 D6 96 5D E4 76 67 7F 04 8F 48 D4 F4         :     35 64 68 57 10 3D 38 CE A0 B5 DC B2 FC DD 34 FF         :     2B AC 48 EE D1 05 37 65 4A 2F AE 8A E0 F8 1D CE         :     63 EB 2E C6 7A 09 4B B1 85 71 1E FA FF 55 17 0C         :     05 23 71 87 43 21 66 C4 70 6D E8 A8 B4 74 EA E4         :     C1 75 7B AB 33 5B 8B 8D DB D4 67 BA DC B4 AD 50         :     12 AB FB 3E 74 44 AC 48 BE 94 C2 DD 4D 16 D6 0F         :             [ Another 129 bytes skipped ] 268    3:   INTEGER 65537 273  256:   INTEGER         :     07 01 7D 4C E4 64 C1 86 B6 BD 1F 23 5B 29 30 FB         :     E0 E9 38 0A 1E D2 0C C5 D0 5A 39 82 DE 62 8A 1C         :     C7 5D 1A 18 71 B1 E0 CE FE 50 1D 49 B8 23 58 DC         :     5C 27 89 24 5E C4 7F 53 23 FE 1F C1 08 64 A5 B1         :     22 E3 D1 67 61 A8 5A E9 95 70 15 F8 ED 28 44 7E         :     6C B0 3A 90 20 B6 91 EA B6 AB B6 17 B4 A8 58 C1         :     18 52 EE 17 6E 7E 85 99 D6 5A D5 BD 3C EB 73 03         :     A1 2A 99 03 8F 54 47 8F 5C 36 B1 39 33 9E 98 9D         :             [ Another 128 bytes skipped ] 533  129:   INTEGER         :     00 E7 D9 F7 E8 B2 FC A4 07 93 29 B8 60 75 02 80         :     10 EE C0 00 CF DA D8 C4 8C D0 B9 44 87 B9 ED 15         :     3D 60 17 1E 70 1E A0 E6 31 CA 2D CB D7 2B 05 1C         :     FF 3F 21 57 44 87 47 92 90 11 8E 7C 1D D5 57 C5         :     FC 9B 3D 22 E2 A0 E9 5E 4E 38 B7 E8 BC B0 AC 61         :     AB 84 C6 19 C4 2C E6 64 0A 57 54 03 D6 2A EE CD         :     21 A1 FD BE AD B3 9B E7 2B C1 BF 37 80 84 18 A3         :     1E D0 CF 44 12 AA B6 3A 05 3B B0 5F DF 32 B2 AE         :     71 665  129:   INTEGER         :     00 E1 37 68 C5 C0 92 F7 0F 2E 99 C0 74 13 04 79         :     DD A7 EF 56 46 A2 C9 A7 96 41 5E 4A 43 F3 57 7E         :     3E 98 0D C6 B1 AF 85 F6 29 B9 F0 2A D2 54 8C CE         :     C8 DB FA 67 2E 5E 56 AB CC 7B E4 F1 3B EC 55 EE         :     10 0E B1 6F 76 A8 59 5B 2B B2 FF E2 E8 9A E5 9B         :     F1 90 D1 65 DC 6D AD DB B3 B5 EC 39 8C 20 88 1F         :     CA 87 E6 5A 6C 92 B1 75 F5 15 2E B1 41 0C AA 88         :     75 88 77 E9 B2 F4 8D B6 16 E2 13 5F EF 89 20 40         :     E5 797  128:   INTEGER         :     27 3A D1 60 B5 50 5C 2C CF F0 C2 3A C7 F1 A9 5B         :     B4 1A 16 C9 14 BD 92 DC 44 C0 E4 60 96 CC 0F C8         :     F7 C6 51 A7 24 F7 92 9B A0 1B 09 9F 99 AE DE CE         :     2D 8F 65 A5 B9 C2 19 81 79 07 03 E7 44 5E FA A8         :     18 58 4A DB CF E0 4C CD AD 79 28 CF 2C 91 AE 61         :     08 31 40 D0 D9 CC 0D E7 56 09 68 30 C7 C8 EA 3A         :     A3 9F 3C B1 45 6F BE B8 BF AA AC 28 79 B1 75 80         :     54 52 8D B1 1E E3 80 83 BC 2A C6 BE 0C 65 01 71 928  128:   INTEGER         :     14 BC 57 47 2D CD DA 35 69 A2 FA 57 35 91 09 EF         :     60 90 E6 AE A6 3A 4E D5 C4 BA FB B7 79 E6 2A 57         :     75 04 7F B0 C8 6A 5B 19 C8 66 D6 6A 7B 22 63 BF         :     96 91 5D 82 A5 68 F1 74 68 4B D1 F2 24 76 5C EE         :     D9 8B 78 A9 C2 22 48 04 A3 FC 6F 55 DF 3D 18 B8         :     8B 0E DC 84 09 0D 22 D7 4E FE AA E5 BD F1 0A 8C         :     49 2A EA 54 68 C5 32 09 18 A4 2D E9 C1 52 CA 31         :     98 19 02 49 59 BE DA 6F 0C ED 9F BD 9C 30 7E 091059  128:   INTEGER         :     75 97 A2 6D 60 94 68 EF AB B4 3A 63 10 21 B8 AA         :     2B 98 13 9C 0E 58 B2 FF 29 13 AB 38 18 0E FE DF         :     C2 7D 08 46 0F D9 70 0C EA AC 86 57 C5 A3 0E EF         :     31 C7 7A 13 8D 9B F6 5A 60 C5 1B 1C 0F C3 C3 D3         :     C7 90 5A E2 1E A1 F0 91 CA E4 6D 6D 89 64 ED 63         :     C8 D2 F1 8E A4 D4 56 6A 99 17 38 A6 2A 3B 35 D1         :     92 2E 35 01 5C BF 85 31 25 F3 11 6F 73 7D F1 63         :     99 D6 9A AC D1 B1 80 17 E7 50 2C 3A AB 88 86 58         :   }0 warnings, 0 errors.

В нашем файле секретного ключа «упакованы» девять целых чисел, структура ключа для алгоритма RSA весьма простая и описана, например, в RFC 3447, в секции A.1.2 RSA private key syntax.

[[email protected]]$ openssl rsa -inform DER -outform DER -in private.der -pubout -out public.der
writing RSA key
[[email protected]]$ dumpasn1 public.der
  0 290: SEQUENCE {  4  13:   SEQUENCE {  6   9:     OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1) 17   0:     NULL       :     } 19 271:   BIT STRING, encapsulates { 24 266:     SEQUENCE { 28 257:       INTEGER       :         00 CB F8 C1 9B 6E 29 63 39 3C 24 9B 2D A3 7D 00       :         B0 B8 5C E8 D6 96 5D E4 76 67 7F 04 8F 48 D4 F4       :         35 64 68 57 10 3D 38 CE A0 B5 DC B2 FC DD 34 FF       :         2B AC 48 EE D1 05 37 65 4A 2F AE 8A E0 F8 1D CE       :         63 EB 2E C6 7A 09 4B B1 85 71 1E FA FF 55 17 0C       :         05 23 71 87 43 21 66 C4 70 6D E8 A8 B4 74 EA E4       :         C1 75 7B AB 33 5B 8B 8D DB D4 67 BA DC B4 AD 50       :         12 AB FB 3E 74 44 AC 48 BE 94 C2 DD 4D 16 D6 0F       :                 [ Another 129 bytes skipped ]289   3:       INTEGER 65537       :       }       :     }       :   }

Структура публичного ключа также описана в RFC3447, в секции A.1.1, если вы туда посмотрите, то увидите, что дамп файла public.der не соответствует этому описанию. Поздравляю с первыми граблями в openssl, с ними вам тоже придётся сталкиваться постоянно. В данном случае зачем-то добавляется заголовок, указывающий, что дальше будет RSA, и на этом заголовке многим библиотекам срывает крышу.

Читайте также:  Портал государственных закупок | Электронное правительство Республики Казахстан

Вариант 2. Установка корневого сертификата удостоверяющего центра

Для установки сертификата вторым методом:

  1. Запускаем программу «КриптоПро CSP», идем на закладку «Сервис» и ищем клавишу «Просмотреть сертификат в контейнере».
  1. Далее — «Обзор», выбираем нужный сертификат клавишей «Ок».
  1. В следующем окошке выбираем «Далее», ничего не меняя.
  2. Жмем клавишу «Свойства».
  1. Выбираем «Установить сертификат».
  1. Переводим переключатель в ячейку «Автоматически выбрать хранилище на основе типа сертификата» и жмем «Далее».

Как установить сертификат ЭЦП на компьютер?

«Готово». Установку мы выполнили успешно.

Удостоверяющий центр может выдать сертификат, в котором в поле X509v3 Basic Constraints разрешается его использование как удостоверяющего. Этим сертификатом тоже можно подписывать «доменные» сертификаты. Таким образом, все CA-сертификаты образуют цепочку, а в целом — дерево. В вершине этого дерева находится Самый Главный Сертификат, он называется корневым сертификатом (по-английски root certificate).

Система доверия PKI строится таким образом, что доверенным CA-сертификатом является тот, который подписан другим доверенным корневым CA-сертификатом. Вебсайт может вместе со своим сертификатом отдать браузеру также и CA-сертификат, которым он был подписан. И если этот CA-сертификат подписан кем-то из доверенных удостоверяющих центров, он автоматически становится доверенным.

Естественно, центры авторизации не выписывают CA-сертификаты кому попало, но крупная организация может этого добиться, например, у Google есть свой CA-сертификат.

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

Корневой сертификат является самоподписанным, то есть он подписан тем же самым ключом, публичный ключ для которого находится в теле сертификата. У корневого сертификата совпадают поля issuer и subject.

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

Читайте также:  Сертификат открытого ключа - это... Что такое Сертификат открытого ключа?

Цепочки удостоверяющих сертификатов

Эцп сертификат алгоритм

Иногда возникает необходимость проверить, подписан ли один сертификат другим. Это можно сделать через openssl.

Возьмём три сертификата из Go Daddy, вот они: GD_root.pem (это корневой сертификат Go Daddy), GD_good.pem, GD_bad.pem. Нам нужно проверить, подписаны ли сертификаты GD_good.pem и GD_bad.pem корневым сертификатом Go Daddy.

https://www.youtube.com/watch?v=wff0VDWy_Q4

Для верификации используем команду openssl verify, в ней мы должны указать файл с «доверенными» сертификатами, в нашем случае это один сертификат GD_root.pem, указывается через аргумент -CAfile GD_root.pem. Также мы указываем заведомо несуществующий путь к главному хранилищу сертификатов удостоверяющих центров, чтобы в процессе верификации участвовал только один сертификат, это делается через аргумент -CApath /nope. В новых версиях openssl (начиная с 1.1.0) введён специальный новый параметр -no-CApath.

Оцените статью
ЭЦП Эксперт
Добавить комментарий