
Windows上でPFX証明書と秘密鍵を使用してNIST SP 800-73 PIVスマートカードをエミュレートし、RDP、Citrix、VMware Horizonセッションでのスマートカード認証を可能にします。
PIVertは、NIST SP 800-73準拠のPIVスマートカードエミュレータです。証明書と対応する秘密鍵を含むPFXファイルをPIVertに渡すと、このツールはWindowsに対して本物のPIVカードとしてエミュレートします。このカードは、組み込みのスマートカードリダイレクション機能を使用して、RDP、Citrix、VMWare Horizonでの認証に使用できます。
PIVertを以前に使用したことがないクリーンなマシンでは、最初のステップとしてBixVReader仮想スマートカードリーダードライバをインストールします。警告:このドライバはテスト証明書を使用して自己署名されているため、自己署名された信頼されたルート証明機関証明書がインストールされます。また、インストール手順ではAllowCertificatesWithNoEKUグループポリシーオプションも設定されます。このオプションがないと、認証にはSmartcard Logon EKUを持つ証明書のみが提供されます。このオプションを有効にすると、User Authentication EKUを持つ証明書も認証に使用できるようになります。
.\PIVert.exe install
[=] AllowCertificatesWithNoEKU on SmartCard Credential Provider not set, enabling...
[+] Enabled AllowCertificatesWithNoEKU on SmartCard Credential Provider
[=] Writing BixVReader.ini config to C:\Windows
[=] Installing driver signing certificate into Root and Trusted Publishers local machine store
[=] Installing driver MSI
[+] Installer completed
PFXファイルを使用してPIVカードをエミュレートするには、コマンドライン引数としてPFXファイルとPFXパスワードを指定するだけです。
.\PIVert.exe .\Administrator.pfx password
[=] Connected to Smartcard Data Pipe
[=] Connected to Smartcard Event Pipe
[+] Connected Virtal Smart Card Driver
[+] Virtual card inserted
[=] Press ESC to exit, or any other key to remove and reinsert the virtual card?
[=] Unsupported INS ca with CLA 0
[=] Request for PIV DataObject: CardHolderUniqieID
[=] Request for PIV DataObject: CertPIVAuth
[=] Request for PIV DataObject: CertSign
[=] Request for PIV DataObject: CertKeyMan
[=] Request for PIV DataObject: CertCardAuth
[=] Request for PIV DataObject: KeyHistory
[=] Request for PIV DataObject: CertPIVAuth
[=] Request for PIV DataObject: CertSign
[=] Request for PIV DataObject: CertCardAuth
[=] Request for PIV DataObject: CardHolderUniqieID
[=] Request for PIV DataObject: CertKeyMan
[=] Request for PIV DataObject: KeyHistory
ドライバ(またはおそらく私のコード :D)にバグがあるようで、仮想カードからのATR読み取りの問題により、Windowsが仮想カードの挿入を検出しないことがあります。この問題に対処するには、ESC以外の任意のキーを押して仮想カードを仮想的に取り外し、再挿入できます。この状況が発生した場合は、上記のような起動時のDataObjectリクエストが表示されないため、すぐにわかります。