Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]
Det här avsnittet beskriver hur du verifierar drivrutinens certifikatkedja när du använder Certifierat utdataskyddsprotokoll (COPP).
Certifikatkedjan för grafikdrivrutinen är ett XML-dokument. Certifikatkedjan innehåller tre certifikat. Det första certifikatet kallas bladcertifikatoch är förarens COPP-certifikat. Nästa certifikat är signeringscertifikatet för den oberoende maskinvaruleverantören (IHV). Det sista certifikatet är Microsofts signeringscertifikat. För att säkerställa att grafikdrivrutinen är en legitim COPP-enhet måste programmet verifiera alla tre av dessa certifikat. Ett skadligt program kan förhindra att COPP fungerar om ett program inte verifierar certifikaten i kedjan korrekt.
COPP-certifikatkedjor använder UTF-8-teckenuppsättningen. Binära data i certifikaten, till exempel den offentliga RSA-nyckeln, är base64-kodade och lagras i storslutsordning. (Big-endian innebär att den mest signifikanta byten lagras på minnesplatsen med den lägsta adressen.)
Vissa element i ett certifikat innehåller booleska värden som anger att det finns en funktion i certifikatet. Om funktionen finns sätts värdet för det motsvarande underordnade elementet till 1. Om en egenskap inte finns närvarande, finns inte det underordnade elementet i certifikatet.
XML-elementdefinitioner
Följande är definitioner för element i certifikatschemat:
- CertificateCollection. Rotelementet i XML-dokumentet. Den innehåller certifikatelement, ett för varje certifikat i kedjan.
- Certifikat. Innehåller ett certifikat. Det här elementet innehåller data- och signaturelement.
-
Data. Innehåller information om certifikatet. I synnerhet innehåller det certifikatets offentliga nyckel och typ. Dataelementet innehåller följande underordnade element:
- PublicKey. Innehåller certifikatets offentliga RSA-nyckel. PublicKey-elementet innehåller ett KeyValue-element som innehåller ett RSAKeyValue-element. RSAKeyValue-elementet har två underordnade element, Modulus och Exponent, och dessa definierar den offentliga nyckeln. Elementen Modulus och Exponent är base64-kodade och lagras i storslutsordning.
- KeyUsage. Om certifikatet är drivrutinens COPP-certifikat ska det här elementet innehålla ett underordnat element med namnet EncryptKey. Om certifikatet är IHV:s signeringscertifikat eller Microsofts signeringscertifikat bör det innehålla ett underordnat element med namnet SignCertificate. Båda dessa underordnade element innehåller booleska värden.
- SecurityLevel. Det här elementet bör ignoreras.
- ManufacturerData. Anger tillverkaren och modellen för grafikenheten. Det här elementet är endast informationsspecifikt.
- funktioner. Innehåller underordnade element som anger användningen av certifikatet. Den enda som är relevant för COPP är COPPCertificate-elementet. Andra underordnade element kan finnas. I så fall bör de ignoreras. Om COPPCertificate-elementet finns är certifikatet ett COPP-certifikat. Det här elementet måste finnas i lövnoden för ett giltigt COPP-certifikat. Det här elementet innehåller ett booleskt värde.
-
Signatur. Innehåller signaturen för det här certifikatet. Den innehåller följande underordnade element:
- SignedInfo. Innehåller information om signaturen. Det viktiga underordnade elementet i det här elementet är elementet DigestValue, som innehåller det base64-kodade värdet för SHA-1-hashen över dataelementet. Sammandragsvärdet används vid kontroll av certifikatet mot listan över återkallade certifikat (CRL).
- SignatureValue. Det här värdet beräknas över dataelementet och beräknas enligt det RSASSA-PSS digitala signaturschemat som definierats i Public-Key Cryptography Standards (PKCS) #1 (version 2.1). Information om PKCS #1 finns i https://www.rsa.com/.
- KeyInfo. Innehåller den offentliga RSA-nyckeln för nästa certifikat i kedjan. Det här elementet används för att verifiera att data i dataelementet inte har manipulerats. Det här elementet har samma format som PublicKey-elementet.
Certifikatverifiering
Programmet måste utföra följande steg för att verifiera certifikatkedjan korrekt. Om något steg misslyckas, eller om något element som anges i dessa procedurer inte finns, misslyckas verifieringen.
Verifiera proceduren för insamling av certifikat
Utför följande steg för att verifiera certifikatkedjan:
- Kontrollera att CertificateCollection är välformulerad XML.
- Kontrollera att CertificateCollection är kodat i UTF-8-format.
- Kontrollera att attributet Version i elementet CertificateCollection är 2.0 eller senare.
- Kontrollera att certifikatkedjan innehåller exakt tre certifikatelement.
- Loopa igenom varje certifikatelement i certifikatkedjan och utför proceduren Verifiera certifikat, som beskrivs nedan, på var och en.
Verifiera certifikatproceduren
Utför följande steg för att verifiera ett certifikat i kedjan:
- Kontrollera att inget av de underordnade elementen i dataelementet har duplicerats. Det bör till exempel bara finnas ett PublicKey-element.
- Kontrollera att elementet Data/PublicKey/KeyValue/RSAKeyValue/Modulus finns. Det base64-avkodade värdet måste vara 256 byte långt för alla certifikat utom roten. I rotcertifikatet måste det här elementet vara 128 byte långt.
- Kontrollera att elementet Data/PublicKey/KeyValue/RSAKeyValue/Exponent finns. Det base64-avkodade värdet får inte vara större än 4 byte.
- Om det här certifikatet är lövcertifikatet kontrollerar du följande:
- KeyUsage-elementet innehåller ett EncryptKey-element med värdet 1.
- Elementet Funktioner innehåller ett COPPCertificate-element med värdet 1.
- Om det här certifikatet inte är lövcertifikatet kontrollerar du följande:
- Modulus- och exponenten från elementet Data/PublicKey matchar exakt modulus och exponent från elementet Signature/KeyInfo i föregående certifikat.
- KeyUsage-elementet innehåller ett SignCertificate-element med värdet 1.
- Använd SHA-1-hashalgoritmen för att hash varje byte i certifikatets dataelement. Varje byte från det första tecknet i taggen <Data> till det sista tecknet i den avslutande taggen </Data> ska hashas. Hash-värdet används för att kontrollera certifikatet mot listan över återkallade certifikat (CRL), enligt beskrivningen i listor över återkallade certifikat
- Jämför hash-värdet från steg 6 med det base64-avkodade värdet för elementet Signature/SignedInfo/Reference/DigestValue. Dessa värden måste matcha.
- Utför proceduren Verifiera signatur, som beskrivs nedan.
- Om det här certifikatet inte är det slutliga certifikatet i kedjan sparar du värdet Signature/KeyInfo/KeyValue/RSAKeyValue för nästa iteration av loopen.
- Om det här certifikatet är det slutliga certifikatet i kedjan kontrollerar du att värdet för Signature/KeyInfo/KeyValue/RSAKeyValue matchar Microsofts offentliga nyckel. Microsofts offentliga nyckel har följande base64-kodade värden:
Modulus:
pjoeWLSTLDonQG8She6QhkYbYott9fPZ8tHdB128ZETcghn5KHoyin7HkJEcPJ0Eg4UdSv a0KDIYDjA3EXd69R3CN2Wp/QyOo0ZPYWYp3NXpJ700tKPgIplzo5wVd/69g7j+j8M66W7V NmDwaNs9mDc1p2+VVMsDhOsV/Au6E+E=
Exponent:
AQAB
Verifiera signaturprocessen
Värdet för elementet SignatureValue beräknas över dataelementet enligt det RSASSA-PSS digitala signaturschemat som definierats i PKCS #1 version 2.1 (nedan kallat PKCS). Utför följande steg för att verifiera signaturen:
- Avkoda värdena Modulus och Exponent i elementet Signature/KeyInfo/KeyValue/RSAKeyValue. Dessa värden definierar den offentliga RSA-nyckeln för signeringscertifikatet.
- Avkoda Signature/SignatureValue-elementet.
- Beräkna åtgärden RSASSA–PSS-Verify som definieras i avsnitt 8.1.2 i PKCS.
Använd följande indata för åtgärden RSASSA-PSS-Verify:
- (n,e) är den offentliga nyckeln från steg 1.
- M är alla byte i dataelementet, inklusive taggarna <Data> och </Data> som omger elementet.
- S är det avkodade signaturvärdet från steg 2.
Åtgärden RSASSA-PSS-Verify använder EMSA-PSS-ENCODE åtgärd som definieras i avsnitt 9.1.1. av PKCS. För den här åtgärden använder COPP följande alternativ:
- Hash = SHA-1
- hLen = 20
- MGF (maskgenereringsfunktion) = MGF1
- sLen = 0
Maskgenereringsfunktionen MGF1 definieras i bilaga B.2 i PKCS. För den här funktionen använder COPP följande alternativ:
- Hash = SHA-1
- hLen = 20
Utdata från åtgärden RSASSA-PSS-Verify anger om signaturen är giltig eller ogiltig.
Relaterade ämnen