Kulcstárolás és -lekérés
Kulcstároló architektúra
A CNG egy olyan modellt biztosít a titkos kulcsok tárolásához, amely lehetővé teszi az olyan titkosítási funkciókat használó alkalmazások létrehozásának jelenlegi és jövőbeli igényeihez való alkalmazkodást, mint a nyilvános vagy titkos kulcsok titkosítása, valamint a kulcsanyagok tárolásának követelményei. A kulcstároló útválasztó a modell központi rutinja, és a Ncrypt.dll-ben van implementálva. Az alkalmazás a kulcstároló útválasztón keresztül fér hozzá a rendszer kulcstároló-szolgáltatóihoz (KSP-khez), amely elrejti a részleteket, például a kulcselkülönítést mind az alkalmazástól, mind a társzolgáltatótól. Az alábbi ábra a CNG-kulcselkülönítési architektúra kialakítását és működését mutatja be.
A közös feltételek (CC) követelményeinek való megfelelés érdekében a hosszú élettartamú kulcsokat el kell különíteni, hogy soha ne legyenek jelen az alkalmazásfolyamatban. A CNG jelenleg támogatja az aszimmetrikus titkos kulcsok tárolását a Windows Server 2008 és a Windows Vista rendszerhez mellékelt Microsoft-szoftver KSP használatával, és alapértelmezés szerint telepítve van.
A kulcselkülönítés alapértelmezés szerint engedélyezve van a Windows Server 2008 és a Windows Vista rendszerben. A kulcselkülönítési funkció ezek előtt nem érhető el a platformokon. Emellett a külső KSP-k nem töltődnek be a kulcselkülönítési szolgáltatásba (LSA-folyamat). Csak a Microsoft KSP van betöltve a kulcselkülönítési szolgáltatásba.
Az LSA-folyamat a fő elkülönítési folyamat a teljesítmény maximalizálása érdekében. A titkos kulcsokhoz való hozzáférés a kulcstároló útválasztón keresztül történik, amely a titkos kulcsok kezelésére és használatára szolgáló funkciók átfogó készletét teszi elérhetővé.
A CNG a tárolt kulcs nyilvános részét a privát résztől elkülönítve tárolja. A kulcspár nyilvános része a kulcselkülönítési szolgáltatásban is megmarad, és helyi távoli eljáráshívással (LRPC) érhető el. A kulcstároló útválasztó LRPC-t használ a kulcselkülönítési folyamatba való behíváskor. A titkos kulcsokhoz való minden hozzáférés a titkos kulcs útválasztón keresztül történik, és a CNG által auditálva van.
A fentiekben leírtak szerint a hardveres tárolóeszközök széles köre támogatott. Minden esetben az összes ilyen tárolóeszköz felülete azonos. Magában foglalja a különböző titkos kulcsműveleteket, valamint a kulcstároláshoz és -kezeléshez kapcsolódó függvényeket.
A CNG a titkosítási kulcsok létrehozásához, tárolásához és lekéréséhez használt API-k készletét biztosítja. Ezen API-k listáját CNG Key Storage Functionscímű cikkben találja.
Kulcstípusok
A CNG a következő kulcstípusokat támogatja:
- Diffie-Hellman nyilvános és titkos kulcsokat.
- Digitális aláírási algoritmus (DSA, FIPS 186-2) nyilvános és titkos kulcsok.
- RSA (PKCS #1) nyilvános és titkos kulcsok.
- Számos régi (CryptoAPI) nyilvános és privát kulcs.
- Elliptikus görbe titkosítása nyilvános és titkos kulcsok.
Támogatott algoritmusok
A CNG a következő fő algoritmusokat támogatja.
Algoritmus | Kulcs/kivonat hossza (bitek) |
---|---|
RSA | 512–16384, 64 bites lépésekben |
DH | 512–16384, 64 bites lépésekben |
DSA | 512–1024, 64 bites lépésekben |
ECDSA | P-256, P-384, P-521 (NIST-görbék) |
ECDH | P-256, P-384, P-521 (NIST-görbék) |
MD2 | 128 |
MD4 | 128 |
MD5 | 128 |
SHA-1 | 160 |
SHA-256 | 256 |
SHA-384 | 384 |
SHA-512 | 512 |
Kulcskönyvtárak és fájlok
A Microsoft örökölt CryptoAPI CSP-k a következő könyvtárakban tárolják a titkos kulcsokat.
Kulcs típusa | Címtárak |
---|---|
Privát felhasználó | %APPDATA%\Microsoft\Crypto\RSA\felhasználói SID-\ %APPDATA%\Microsoft\Crypto\DSS\felhasználói SID-\ |
Helyi rendszer privát | %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\ %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\ |
Privát helyi szolgáltatás | %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\ %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\ |
Privát hálózati szolgáltatás | %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\ %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\ |
Megosztott privát | %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys |
A CNG a következő könyvtárakban tárolja a titkos kulcsokat.
Kulcs típusa | Címtár |
---|---|
Privát felhasználó | %APPDATA%\Microsoft\Crypto\Keys |
Helyi rendszer privát | %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys |
Privát helyi szolgáltatás | %WINDIR%\ServiceProfiles\LocalService |
Privát hálózati szolgáltatás | %WINDIR%\ServiceProfiles\NetworkService |
Megosztott privát | %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys |
Az alábbiakban néhány különbséget mutatunk a CryptoAPI és a CNG kulcstárolók között.
- A CNG más fájlneveket használ a kulcsfájlokhoz, mint amilyeneket a Rsaenh.dll és Dssenh.dll örökölt CSP-k készítenek. Az örökölt kulcsfájlok .key kiterjesztéssel is rendelkeznek, de a CNG-kulcsfájlok nem rendelkeznek a .key kiterjesztéssel.
- A CNG teljes mértékben támogatja a Unicode-kulcstárolók nevét; A CNG a Unicode-tárolónév kivonatát használja, míg a CryptoAPI az ANSI-tárolónév kivonatát használja.
- A CNG rugalmasabb az RSA-kulcspárok tekintetében. A CNG például támogatja a 32 bitesnél nagyobb nyilvános kitevőket, és támogatja azokat a kulcsokat, amelyekben a p és a q különböző hosszúságúak.
- A CryptoAPI-ban a kulcstárolófájl egy olyan könyvtárban van tárolva, amelynek a neve a felhasználó SID-jének szöveges megfelelője. A CNG-ben már nem ez a helyzet, ami megszünteti a felhasználók egyik tartományból a másikba való áthelyezésének nehézségét anélkül, hogy elveszítené az összes titkos kulcsukat.
- A CNG KSP és a kulcsnevek MAX_PATH Unicode-karakterekre korlátozódnak. A CryptoAPI CSP és a kulcsnevek csak MAX_PATH ANSI-karakterekre korlátozódnak.
- A CNG lehetővé teszi a felhasználó által definiált kulcstulajdonságok használatát. A felhasználók létrehozhatnak és társíthatnak egyéni tulajdonságokat a kulcsokkal, és tárolhatják őket tartós kulcsokkal.
Kulcsok megőrzésekor a CNG két fájlt hozhat létre. Az első fájl az új CNG formátumban tartalmazza a titkos kulcsot, és mindig létrejön. Ezt a fájlt az örökölt CryptoAPI CSP-k nem használhatják. A második fájl ugyanazt a titkos kulcsot tartalmazza az örökölt CryptoAPI-kulcstárolóban. A második fájl megfelel a Rsaenh.dlláltal használt formátumnak és helynek. A második fájl létrehozása csak akkor történik meg, ha a NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG jelző akkor van megadva, amikor a NCryptFinalizeKey függvényt meghívják egy RSA-kulcs véglegesítéséhez. Ez a funkció a DSA és a DH-kulcsok esetében nem támogatott.
Amikor egy alkalmazás megkísérli megnyitni a meglévő, megőrzött kulcsot, a CNG először megkísérli megnyitni a natív CNG-fájlt. Ha ez a fájl nem létezik, a CNG megkísérli megtalálni a megfelelő kulcsot az örökölt CryptoAPI-kulcstárolóban.
Ha a CryptoAPI-kulcsokat egy forrásgépről egy célgépre helyezi át vagy másolja a Windows User State Migration Tool (USMT) használatával, a CNG nem fér hozzá a célgép kulcsaihoz. Az ilyen migrált kulcsok eléréséhez a CryptoAPI-t kell használnia.