Абсолютное ограничение: невозможно получить доступ к считыванию физических смарт -карт через CNGKEYC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Абсолютное ограничение: невозможно получить доступ к считыванию физических смарт -карт через CNGKEY

Сообщение Anonymous »

Я обнаружил значительное и, казалось бы, неосуществимое ограничение при попытке программно получить доступ к смарт -карте, предоставляемой для Windows Hello для бизнеса (WHFB). Невозможно указать или перенаправить криптографические операции на физическую смарт -карт с использованием каких -либо методов CNGKEY, а также не может быть получена ручка с ключом, полученную из NCRYPT.DLL в CNGKEY. Читатель выступает в качестве прокси для всех криптографических операций.
пытается обойти этого виртуального считывателя и напрямую использовать имя физического считывателя -подключенное к Certutil -Scinfo -игнорируется или приводит к отсутствующей хранимой ошибке клавиш (0x80090016). Я также исследовал, используя API NCRYPT низкого уровня (ncrypt.dll), чтобы открыть ручку для ключевого контейнера физической карты. Однако в .NET CORE / .NET 5+ / .NET 8 нет общедоступного API для преобразования нативного NCRYPT_KEY_HANDLE в CNGKEY. В результате вы не можете использовать ручку с помощью RSACNG или SertieTeRequest, сделав этот подход неработающим.
Я подтвердил, что стандартный документированный метод установки имени считывателя через CNGProperty не работает в этом сценарии: < /p>
c#< /strong> < /p>
// This code will NOT work if the card is a WHfB credential
CngKey key = CngKey.Open("your-certificate-key-name", CngProvider.MicrosoftSmartCardKeyStorageProvider);

key.SetProperty(
new CngProperty(
"SmartCardReaderName",
Encoding.Unicode.GetBytes("Dell Smart Card Reader Keyboard 0"),
CngPropertyOptions.None));

// This code will NOT work because CngKey does not accept SafeHandle objects

IntPtr hKey; // Used NCrypt* methods to open existing key on Smart Card

CngKey key = CngKey.Open(new SafeNCryptKeyHandle(hKey, ownsHandle: true));

public class SafeNCryptKeyHandle : SafeHandle {
public SafeNCryptKeyHandle(IntPtr handle, bool ownsHandle)
: base(IntPtr.Zero, ownsHandle) {
SetHandle(handle);
}

public override bool IsInvalid => handle == IntPtr.Zero;

protected override bool ReleaseHandle() {
NCryptFreeObject(handle);
return true;
}

[DllImport("ncrypt.dll")]
private static extern int NCryptFreeObject(IntPtr hObject);
}

Система последовательно направляет все запросы через Windows Hello для бизнес -провайдера, который исключительно связан с Hello для бизнеса 1
Virtual Reader. Это фундаментальное решение Microsoft. В тот момент, когда ключ подготовлен для Windows Hello для бизнеса, он больше не находится под прямым контролем Minidriver смарт -карты. Доступ частного ключа теперь полностью управляется инфраструктурой Hello Windows и вашими учетными данными пользователя (PIN, биометрика), а не физическим читателем.
это означает, что если вам нужно выполнять криптографические операции с ключом смарт -карты при нацеливании на конкретного физического читателя, вы не можете использовать CNGKEY. Низкоуровневые ручки NCRYPT не могут быть завернуты в CNGKEY, и настройки CNGProperty, такие как «SmartCardreaderName», игнорируются. Единственный жизнеспособный подход - это: < /p>

Отключить Windows Hello для бизнеса и обеспечить доступность только физическая смарт -карта для операций CNGKEY, или < /li>
Используйте Windows Hello Authentication Flow Flow и принимайте абстракцию Smart Code -Cdive, что использует r Flighte Mine Mine Mine Mine Mine, что MINIIVE MINIIR MINIIVE MINIIR. На смарт -карте, но если я не выясню способ интегрировать ее с помощью CNGKEY, я не буду не в состоянии сгенерировать CSP через класс CertieTeRequest. Мне не разрешено использовать сторонние библиотеки для этого решения, например, Bouncy Castle. Просто чистое .NET Core 8 или Managed C ++.
Эта проблема является ограничением, которое можно исправить, но мне нужно сообщить об этом Microsoft, чтобы они могли добавить статический метод открытого/существующего в классе CNGKEY, который принимает SafeHandle.

Подробнее здесь: https://stackoverflow.com/questions/797 ... via-cngkey
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»