Private key

Тема в разделе "WASM.CRYPTO", создана пользователем eshkinkot, 6 янв 2011.

  1. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Ситуация следующая. В хранилище Му нахожу сертификат. Как извлечь секретный ключ из хранилища? Функция CryptAcquireCertificatePrivateKey дает указатель на провайдера, который используем в стандартных функциях для дальнейших манипуляций (подписывание и т.д.). А как получить сам секретный ключ?
     
  2. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    если я ничего не путаю то секретный ключ нельзя извлечь из хранилища не зная пароля на него
    если ты конечно имеешь ввиду X.509 сертификаты
     
  3. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Мне все это надо для подписи моей проги легальным сертификатом. У меня есть доступ к компу на котором хранится легальный сертификат. Я уже скачал сертификат. Для подписи проги необходим еще и секретный ключ. А его как достать?
     
  4. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    пароль насколько я понял используется пользователя. а если комп под этим юзером загружен, то ОС сама вводит пароль. так что надо только вытащить ключ
     
  5. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    с чего ты взял что пароль на логин в систему пользователя и пароль на ключ одинаковые?
    и вообще ключ может быть помечен как неэкспортируемый, тогда ты его не вытащишь...
     
  6. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    пусть все будет в мою пользу. вопрос как вытащить?
     
  7. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    PFXExportCertStoreEx() а далее распарсить бинарные данные сертификата которые, она вернёт?

    Лол, неэкспортируемые ключи так же можно вытащить, для этого требуется всего-лишь пропатчить несколько условных переходов во внутренностях rsaenh.dll
     
  8. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Cr4sh
    Спасибо за ответ
     
  9. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Cr4sh
    С помощью функции PFXExportCertStoreEx я получил PFX контейнер с паролем. Если применить функцию PFXVerifyPassword к данному контейнеру, находящемуся в памяти, то функция утверждает, что пароль верен. Если я записываю PFX контейнер в файл, а потом снова считываю файл в буфер, то функция PFXVerifyPassword говорит о том, что пароль не верен. Где ошибка?
     
  10. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    CRYPT_DATA_BLOB, который в PFXVerifyPassword передаётся, точно один и тот же в обоих случаях? Если установить сертификат в ручную с помощью соотв. мастера - пароль принимается?
     
  11. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    Есть наработки? можно поподробнее пожалуйста?
     
  12. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Конечно! Берешь отладчик, аттачишься к оснастке управления сертификатами и трассируешь процедуру экспорта начиная с вызова PFXExportCertStoreEx сначала для обычного и затем для неэкспортируемого сертификата. Сравнивая две трассы исполнения находишь условные переходы, которые нужно запатчить.
     
  13. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    понял, спасибо
     
  14. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Cr4sh
    Если установить сертификат в ручную с помощью соотв. мастера - пароль не принимается
     
  15. Cr4sh

    Cr4sh New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2006
    Сообщения:
    668
    Очевидно, ошибка в коде, который выполняет экспорт.
     
  16. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Код (Text):
    1. invoke CertOpenSystemStoreA,0,MY
    2.         mov [border],eax
    3.         invoke PFXExportCertStoreEx,[border],blob,PASS,0,4
    4.         invoke GlobalAlloc,0,[blob.cbdata]
    5.         mov [blob.pbdata],eax
    6.         invoke PFXExportCertStoreEx,[border],blob,PASS,0,4
    7.         invoke CreateFileA,filepfx,GENERIC_WRITE,3,0,2,0x80,0
    8.         mov [val],eax
    9.         invoke WriteFile,[val],[blob.pbdata],[blob.cbdata],blob.cbdata,0
    10.         invoke CloseHandle,[val]
    11.         invoke CertCloseStore,[border],0
    12.         invoke GlobalFree,[blob.pbdata]
    Проверка условий удалена. Если в этом коде вставить функцию PFXVerifyPassword, то она отрабатывает отлично. Но если с помощью мастера импортировать pfx файл или другой прогой попытаться открыть pfx файл, то возникает ошибка - неправильный пароль
     
  17. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Cr4sh
    А функция CryptAcquireCertificatePrivateKey никак не поможет в моем случае?
     
  18. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Решил задачу по-тупому. Просто подставил в функцию PFXExportCertStoreEx вместо пароля 0 (пустой пароль). Все работает. Мастер импорта не ругается.
     
  19. Antoxa27

    Antoxa27 Антон

    Публикаций:
    0
    Регистрация:
    19 фев 2011
    Сообщения:
    1
    Адрес:
    Симферополь
    Спасибо, как раз искал эту информацию.