Αρχική ημερομηνία δημοσίευσης: 21 Νοεμβρίου 2025
KB ID: 5073121
Εισαγωγή
Οι ενημερώσεις της 14ης Οκτωβρίου 2025 των Windows που αφορούν το CVE-2024-30098 αποκάλυψαν προβλήματα σε εφαρμογές όπου ο κώδικας δεν προσδιορίζει σωστά ποια υπηρεσία παροχής διαχειρίζεται το κλειδί για πιστοποιητικά που μεταδίδονται από μια έξυπνη κάρτα στο χώρο αποθήκευσης πιστοποιητικών. Αυτή η εσφαλμένη αναγνωριστικόση μπορεί να προκαλέσει την αποτυχία των λειτουργιών κρυπτογράφησης σε ορισμένα σενάρια. Αυτό το έγγραφο παρέχει οδηγίες στους προγραμματιστές εφαρμογών σχετικά με τον τρόπο εντοπισμού του σωστού προγράμματος χειρισμού και επίλυσης αυτών των ζητημάτων.
Σύνοψη
Όταν τα πιστοποιητικά μεταδίδονται από μια έξυπνη κάρτα στο χώρο αποθήκευσης πιστοποιητικών των Windows, η διαδικασία μετάδοσης μπορεί να χρησιμοποιήσει οποιαδήποτε από τις ακόλουθες υπηρεσίες παροχής:
-
Υπηρεσία παροχής κρυπτογράφησης παλαιού τύπου (CSP), η οποία βασίζεται στη διασύνδεση προγραμματισμού εφαρμογών cryptographic παλαιού τύπου (CAPI)
-
Key Storage Provider (KSP), ο οποίος βασίζεται στο Cryptography API: Επόμενης γενιάς (CNG). Αυτή ήταν η σύγχρονη αντικατάσταση που παρουσιάστηκε στα Windows Vista.
Πριν από την επιδιόρθωση για το CVE-2024-30098, ο αλγόριθμος μετάδοσης χρησιμοποιούσε CSP για πιστοποιητικά που βασίζονται σε RSA και KSP για όλα τα άλλα. Αυτή η προσέγγιση ήταν ανασφαλής, επειδή το CAPI δεν υποστηρίζει σύγχρονους κρυπτογραφικούς αλγόριθμους, περιορίζοντας τις δυνατότητες ασφαλείας.
Οι ενημερώσεις ασφαλείας της 14ης Οκτωβρίου 2025 καταργούν αυτόν τον ειδικό χειρισμό και τώρα η KSP χρησιμοποιείται για όλα τα πιστοποιητικά.
Προσδιορισμός του συνόλου API που θα χρησιμοποιηθεί
Η διαχείριση των εφαρμογών που βασίζονται σε κλειδιά RSA από CSP ενδέχεται να αποτύχει όταν η διαχείριση του κλειδιού γίνεται από KSP. Για να επιλυθεί αυτό, οι εφαρμογές πρέπει να εντοπίσουν την υπηρεσία παροχής που διαχειρίζεται τον αριθμό-κλειδί και να χρησιμοποιήσουν το αντίστοιχο σύνολο API (CAPI ή CNG).
Σημαντικό: Μην χρησιμοποιείτε τις συναρτήσεις CryptAcquireContextW ή CryptAcquireContextA καθώς το API είναι υπό απόσυρση. Αντί για αυτό, χρησιμοποιήστε τη συνάρτηση CryptAcquireCertificatePrivateKey .
Συνάρτηση CryptAcquireCertificatePrivateKey
Η κλήση Του πλήκτρου CryptAcquireCertificatePrivateKey επιστρέφει μια λαβή (phCryptProvOrNCryptKey) τύπου HCRYPTPROV_OR_NCRYPT_KEY_HANDLE. Αυτή η λαβή μπορεί να είναι:
-
Λαβή CSP (HCRYPTPROV): Χρησιμοποιήστε συναρτήσεις CryptoAPI όπως το CryptSignHash.
-
Λαβή CNG (NCRYPT_KEY_HANDLE): Χρησιμοποιήστε συναρτήσεις CNG, όπως NCryptSignHash.
Σημείωση: Κατά την κλήση του CryptAcquireCertificatePrivateKey, φροντίστε να συμπεριλάβετε το CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG στην παράμετρο dwFlags.
Για να προσδιορίσετε τον τύπο λαβής, ελέγξτε την τιμή pdwKeySpec :
|
τιμή pdwKeySpec |
Crypto API για χρήση |
|
AT_KEYEXCHANGE ή AT_SIGNATURE |
CAPI |
|
CERT_NCRYPT_KEY_SPEC |
CNG |
Λύση
Μια προσωρινή λύση είναι διαθέσιμη για τους πελάτες που επηρεάζονται από την επιβολή αυτής της αλλαγής. Είναι διαθέσιμο ένα προσωρινό κλειδί μητρώου για την αλλαγή της συμπεριφοράς από Επιβολή σε Λειτουργία ελέγχου .
Σημαντικό: Η υποστήριξη για αυτό το κλειδί μητρώου θα καταργηθεί στις ενημερώσεις του Απριλίου 2026.
|
Διαδρομή μητρώου |
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais |
|
Type |
REG_DWORD |
|
Όνομα τιμής |
DisableCapiOverrideForRSA |
|
Τιμή δεδομένων |
|
Παραπομπές
Χώρος αποθήκευσης και ανάκτηση κλειδιών
Συνάρτηση CryptAcquireCertificatePrivateKey (wincrypt.h)
.