Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Holy Bartender  
#1 Оставлено : 27 марта 2024 г. 20:32:12(UTC)
Holy Bartender

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.03.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Добрый день, уважаемые господа (и дамы). Извиняюсь, быть может подобный вопрос уже всплывал - беглый поиск результатов не дал, в основном все вопросы про обратное. Суть вопроса:

Требуетя привести в порядок зоопарк из множества гостовских ключевых пар (.cer + .key) openssl. Рассматривается вариант импорта добра в cryptopro csp через CryptImportKeys.

Примерный план действий:
1. Из .key грузим закрытый ключ. Получаем OIDы наборов параметров и массив байт закрытого ключа pKey (кажется, big-endian)
2. Генерируем ukm (8 байт)
3. Для PBKDF2 генерируем соль salt (16 байт), придумываем строковый пароль password. Полагаем количество раундов count = 2000
4. Согласно примерам криптопро создается сессионный ключ импорта sKey (CALG_PRO12_EXPORT через CALG_PBKDF2_94_256 на основе salt, password, count). Начальный вектор ключа задаем равным ukm (проверено - при экспорте ключей вы именно начальный вектор ключа экспорта помещаете в ukm экспортированного ключа)
5. Сформированный sKey не получить (вы везде так заявляете - поправьте, если ошибаюсь) в открытом виде. Формируем его самостоятельно (все необходимое у нас имеется). Пусть это будет массив байт mKey
6. Для диверсификации ключа шифрования закрытого ключа CALG_PRO12_EXPORT использует KDF_GR3411_12_256. Диверсивицируем mKey - получаем массив байт dKey
7. Без использования cryptopro csp шифруем закрытый ключ по ГОСТ 28147-89 в режиме ECB на полученном dKey. Получаем массив eKey
8. Считаем MAC от pKey по имеющемуся ukm, получаем mac

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

9. Приступаем к формированию BLOBа для импорта ключа в криптопровайдер. Потребуются ukm, eKey, mac и полученные на ш.1 OIDы. И вот тут проблема. Заголовок BLOBа, как вы понимаете, проблем не представляет. Проблема - его тело.

При экспорте ключей стал понятен формат тела - ASN1 sequence (OS) из 2-х узлов - вложенной sequence (IS) и 4-х байтной octetstring (CS).
Структура IS вполне прозрачна, сформировать ее не сложно, все необходимое (ukm, eKey, mac и полученные на ш.1 OIDы) есть.
Далее, как я предполагаю, на основе IS каким-то образом считаетя какая-то 4-х байтная контрольная сумма CS, после чего IS и CS помещаются в OS.

В том же процессе экспорта пробовал считать MAC в разумных сочетаниях ключа и iv - не сходится.

И вот теперь сам вопрос. Будьте добры, подскажите, пожалуйста, каким образом правильно посчитать контрольную сумму CS внутренней sequence IS тела BLOBа?
Спасибо.

PS: Я уже видел массу сообщений про то, что вы думаете насчет экспорта, нормативов и рекомендаций ТК26 и прочее. Пожалуйста, не повторяйтесь. Интересует конкретный ответ на конкретный вопрос. К тому же речь не про получение закрытого ключа в открытом виде, а, наоборот, про корректное его помещение в ваш криптопровайдер. Еще раз спасибо.
Offline basid  
#2 Оставлено : 28 марта 2024 г. 2:52:07(UTC)
basid

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.11.2010(UTC)
Сообщений: 1,045

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 141 раз в 127 постах
Вариант экспорта в PFX (P12) с последующим импортом транспортного контейнера в контейнер КРИПТОПРО CSP не пробовался?
Или OpenSSL не умеет вариант, который принимает КРИПТОПРО CPS?
Offline Holy Bartender  
#3 Оставлено : 28 марта 2024 г. 8:47:51(UTC)
Holy Bartender

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.03.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Не умеет. OID 1.2.840.113549.1.12.1.80: https://habr.com/ru/articles/693600/
Offline Holy Bartender  
#4 Оставлено : 29 марта 2024 г. 13:32:29(UTC)
Holy Bartender

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.03.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Вопрос был адресован прежде всего сотрудникам Крипто-Про. Я так понимаю, ответа не последует?
Offline Русев Андрей  
#5 Оставлено : 29 марта 2024 г. 15:00:31(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,272

