Ključi in njihova hramba
graph TD
NEW["Na novo izdano potrdilo"]
PEM["Potrdilo, naloženo iz PEM ali DER"]
PFX["Datoteka PFX, PBES2 z AES-256"]
STORE["Datoteka s ključem ob shrambi potrdil"]
OS["Shramba ključev operacijskega sistema: DPAPI ali Secret Service"]
BAK["Varnostna kopija, Argon2id in AES-256-GCM"]
TABLE["Preglednica ključev procesa, po prstnem odtisu"]
NEW -- "samodejno" --> TABLE
PEM -- "metoda Attach" --> TABLE
PFX -- "ImportPfx" --> TABLE
TABLE -- "ExportPfx" --> PFX
TABLE -- "X509Store.Add s CryptoMode" --> STORE
STORE -- "X509Store.Find z restorePqKeys" --> TABLE
OS -. "ščiti" .-> STORE
STORE -- "BackupAllPqKeys" --> BAK
BAK -- "RestoreFromBackup" --> STORESlika: Zasebni ključi PQ so med izvajanjem v preglednici procesa. Trajno so shranjeni v datoteki PFX ali v datoteki s ključem ob shrambi potrdil, ki jo ščiti shramba ključev operacijskega sistema. Varnostna kopija združi vse datoteke s ključi pod enim geslom.
X509Certificate2 iz .NET ne pozna ključev ML-DSA in ML-KEM, zato jih ne more nositi. Knjižnica zato
zasebne ključe PQ hrani zunaj potrdila in jih potrdilu dodeli prek njegovega prstnega odtisa.
Ključne funkcije
- Samodejna dodelitev ob izdaji: na novo izdano potrdilo najde svoj zasebni ključ PQ brez dodatnega klica.
- Naknadna dodelitev z metodami Attach za potrdila, naložena iz datotek brez ključa.
- Prenos kot datoteka PFX z
ExportPfxinImportPfx, šifrirana s PBES2 in AES-256. - Hramba ob shrambi potrdil z razširitvami za
X509Store, ki jo v sistemih Windows in Linux ščiti shramba ključev operacijskega sistema. - Varnostna kopija vseh shranjenih ključev v datoteko, zaščiteno z geslom, s
PqKeyStoreManager, ki jo je mogoče obnoviti na drugem računalniku in v drugem računu.
Osnovni koncepti
Preglednica ključev procesa
Ko knjižnica izda potrdilo z delom PQ, zasebni ključ PQ shrani v preglednico, ki velja za ves proces.
Ključ preglednice je prstni odtis potrdila. Vsak objekt X509Certificate2 z enako vsebino zato najde isti
ključ, tudi na novo naložena kopija. Vnosi ostanejo do konca procesa.
Potrdilo, ki ga je izdal drug proces in je na voljo kot datoteka PEM ali DER, v preglednici nima ključa. Ključ mu dodelite z metodo, ki ustreza vrsti ključa:
| Ključ | Branje | Dodelitev |
|---|---|---|
| Ključ ML-DSA hibridnega potrdila | GetAlternativePrivateMLDsaKey | AttachAlternativePrivateMLDsaKey |
| Ključ ML-DSA čistega potrdila ML-DSA | GetPrivateMLDsaKey | AttachPrivateMLDsaKey |
| Ključ ML-KEM | GetPrivateMLKemKey | AttachPrivateMLKemKey |
| Sestavljeni ključ ML-KEM | GetPrivateCompositeMLKemKey | AttachPrivateCompositeMLKemKey |
Metode za branje vrnejo null, če proces ključa ne pozna. Lastnost HasPrivateKey iz .NET se nanaša samo
na klasične ključe; pri čistem potrdilu ML-DSA ostane false tudi po dodelitvi.
CopyWithPrivateKey(privateKey, mode) tako kot metoda .NET doda samo klasični ključ. Kopija ima enak prstni
odtis in zato najde že dodeljeni ključ PQ. Ključa PQ metoda ne ustvari; s CryptoMode.Hybrid samo preveri,
ali potrdilo nosi alternativni ključ ML-DSA.
Datoteke PFX
ExportPfx zapiše potrdilo, klasični ključ in ključ PQ v datoteko, zaščiteno z geslom.
X509Certificate2ExportExtensions.ImportPfx jo prebere in ključ PQ znova dodeli. Tako ključe prenašate med
procesi in računalniki.
S ključem PQ ExportPfx vse dele datoteke šifrira po PBES2 (RFC 8018): AES-256-CBC s ključem iz PBKDF2 s
HMAC-SHA-256 in 2048 ponovitvami; kontrolno vsoto datoteke (MAC) izračuna SHA-256. To je privzeta nastavitev
OpenSSL 3.6. Preobremenitev s PbeParameters postopek in število ponovitev izbere sama. Podrobnosti:
Prenos potrdil s ključem PQ v datoteki PFX.
Hramba ob shrambi potrdil
Shramba potrdil operacijskega sistema ključev PQ ne sprejme. X509Store.Add(certificate, mode) zato potrdilo
kot običajno shrani v shrambo, ključ PQ pa dodatno zapiše v datoteko <prstni odtis>.pqkey v mapi
WKL.Crypto/PqKeys pod lokalno mapo podatkov aplikacij računa (%LOCALAPPDATA% v sistemu Windows,
~/.local/share v sistemu Linux). X509Store.Find(findType, findValue, validOnly, restorePqKeys: true)
datoteko ob iskanju prebere in ključ znova dodeli.
Vsebino datoteke za prijavljeni račun ščiti shramba ključev operacijskega sistema:
| Operacijski sistem | Zaščita |
|---|---|
| Windows | vmesnik Windows Data Protection API (DPAPI) za prijavljeni račun |
| Linux s storitvijo Secret Service (na primer GNOME Keyring ali KWallet) | AES-256-GCM z naključnim ovojnim ključem, ki ga hrani Secret Service računa; datoteka je vezana na prstni odtis svojega potrdila |
| macOS, Linux brez storitve Secret Service | brez hrambe: X509Store.Add z načinom PQ in PersistPqKeys sprožita PlatformNotSupportedException, shramba potrdil ostane nespremenjena |
V sistemih brez shrambe ključev ključe hranite v datoteki PFX.
Datoteke s ključi, ki jih je zunaj sistema Windows zapisala starejša različica knjižnice, RestorePqKeys
še vedno prebere. Če je shramba ključev na voljo, metoda datoteko ob tem takoj znova zapiše v novi obliki.
Varnostna kopija
PqKeyStoreManager.BackupAllPqKeys(backupPath, password) dešifrira vse datoteke s ključi računa in ključe
zapiše v datoteko varnostne kopije:
- Ključ iz gesla izpelje Argon2id (RFC 9106) s 3 prehodi, 64 MiB pomnilnika in vzporednostjo 4.
- Vsebino šifrira in zaščiti AES-256-GCM; spremenjeno datoteko obnova zavrne.
RestoreFromBackup(backupPath, password) datoteke s ključi ustvari pod zaščito računa, v katerem teče.
Varnostno kopijo je zato mogoče obnoviti na drugem računalniku in v drugem računu. Varnostne kopije
starejše različice knjižnice metoda še vedno prebere; obnovijo se samo v izvirnem računu na izvirnem
računalniku.
CleanupOrphanedKeys izbriše datoteke s ključi, za katere shramba potrdil ne vsebuje več potrdila.
Omejitve
- Zaščita pred drugimi računi, ne pred lastnim. DPAPI in Secret Service ključ izdata vsakemu programu, ki teče v istem računu. Kdor lahko v računu izvaja kodo, lahko bere datoteke s ključi.
- Hramba samo v sistemu Windows in v sistemu Linux s storitvijo Secret Service. V drugih sistemih in v sejah Linux brez storitve Secret Service, na primer v storitvah in vsebnikih brez prijavne seje, knjižnica datoteke s ključem ne ustvari.
- Geslo samo ščiti datoteko PFX in varnostno kopijo. Kdor ima datoteko in geslo, ima ključe. Uporabite dolgo, naključno geslo in ga prenesite po drugi poti kot datoteko.
- Starejši programi za uvoz. Programi, ki ne berejo PBES2, na primer starejše različice sistema Windows, datoteke PFX ne uvozijo. Zanje
ExportPfxsPbeEncryptionAlgorithm.TripleDes3KeyPkcs12zapiše šibkejšo različico s Triple DES. - Ključi v pomnilniku. Zasebni ključi PQ so do konca procesa nešifrirani v pomnilniku procesa.
- Argon2id potrebuje OpenSSL 3.2 ali novejši. Varnostno kopiranje in obnova Argon2id izračunata v OpenSSL; vsaka različica z ML-DSA, torej od 3.5 naprej, to izpolnjuje. Če naložena namestitev Argon2id ne ponuja, varnostno kopiranje sproži
CryptographicException, ki navedeARGON2ID.