Megosztás a következőn keresztül:


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.

cng kulcstároló-szolgáltató

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.

CNG-kulcstároló függvények

Kulcstároló tulajdonságazonosítói

NCryptFinalizeKey