Вероятно проблема с сертификатом, т.к. вот пример из msdn:
// Find the certificate we’ll use to sign
RSACryptoServiceProvider csp = null;
foreach (X509Certificate2 cert in my.Certificates)
{
if (cert.Subject.Contains(certSubject))
{
// We found it.
// Get its associated CSP and private key
csp = (RSACryptoServiceProvider)cert.PrivateKey;
}
}
if (csp == null)
{
throw new Exception(“No valid cert was found”);
}
И null в PrivateKey говорит только об отсутствии этого ключа, не больше ни меньше
Уже писал подобное, алгоритм ГОСТ есть у .net из коробки и внешние библиотеки использовать не обязательно, криптопро использовать тоже не обязательно, .net пользуется api windows для поиска ключей и прочей работы, то есть если нет криптопро появятся стандартные виндозные запросы. Могу поискать исходники если нужно, думаю они еще живые.