Где лежат контейнеры ключей?

Здравствуйте.

Есть вот такая штука в C#

Можно создать криптопару открытого и закрытого ключа. МС настоятельно рекомендуют хранить закрытый ключ в указанном по ссылке контейнере.
А у меня вопрос. Где этот контейнер расположен??
Можно ли какими нибудь способами подсмотреть закрытый ключ или скопировать его и перенести на другой комп??

Ковырялся в криптоПРо но он ничего такого не показывает. На МСДН тоже вроде не пишут где он расположен.

Или это действительно надежная штука и ей можно доверять?

Что именно расположено? Оно ж вроде только в памяти хранится.

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

Да я не про это вроде. А про криптопровайдеры.

Ну вот я создаю контейнер:

CspParameters p = new CspParameters() { KeyContainerName = "MyCont" };
            RSACryptoServiceProvider aes = new RSACryptoServiceProvider(p);

Далее я в него пишу ключи.

Вот тут написано что хранится в :

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"Microsoft\Crypto\RSA\MachineKeys");

Далее я смотрю что мне пишет информация:

CspParameters p = new CspParameters() { KeyContainerName = "MyCont" };
            RSACryptoServiceProvider aes = new RSACryptoServiceProvider(p);

            CspKeyContainerInfo info = new CspKeyContainerInfo(p);
            string fileName = info.UniqueKeyContainerName;

Вижу значение:

835a738a81f30e1a30188931b0f2e8aa_7eff63de-406d-4ddc-ad11-4218949cd844

Лезу в указанную папку и не вижу там ничего с подходящим именем.

ИМХО
Так ведь если можно будет посмотреть пропадает интерес, пропадет ценность валюты.
Если правильно понимаю вся ценность в:
хранении ключей в ОЗУ;
обеспечение этих ОЗУ непрерывным энергоснабжением.
Вот к примеру:

Оператор new говорит сам за себя, выделяется динамическая память.

P. S.
Если не прав, поправте, самому интересно понять как это работает.

Оно там вроде файл каким-то образом сохраняет/читает внутри RSACryptoServiceProvider, но эта часть исходников вроде бы недоступна.

https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/rsacryptoserviceprovider.cs,127
:arrow_down:
https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/utils.cs,353
:arrow_down:
https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/utils.cs,208
:arrow_down:
https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/utils.cs,1227

Потому и надо знать где и в каком виде это лежит.

Они не в озу хранятся а в контейнере. оператор new просто создает новый класс для доступа.

Вот и я ничего не нахожу. Получается контейнер с защитой шредингера. Вроде бы секретный а может и нет.

Можно попробовать глянуть к каким файлам процесс обращается.

http://pyatilistnik.org/gde-hranyatsya-sertifikatyi-v-windows-sistemah/

C:\Users\имя вашего пользователя\AppData\Roaming\Microsoft\SystemCertificates\My

И в реестре. По ссылке в коментариях подробнее.

Вообще вещь надежная. Не то что бы они скрывают, но от утечки ключей по побочным каналам защищают основательно.

Ну а если я файлы просто перенесу на другой комп то там тоже этот контейнер найдется?