Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tyto informace použijte jako referenci při navrhování produktů tak, aby používaly stejná rozhraní API, algoritmy, protokoly a délky klíčů, které Microsoft vyžaduje u svých vlastních produktů a služeb. Většina obsahu je založená na vlastních interních standardech zabezpečení Microsoftu, které se používají k vytvoření životního cyklu vývoje zabezpečení.
Vývojáři na jiných platformách než Windows můžou tato doporučení využívat. I když se názvy rozhraní API a knihoven můžou lišit, osvědčené postupy zahrnující volbu algoritmu, délku klíče a ochranu dat jsou na různých platformách podobné.
Doporučení k protokolu zabezpečení, algoritmu a délce klíčů
Verze TLS/SSL
Produkty a služby by měly používat kryptograficky zabezpečené verze protokolu TLS/SSL:
Musí být povolený protokol TLS 1.3.
Protokol TLS 1.2 je možné povolit, aby se zlepšila kompatibilita se staršími klienty.
Musí být zakázané protokoly TLS 1.1, TLS 1.0, SSL 3 a SSL 2.
Symetrické blokové šifry, režimy šifer a inicializační vektory
Blokové šifry
Pro produkty používající symetrické blokové šifry:
Vyžaduje se Advanced Encryption Standard (AES).
Všechny ostatní blokové šifry, včetně 3DES (Triple DES/TDEA) a RC4 musí být nahrazeny, pokud se používají k šifrování.
U algoritmů šifrování symetrických bloků doporučujeme podporovat 256bitové klíče, ale povolit až 128 bitů. Jediný blokový šifrovací algoritmus doporučený pro nový kód je AES (AES-128, AES-192 a AES-256 jsou všechny přijatelné, a to znamená, že AES-192 nemá optimalizaci u některých procesorů).
Režimy šifry
Symetrické algoritmy můžou fungovat v různých režimech, z nichž většina spojuje operace šifrování v následných blocích prostého textu a šifrového textu.
Symetrické blokové šifry by se měly používat s jedním z následujících režimů šifr:
Některé jiné režimy šifrování, takové jako ty, které budou následovat, skrývají úskalí v implementaci, což zvyšuje pravděpodobnost jejich nesprávného použití. Zejména je třeba zabránit režimu elektronické kódové knihy (ECB). Opětovné použití stejného inicializačního vektoru (IV) s blokovými šiframi v režimech streamovaných šifer, jako je CTR, může způsobit odhalení šifrovaných dat. Pokud se používá některý z následujících režimů, doporučuje se další kontrola zabezpečení:
Výstupní zpětná vazba (OFB)
Šifrová zpětná vazba (CFB)
Počítadlo (CTR)
Cokoli jiného, co není v předchozím seznamu doporučených položek
Inicializační vektory (IV)
Všechny symetrické blokové šifry by se také měly používat s kryptograficky silným náhodným číslem jako inicializační vektor. Vektory inicializace by nikdy neměly být konstantní nebo predikovatelnou hodnotou. Doporučení pro generování kryptograficky silných náhodných čísel najdete v tématu Generátory náhodných čísel.
Při provádění více operací šifrování by se vektory inicializace nikdy neměly opakovaně používat. Opakované použití může odhalit informace o šifrovaných datech, zejména při použití streamovacích šifrovacích režimů, jako je výstupní zpětná vazba (OFB) nebo čítač (CTR).
doporučení pro AES-GCM a AES-CCM
AES-GCM (Galois/Counter Mode) a AES-CCM (Counter with CBC-MAC) se běžně používají jako režimy ověřeného šifrování. Kombinují důvěrnost a ochranu integrity, což je užitečné pro zabezpečenou komunikaci. Jejich křehkost však spočívá v opakovaném použití. Pokud se použije stejné nonce (inicializační vektor) dvakrát, může to vést ke katastrofickým důsledkům.
Doporučujeme postupovat podle pokynů, které nejsou popsány v nist SP 800-38D, doporučení pro režimy blokové šifry: Galois/Counter Mode (GCM) a GMAC, přičemž zvláštní pozornost věnujte částem 8.1, 8.2 a 8.3 týkajícím se požadavků na jedinečnost klíče a nece/IV.
Další možností je vygenerovat jedinečné klíče AES-GCM/CCM pro každou zašifrovanou zprávu, čímž se efektivně omezí maximální počet vyvolání na 1. Tento přístup se doporučuje pro šifrování dat uložených v klidu, kde by použití čítače nebo zajištění možnosti sledovat maximální počet použití pro daný klíč bylo nepraktické.
Pro šifrování dat v klidu můžete také zvážit použití AES-CBC s ověřovacím kódem zprávy (MAC) jako alternativu s použitím schématu Encrypt-then-MAC a ujistit se, že pro šifrování a MAC používáte samostatné klíče.
Ověření integrity
Jedná se o běžnou mylnou představu, že šifrování ve výchozím nastavení poskytuje důvěrnost i záruku integrity. Mnoho šifrovacích algoritmů neposkytuje žádnou kontrolu integrity a může být zranitelné vůči útokům na manipulaci. Před odesláním a po přijetí je nutné provést další kroky k zajištění integrity dat.
Pokud nemůžete použít ověřený šifrovací algoritmus s přidruženými daty (AEAD), jako je AES-GCM, alternativou by bylo ověření integrity pomocí ověřovacího kódu zprávy (MAC) pomocí schématu Encrypt-then-MAC a ujistěte se, že používáte samostatné klíče pro šifrování a mac.
Použití samostatného klíče pro šifrování a mac je nezbytné. Pokud není možné uložit dva klíče, je platnou alternativou odvození dvou klíčů z hlavního klíče pomocí vhodné funkce odvození klíče (KDF), jedné pro účely šifrování a jednoho pro MAC. Další informace naleznete v tématu [SP 800-108 Rev. 1, doporučení pro odvození klíče pomocí pseudonáhodných funkcí | CSRC (nist.gov)](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf.
Asymetrické algoritmy, délky klíčů a režimy odsazení
šifrování RSA
RSA lze použít pro přenos klíčů, výměnu klíčů a podpisy.
Šifrování RSA by mělo používat režimy odsazení OAEP nebo RSA-PSS.
Existující kód může pro podepisování použít režim odsazení PKCS #1 v1.5.
Použití PKCS#1 v1.5 pro šifrování není povoleno.
Použití vycpávání nulami se nedoporučuje.
Minimální délka 2048bitového klíče je, ale doporučujeme podporovat délku 3072bitového klíče.
ECDSA a ECDH
ECDH-založené výměny klíčů a podpisy založené na ECDSA by měly používat jednu ze tří křivek schválených NIST (P-256, P-384 nebo P521).
Podpora P-256 by měla být považována za minimum, ale doporučujeme podporovat P-384.
ML-DSA
Musí používat standard FIPS 204. Nepoužívejte verze v konceptu standardu.
Doporučuje se používat ML-DSA v kombinaci s klasickým podpisovým algoritmem (tj. ECDSA nebo RSA). Pro interoperabilitu se upřednostňuje použití kombinátorů definovaných pomocí IETF (draft) nebo jiných standardů.
Pro ML-DSA je platným hybridním (složeným) mechanismem podepsat stejná data pomocí modelu Classic i ML-DSA a ověřit obojí (pokud se ověření nezdaří, ověření selže).
ML-KEM
Musí používat standard FIPS 203. Nepoužívejte verze v konceptu standardu.
Doporučuje se použít kombinační nebo hybridní kryptografický systém kombinující ML-KEM a klasický algoritmus KEM (tj. ECDH). Pro interoperabilitu se upřednostňuje použití kombinátorů definovaných pomocí IETF (draft) nebo jiných standardů.
SLH-DSA
Musí používat standard FIPS 205. Nepoužívejte verze v konceptu standardu.
Všechny SLH-DSA sady parametrů jsou povolené, ale doporučená sada parametrů bude záviset na případu použití.
Žádný známý rozdíl zabezpečení mezi verzemi SHA-2 a SHAKE (SHA-3)
LMS a XMSS
Pro ověření podpisu je bezpečné podporovat LMS nebo XMSS.
Před implementací/nasazením infrastruktury pro podepisování a generování klíčů důrazně doporučujeme konzultovat s odborníkem na danou problematiku. Není známo žádné slabosti, ale lidské indukované chyby je velmi možné a snadné, protože je důležité správně spravovat stav.
Celočíselná Diffie-Hellman
- I když je celočíselná Diffie-Hellman (DH) schválena pro výměnu klíčů, není to nejúčinnější moderními standardy. Důrazně doporučujeme místo toho používat ECDH.
- Doporučuje se délka klíče >= 2048 bitů.
- Parametry skupiny by měly být buď dobře známou pojmenovanou skupinou (například RFC 7919), nebo vygenerované důvěryhodnou stranou a ověřenou před použitím.
Životnost klíčů
Definujte kryptoperiodu pro všechny klíče.
- Příklad: Symetrický klíč pro šifrování dat, často označovaný jako šifrovací klíč dat nebo klíč DEK, může mít období použití až dva roky pro šifrování dat, označované také jako období použití původce. Můžete definovat, že má platné období využití pro dešifrování po dobu tří dalších let, označované také jako období využití příjemce.
Měli byste poskytnout mechanismus nebo zavést proces pro nahrazení klíčů a tím dosáhnout omezené doby aktivního použití. Po skončení aktivní životnosti nesmí být klíč použit k vytváření nových dat (například pro šifrování nebo podepisování), ale může se stále používat ke čtení dat (například k dešifrování nebo ověření).
Generátory náhodných čísel
Všechny produkty a služby by měly používat kryptograficky zabezpečené generátory náhodných čísel, pokud je vyžadována náhodnost.
CNG
- Použijte BCryptGenRandom s příznakem BCRYPT_USE_SYSTEM_PREFERRED_RNG.
Win32/64
Starší verze kódu může v režimu jádra používat RtlGenRandom.
Nový kód by měl používat BCryptGenRandom nebo CryptGenRandom.
Funkce C Rand_s() se také doporučuje (což ve Windows volá CryptGenRandom).
Rand_s() je bezpečná a výkonná náhrada za Rand().
Rand() nesmí být používán pro žádné kryptografické aplikace.
platforma .NET
- Použijte RandomNumberGenerator.
PowerShell
Aplikace pro Windows Store
- Aplikace pro Windows Store mohou používat CryptographicBuffer.GenerateRandom nebo CryptographicBuffer.GenerateRandomNumber.
Nedoporučuje se
Nezabezpečené funkce související s generováním náhodných čísel zahrnují: rand, System.Random (.NET), GetTickCount, GetTickCount64a Get-Random (PowerShell cmdlet).
Použití algoritmu náhodného generátoru náhodných čísel se dvěma třemi tečkami ("DUAL_E_DRBG") není povoleno.
Kryptografické knihovny podporované platformou Windows
Na platformě Windows microsoft doporučuje používat kryptografická rozhraní API integrovaná do operačního systému. Na jiných platformách se můžou vývojáři rozhodnout vyhodnotit neplatformní kryptografické knihovny pro použití. Obecně platí, že kryptografické knihovny platformy se aktualizují častěji, protože se dodávají jako součást operačního systému, a ne se sbalují s aplikací.
Jakékoli rozhodnutí o využití týkající se platformy a neplatformních kryptografických služeb by mělo být řízeno následujícími požadavky:
Knihovna by měla být aktuální podporovanou verzí bez známých bezpečnostních zranitelností.
Měly by se podporovat nejnovější protokoly zabezpečení, algoritmy a délky klíčů.
(Volitelné) Knihovna by měla být schopná podporovat starší protokoly nebo algoritmy zabezpečení pouze kvůli zpětné kompatibilitě.
Nativní kód
Crypto Primitives: Pokud je vaše verze ve Windows, použijte CNG, pokud je to možné.
Ověření podpisu kódu: WinVerifyTrust je podporované rozhraní API pro ověřování podpisů kódu na platformách Windows.
Ověření certifikátu (jak se používá v omezeném ověřování certifikátů pro podepisování kódu nebo TLS/DTLS): ROZHRANÍ API CAPI2; Například CertGetCertificateChain a CertVerifyCertificateChainPolicy.
Funkce odvozování klíčů
Odvození klíče je proces odvozování materiálu kryptografického klíče ze sdíleného tajného klíče nebo existujícího kryptografického klíče. Produkty by měly používat doporučené klíčové odvozovací funkce. Odvozování klíčů z hesel zvolených uživatelem nebo hashování hesel pro úložiště v ověřovacím systému je zvláštní případ, na který se tyto pokyny nevztahují; by se měli obrátit na odborníka.
Následující standardy určují doporučené funkce KDF:
NIST SP 800-108 (revize 1): Doporučení pro odvození klíče pomocí pseudonáhodných funkcí. Zejména KDF v režimu čítače s HMAC jako pseudonáhodnou funkcí
NIST SP 800-56A (revize 3): Doporučení pro Pair-Wise schémata vytváření klíčů využívající diskrétní logaritmus kryptografii.
K odvození klíčů z existujících klíčů použijte BCryptKeyDerivation API s jedním z algoritmů:
BCRYPT_SP800108_CTR_HMAC_ALGORITHM
BCRYPT_SP80056A_CONCAT_ALGORITHM
K odvození klíčů ze sdíleného tajného kódu (výstup smlouvy o klíči) použijte rozhraní BCryptDeriveKey API s jedním z následujících algoritmů:
BCRYPT_KDF_SP80056A_CONCAT
BCRYPT_KDF_HMAC
Ověření certifikátu
Produkty, které používají protokol TLS nebo DTLS, by měly plně ověřit certifikáty X.509 entit, ke kterým se připojují. Tento proces zahrnuje ověření následujících částí certifikátu:
Název domény.
Data platnosti (datum začátku i konce platnosti).
Stav odvolání.
Použití (například Ověřování serveru pro servery, Ověřování klienta pro klienty).
Řetězec důvěry. Certifikáty by měly být zřetězené s kořenovou certifikační autoritou (CA), které jsou důvěryhodné platformou nebo explicitně nakonfigurované správcem.
Pokud některý z těchto ověřovacích testů selže, měl by produkt ukončit připojení k entitě.
Nepoužívejte certifikáty podepsané svým držitelem. Vlastnoručně podepsané ze své podstaty nevyvolávají důvěru, neposkytují podporu pro odvolání ani podporu pro obnovení klíčů.
Kryptografické hash-funkce
Produkty by měly používat řadu hash algoritmů SHA-2 (SHA-256, SHA-384 a SHA-512). Zkrácení kryptografických hodnot hash pro účely zabezpečení na méně než 128 bitů není povoleno. I když je použití SHA-256 minimální, doporučujeme podporovat SHA-384.
Algoritmy hašování MAC/HMAC/na základě klíče
Ověřovací kód zprávy (MAC) je část informací připojená ke zprávě, která umožňuje příjemci ověřit pravost odesílatele i integritu zprávy pomocí tajného klíče.
Použití MAC založeného na hash (HMAC) nebo na blokově šifrovaného MAC se doporučuje, za předpokladu, že všechny základní algoritmy pro hash nebo symetrické šifrování jsou také doporučené; aktuálně to zahrnuje funkce HMAC-SHA2 (HMAC-SHA256, HMAC-SHA384 a HMAC-SHA512). I když je využití HMAC-SHA256 minimální, doporučujeme podporovat HMAC-SHA384.
Zkrácení HMAC na méně než 128 bitů se nedoporučuje.
Aspekty návrhu a provozu
Měli byste poskytnout mechanismus pro nahrazení kryptografických klíčů podle potřeby. Klíče by se měly nahradit, jakmile dosáhnou konce aktivní životnosti nebo dojde k ohrožení kryptografického klíče.
- Pokaždé, když prodloužíte certifikát, měli byste ho obnovit novým klíčem (znovu vytvořit klíč).
Produkty, které k ochraně dat používají kryptografické algoritmy, by měly obsahovat dostatek metadat spolu s tímto obsahem, aby podporovaly migraci na různé algoritmy v budoucnu. Tato metadata by měla obsahovat použitý algoritmus, velikosti klíčů a režimy odsazení.
- Další informace o kryptografické flexibilitě naleznete v článku Kryptografická flexibilita.
Pokud jsou dostupné, měly by produkty používat zavedené kryptografické protokoly poskytované platformou místo jejich opětovného vytvoření, včetně formátů podepisování (například použití standardního, existujícího formátu).
Neohlašujte selhání kryptografických operací koncovým uživatelům. Při vracení chyby vzdálenému volajícímu (například webovému klientovi nebo klientovi ve scénáři klienta-server) použijte pouze obecnou chybovou zprávu.
- Vyhněte se poskytování zbytečných informací, například přímé hlášení chyb mimo rozsah nebo nesprávné délky. Protokolovat podrobné chyby pouze na serveru a pouze v případě, že je povoleno podrobné protokolování.
Pro každý návrh zahrnující následující položky důrazně doporučujeme provést další kontrolu zabezpečení:
Nový protokol, který se primárně zaměřuje na zabezpečení (například ověřovací nebo autorizační protokol)
Nový protokol, který používá kryptografii novým nebo nestandardním způsobem. Mezi příklady aspektů patří:
Bude produkt, který implementuje protokol, v rámci implementace protokolu volat nějaká kryptografická rozhraní API nebo metody?
Závisí protokol na jiném protokolu použitém k ověřování nebo autorizaci?
Bude protokol definovat formáty úložiště pro kryptografické prvky, jako jsou klíče?
Certifikáty podepsané svým držitelem se nedoporučují. Použití certifikátu podepsaného svým držitelem, jako je použití nezpracovaného kryptografického klíče, ze své podstaty neposkytuje uživatelům ani správcům žádný základ pro rozhodování o důvěryhodnosti.
- Naproti tomu použití certifikátu od důvěryhodné certifikační autority jasně ozřejmí základ pro spoléhání se na přidružený privátní klíč a umožní odvolání a aktualizaci, pokud dojde k selhání zabezpečení.