Сказал(а) «Спасибо»: 22 раз
Поблагодарили: 446 раз в 325 постах
Вам сразу правильно ответили: надо экспортировать из openssl в pkcs12 в соответствии с Р 50.1.112–2016 "Информационная технология. Криптографическая защита информации. Транспортный ключевой контейнер", разработанному в рамках ТК26. Поддержка его в openssl есть, а КриптоПро CSP умеет его импортировать.
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
Андрей * оставлено 29.03.2024(UTC)
Offline Holy Bartender  
#6 Оставлено : 29 марта 2024 г. 21:10:12(UTC)
Holy Bartender

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.03.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Про ТК26 уже писал. Пожалуйста, не переводите тему, вопрос сформулирован вполне чётко и конкретно, требуется конкретный ответ. Действия требуется выполнять программно, без прослоек и прокладок. Есть все необходимое, осталась контрольная сумма. Не старайтесь причинить добро рекомендациями и советами. Вопрос про контрольную сумму
Offline Holy Bartender  
#7 Оставлено : 1 апреля 2024 г. 19:42:50(UTC)
Holy Bartender

Статус: Новичок

Группы: Участники
Зарегистрирован: 27.03.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Москва

Нашел замечательный пост в ветке "https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=80581&find=unread"

Автор: Русев Андрей Перейти к цитате
Сама флешка не упростит задачу. Нормальные варианты:
  • iTunes File Sharing, если приложение собрано так, что сохраняет ключи в Library/Caches (мы делали поддержку)
  • Приложения для записи файлов на iOS, типа iExplorer (им можно залить папку с флешки без всяких условий)
  • Написать код, который экспортирует в PRIVATEKEYBLOB ключ (должен быть экспортируемым) на пароле (PBKDF2), и импортировать его в коде приложения на iOS (можем дать пример, он будет в sdk в следующем релизе)


  • Уважаемый Андрей (извините, отчества вы не указали), будьте любезны, поделитесь кодом. Огромное спасибо за помощь. Ну, или хотя бы намекните, какая (где еще можно посмотреть) хэш-функция используется для контрольной суммы в BLOBе
    Offline Holy Bartender  
    #8 Оставлено : 11 апреля 2024 г. 19:50:37(UTC)
    Holy Bartender

    Статус: Новичок

    Группы: Участники
    Зарегистрирован: 27.03.2024(UTC)
    Сообщений: 7
    Российская Федерация
    Откуда: Москва

    Я так понимаю, ключ экспорта (расшифровки) закрытого ключа так же входит в контрольную сумму. Товарищи, исходя из того, что ключ экспорта на руках (быть может, вы не хотите раскрывать именно эту часть), все равно не поделитесь алгоритмом?
    Offline Русев Андрей  
    #9 Оставлено : 11 апреля 2024 г. 23:45:53(UTC)
    Русев Андрей

    Статус: Сотрудник

    Группы: Администраторы, Участники
    Зарегистрирован: 16.04.2008(UTC)
    Сообщений: 1,272

    Сказал(а) «Спасибо»: 22 раз
    Поблагодарили: 446 раз в 325 постах
    Код:
    rt-user@test-x64-alt10 openssl_gost $ openssl version
    OpenSSL 1.1.1l  24 Aug 2021
    test-x64-alt10 ~ # openssl engine
    (rdrand) Intel RDRAND engine
    (dynamic) Dynamic engine loading support
    (gost) Reference implementation of GOST engine
    rt-user@test-x64-alt10 openssl_gost $ openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout key.pem -out cert.pem -md_gost12_256
    Generating a GOST2012_256 private key
    writing new private key to 'key.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) []:
    Locality Name (eg, city) []:
    Organization Name (eg, company) []:
    Organizational Unit Name (eg, section) []:
    Common Name (e.g., your name or your server's hostname) []:ivan
    Email Address []:
    rt-user@test-x64-alt10 openssl_gost $ openssl x509 -in cert.pem -text -noout
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                63:c5:32:6a:bb:f3:b5:31:f1:d7:2d:b1:a8:31:25:89:c6:fb:f8:bf
            Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
            Issuer: C = RU, CN = ivan
            Validity
                Not Before: Apr 11 20:27:23 2024 GMT
                Not After : May 11 20:27:23 2024 GMT
            Subject: C = RU, CN = ivan
            Subject Public Key Info:
                Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
                    Public key:
                       X:7FE6B2DA0F353C07AE5A360722C4448DF85A4A276330794F582CB3030F6E9518
                       Y:F3ADF611388CB4C1F23E1075B2C7CCE5CEECE8741F3B9DE380FA25DB66476874
                    Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
            X509v3 extensions:
                X509v3 Subject Key Identifier:
                    1A:84:4A:53:AB:F9:2F:80:7C:30:0B:72:EF:6C:31:4A:F6:A2:D7:27
                X509v3 Authority Key Identifier:
                    keyid:1A:84:4A:53:AB:F9:2F:80:7C:30:0B:72:EF:6C:31:4A:F6:A2:D7:27
    
                X509v3 Basic Constraints:
                    CA:TRUE
        Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
             8e:0f:6b:27:fc:d1:b7:a7:44:85:94:4c:b1:7a:c0:27:bf:91:
             26:50:42:c6:ba:38:78:83:6c:3b:f0:5f:96:c3:18:42:41:3e:
             d9:2f:32:14:41:7e:e1:35:a6:70:04:fc:9e:b3:cb:bd:d9:d0:
             f7:ae:fe:fd:5c:5b:2b:13:c7:96
    rt-user@test-x64-alt10 openssl_gost $ openssl pkcs12 -inkey key.pem -in cert.pem -keypbe gost89 -certpbe gost89 -macalg md_gost12_512 -export -out cert_and_key.pfx -password pass:123
    rt-user@test-x64-alt10 openssl_gost $ /opt/cprocsp/bin/amd64/certmgr -list -pfx -file cert_and_key.pfx -pin 123
    Certmgr Ver:5.0.13149 OS:Linux CPU:AMD64 (c) "Crypto-Pro", 2007-2024.
    Program for managing certificates, CRLs and stores.
    =============================================================================
    1-------
    Issuer              : C=RU, CN=ivan
    Subject             : C=RU, CN=ivan
    Serial              : 0x63C5326ABBF3B531F1D72DB1A8312589C6FBF8BF
    SHA1 Thumbprint     : 48da5109d692c9a897886047dd8fd46d319f5c90
    SubjectKeyID        : 1a844a53abf92f807c300b72ef6c314af6a2d727
    Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
    PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
    Not valid before    : 11/04/2024 20:27:23 UTC
    Not valid after     : 11/05/2024 20:27:23 UTC
    PrivateKey Link     : Yes
    =============================================================================
    
    [ErrorCode: 0x00000000]
    rt-user@test-x64-alt10 openssl_gost $ /opt/cprocsp/bin/amd64/certmgr -inst -pfx -file cert_and_key.pfx -pin 123
    Certmgr Ver:5.0.13149 OS:Linux CPU:AMD64 (c) "Crypto-Pro", 2007-2024.
    Program for managing certificates, CRLs and stores.
    Crypto-Pro GOST R 34.10-2012 KC1 CSP requests new container password
    New password:
    Confirm password:
    Issuer              : C=RU, CN=ivan
    Subject             : C=RU, CN=ivan
    Serial              : 0x63C5326ABBF3B531F1D72DB1A8312589C6FBF8BF
    SHA1 Thumbprint     : 48da5109d692c9a897886047dd8fd46d319f5c90
    SubjectKeyID        : 1a844a53abf92f807c300b72ef6c314af6a2d727
    Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
    PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
    Not valid before    : 11/04/2024 20:27:23 UTC
    Not valid after     : 11/05/2024 20:27:23 UTC
    PrivateKey Link     : Yes
    Container           : HDIMAGE\\pfx-73da.000\03F5
    Provider Name       : Crypto-Pro GOST R 34.10-2012 KC1 CSP
    Provider Info       : Provider Type: 80, Key Spec: 1, Flags: 0x0
    
    
    =============================================================================
    1-------
    Issuer              : C=RU, CN=ivan
    Subject             : C=RU, CN=ivan
    Serial              : 0x63C5326ABBF3B531F1D72DB1A8312589C6FBF8BF
    SHA1 Thumbprint     : 48da5109d692c9a897886047dd8fd46d319f5c90
    SubjectKeyID        : 1a844a53abf92f807c300b72ef6c314af6a2d727
    Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
    PublicKey Algorithm : ГОСТ Р 34.10-2012 256 бит (512 bits)
    Not valid before    : 11/04/2024 20:27:23 UTC
    Not valid after     : 11/05/2024 20:27:23 UTC
    PrivateKey Link     : Yes
    Container           : HDIMAGE\\pfx-73da.000\03F5
    Provider Name       : Crypto-Pro GOST R 34.10-2012 KC1 CSP
    Provider Info       : Provider Type: 80, Key Spec: 1, Flags: 0x0
    =============================================================================
    
    [ErrorCode: 0x00000000]
    rt-user@test-x64-alt10 openssl_gost $ /opt/cprocsp/bin/amd64/csptest -keyset -check -container 'HDIMAGE\\pfx-73da.000\03F5'
    CSP (Type:80) v5.0.10013 KC1 Debug Ver:5.0.13149 OS:Linux CPU:AMD64 FastCode:READY:AVX,AVX2.
    AcquireContext: OK. HCRYPTPROV: 23234595
    GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
    Container name: "pfx-73da889b-c072-3404-0efe-db03e6775ea6"
    Check header passed.
    Signature key is not available.
    Exchange key is available. HCRYPTKEY: 0x1699c93
    Symmetric key is not available.
    UEC key is not available.
    License: Cert without license
    Crypto-Pro GOST R 34.10-2012 KC1 CSP requests container password
    Type password:
    Check container passed.
    Check sign passed.
    Check verify signature on private key passed.
    Check verify signature on public key passed.
    Check import passed.
    Certificate in container matches AT_KEYEXCHANGE key.
    Keys in container:
      exchange key
    Extensions:
      OID: 1.2.643.2.2.37.3.10
      PrivKey: Not specified - 11.07.2025 20:32:46 (UTC)
    Total: SYS: 0.020 sec USR: 0.070 sec UTC: 1.440 sec
    [ErrorCode: 0x00000000]
    
    Официальная техподдержка. Официальная база знаний.
    thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
    Андрей * оставлено 11.04.2024(UTC)
    Offline Holy Bartender  
    #10 Оставлено : 12 апреля 2024 г. 8:59:29(UTC)
    Holy Bartender

    Статус: Новичок

    Группы: Участники
    Зарегистрирован: 27.03.2024(UTC)
    Сообщений: 7
    Российская Федерация
    Откуда: Москва

    К чему это? Ни строчки на си, какие-то непонятные слова про pfx. Ну не нравится мне pfx, не хочется вызывать exe для того чтобы получить ключ, нет сил лопатить динамическую опенссл чтобы через ее вызовы работать с pfx - проще построить блоб и вызвать cryptimportkey
    Вы охраняете алгоритм как какую-то священную корову. Я понимаю, если бы на нем зижделась секретность серийников всей линейки по крипто-про (что-то не сильно похоже хотя кто ж вас знает). Но какой-то блоб... Вы и так (черех pfx) даете возможность вливать в криптопровайдер гостовые ключи - какая вам разница, через какой проход они будут влиты
    RSS Лента  Atom Лента
    Пользователи, просматривающие эту тему
    Guest
    Быстрый переход  
    Вы не можете создавать новые темы в этом форуме.
    Вы не можете отвечать в этом форуме.
    Вы не можете удалять Ваши сообщения в этом форуме.
    Вы не можете редактировать Ваши сообщения в этом форуме.
    Вы не можете создавать опросы в этом форуме.
    Вы не можете голосовать в этом форуме.