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.
Komponenty, které spotřebovávají IDataProtectionProvider, musí metodě CreateProtector předat jedinečný parametr účely. Účelem parametru je zabezpečení systému ochrany dat, protože poskytuje izolaci mezi kryptografickými příjemci, i když jsou kořenové kryptografické klíče stejné.
Pokud příjemce určuje účel, použije se řetězec účelu spolu s kořenovými kryptografickými klíči k odvození kryptografických podklíčů jedinečných pro daného příjemce. Tím se izoluje příjemce od všech ostatních kryptografických příjemců v aplikaci: žádná jiná komponenta nemůže číst jeho datové části a nemůže číst datové části jiných komponent. Tato izolace také činí neproveditelné celé kategorie útoků proti komponentě.
Ve výše uvedeném IDataProtector diagramu instance A a B nemohou číst datové části ostatních, pouze jejich vlastní.
Řetězec účelu nemusí být tajný. Měl by být jednoduše jedinečný v tom smyslu, že žádná jiná dobře chovaná komponenta nikdy neposkytne stejný účelový řetězec.
Návod
Použití jmenného prostoru a názvu typu komponenty, která spotřebovává rozhraní API ochrany dat, je dobrým pravidlem, protože v praxi tyto informace nebudou nikdy v konfliktu.
Komponenta vytvořená společností Contoso, která je zodpovědná za vytváření nosných tokenů, může jako svůj účelový řetězec používat Contoso.Security.BearerToken. Nebo, ještě lépe, může jako účelový řetězec použít Contoso.Security.BearerToken.v1. Přidání čísla verze umožňuje budoucí verzi používat Contoso.Security.BearerToken.v2 pro daný účel a různé verze by byly zcela izolované od sebe, pokud jde o datové přenosy.
Vzhledem k tomu, že účelem parametru CreateProtector je pole řetězců, bylo by výše uvedené pole zadáno jako [ "Contoso.Security.BearerToken", "v1" ]. To umožňuje vytvořit hierarchii účelů a otevře možnost scénářů s více tenanty se systémem ochrany dat.
Výstraha
Komponenty by neměly umožňovat, aby nedůvěryhodný uživatelský vstup byl jediným zdrojem vstupu pro účely řetězu.
Představte si například komponentu Contoso.Messaging.SecureMessage, která zodpovídá za ukládání zabezpečených zpráv. Pokud by komponenta zabezpečeného zasílání zpráv volala CreateProtector([ username ]), mohl by škodlivý uživatel vytvořit účet s uživatelským jménem "Contoso.Security.BearerToken" s cílem donutit tuto komponentu k volání CreateProtector([ "Contoso.Security.BearerToken" ]), a tím neúmyslně způsobit, že zabezpečený systém zasílání zpráv generuje datové části, které by mohly být vnímány jako ověřovací tokeny.
Lepší řetězec účelů pro komponentu pro zasílání zpráv by byl CreateProtector([ "Contoso.Messaging.SecureMessage", $"User: {username}" ]), což poskytuje správnou izolaci.
Izolace poskytovaná prvky IDataProtectionProvider, IDataProtector a jejich účely jsou následující:
Pro daný
IDataProtectionProviderobjektCreateProtectorvytvoříIDataProtectormetoda objekt jednoznačně svázaný sIDataProtectionProviderobjektem, který ho vytvořil, i s parametrem účelu, který byl předán metodě.Parametr účelu nesmí být null. (Pokud je účel zadán jako matice, znamená to, že pole nesmí mít nulovou délku a všechny prvky pole musí být nenulové.) Účel prázdného řetězce je technicky povolený, ale nedoporučuje se.
Dva argumenty jsou ekvivalentní tehdy a jen tehdy, když obsahují stejné řetězce (používající ordinalní porovnávač) ve stejném pořadí. Argument s jedním účelem je ekvivalentní odpovídajícímu poli s jedním prvkem.
Dva
IDataProtectorobjekty jsou ekvivalentní, pokud jsou vytvořeny z ekvivalentníchIDataProtectionProviderobjektů s ekvivalentními parametry.U daného
IDataProtectorobjektu voláníUnprotect(protectedData)vrátí původníunprotectedData, pokud a pouze v případěprotectedData := Protect(unprotectedData)ekvivalentníhoIDataProtectorobjektu.
Poznámka:
Nebereme v úvahu případ, kdy některá komponenta záměrně zvolí účelový řetězec, o kterém je známo, že je v konfliktu s jinou komponentou. Taková komponenta by se v podstatě považovala za škodlivou a tento systém nemá v úmyslu poskytovat bezpečnostní záruky v případě, že škodlivý kód už běží uvnitř pracovního procesu.