Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan használható a standard kulcslevezetési függvények a kulcsok származtatására, és hogyan titkosíthatja a tartalmat szimmetrikus és aszimmetrikus kulcsokkal.
Szimmetrikus kulcsok
A szimmetrikus kulcstitkosítás, más néven titkos kulcstitkosítás megköveteli, hogy a titkosításhoz használt kulcs visszafejtéshez is használható legyen. A SymmetricKeyAlgorithmProvider osztálysal megadhat egy szimmetrikus algoritmust, és létrehozhat vagy importálhat egy kulcsot. A CryptographicEngine osztály statikus metódusaival titkosíthatja és visszafejtheti az adatokat az algoritmus és a kulcs használatával.
A szimmetrikus kulcstitkosítás általában blokktitkosító algoritmusokat és módokat használ. A blokkok titkosítása egy szimmetrikus titkosítási függvény, amely rögzített méretű blokkokon működik. Ha a titkosítani kívánt üzenet hosszabb, mint a blokk hossza, blokk titkosítási módot kell használnia. A blokktitkosítási mód egy blokktitkosítással létrehozott szimmetrikus titkosítási függvény. Rögzített méretű blokkok sorozataként titkosítja az egyszerű szöveget. Az alkalmazások esetében a következő módok támogatottak:
- Az EKB (elektronikus kódkönyv) mód az üzenet minden blokkját külön titkosítja. Ez nem tekinthető biztonságos titkosítási módnak.
- A CBC (titkosítási blokkláncolás) mód az előző rejtjelszöveg-blokkot használja az aktuális blokk elrejtéséhez. Meg kell határoznia, hogy milyen értéket használjon az első blokkhoz. Ezt az értéket inicializálási vektornak (IV) nevezzük.
- A CCM (számláló és CBC-MAC) mód egyesíti a CBC blokk titkosítási módot egy üzenethitelesítő kóddal (MAC).
- A GCM (Galois számláló mód) mód kombinálja a számlálótitkosítási módot a Galois hitelesítési móddal.
Egyes módokhoz, például a CBC-hez, inicializálási vektort (IV) kell használnia az első rejtjelszöveg-blokkhoz. A következők gyakori inicializálási vektorok. A CryptographicEngine.Encrypt hívásakor adja meg a IV-et. A legtöbb esetben fontos, hogy a IV soha ne legyen újra felhasználva ugyanazzal a kulccsal.
- A Rögzített ugyanazt a IV-et használja az összes üzenet titkosításához. Ez a szivárgási információ és annak használata nem ajánlott.
- A számláló minden blokkhoz növeli a IV-et.
- A random létrehoz egy Pszeudorandom IV-et. A CryptographicBuffer.GenerateRandom használatával hozhatja létre a IV-et.
- Nonce-Generated minden egyes üzenethez egyedi számot használ a titkosításhoz. A nonce általában egy módosított üzenet vagy tranzakcióazonosító. A nonce-t nem kell titokban tartani, de soha nem szabad újra felhasználni ugyanazzal a kulccsal.
A legtöbb mód megköveteli, hogy az egyszerű szöveg hossza pontosan a blokkméret többszöröse legyen. Ez általában megköveteli, hogy a szöveget ki kell egészíteni a megfelelő hossz elérése érdekében.
Míg a blokk-titkosítások rögzített méretű adatblokkokat titkosítanak, a stream-titkosítások szimmetrikus titkosítási függvények, amelyek egyszerű szöveges biteket kombinálnak egy pszeudorandom bitfolyammal (az úgynevezett kulcsstreamdel) a titkosítási szöveg létrehozásához. Egyes blokk-titkosítási módok, például a kimeneti visszajelzési mód (OTF) és a számláló mód (CTR) hatékonyan stream-titkosítássá alakítják a blokkos titkosítást. Az olyan tényleges adatfolyam-titkosítások, mint például az RC4, általában nagyobb sebességgel működnek, mint a blokkos titkosítási módok, amelyek képesek elérni.
Az alábbi példa bemutatja, hogyan használhatja a SymmetricKeyAlgorithmProvider osztályt egy szimmetrikus kulcs létrehozásához és az adatok titkosításához és visszafejtéséhez.
Aszimmetrikus kulcsok
Az aszimmetrikus kulcs titkosítása, más néven nyilvános kulcs titkosítása nyilvános kulcsot és titkos kulcsot használ a titkosítás és a visszafejtés végrehajtásához. A kulcsok eltérőek, de matematikailag kapcsolódnak. A titkos kulcs általában titkos marad, és az adatok visszafejtésére szolgál, míg a nyilvános kulcsot az érdekelt felek között terjesztik, és az adatok titkosítására használják. Az aszimmetrikus titkosítás az adatok aláírásához is hasznos.
Mivel az aszimmetrikus titkosítás sokkal lassabb, mint a szimmetrikus titkosítás, ritkán használják nagy mennyiségű adat közvetlen titkosítására. Ehelyett általában a következő módon használják a kulcsok titkosítására.
- Alice megköveteli, hogy Bob csak titkosított üzeneteket küldjön neki.
- Alice létrehoz egy privát/nyilvános kulcspárt, megőrzi titkos kulcsát, és közzéteszi a nyilvános kulcsát.
- Bobnak van egy üzenete, amit Alice-nek akar küldeni.
- Bob létrehoz egy szimmetrikus kulcsot.
- Bob az új szimmetrikus kulcsával titkosítja alice-nek szóló üzenetét.
- Bob Alice nyilvános kulcsával titkosítja a szimmetrikus kulcsát.
- Bob elküldi a titkosított üzenetet és a titkosított szimmetrikus kulcsot Alice-nek (borítékolva).
- Alice a titkos kulcsát (a privát/nyilvános párból) használja Bob szimmetrikus kulcsának visszafejtéséhez.
- Alice Bob szimmetrikus kulcsával fejti vissza az üzenetet.
AsymmetricKeyAlgorithmProvider objektummal aszimmetrikus algoritmust vagy aláíró algoritmust adhat meg, rövid élettartamú kulcspárokat hozhat létre vagy importálhat, vagy importálhatja a kulcspár nyilvános kulcsrészét.
Kulcsok származtatása
Gyakran szükség van további kulcsok lekérésére egy megosztott titkos kódból. A KeyDerivationAlgorithmProvider osztály és a KeyDerivationParameters osztály alábbi speciális módszereinek egyikével levezetheti a kulcsokat.
| Objektum | Leírás |
|---|---|
| BuildForPbkdf2 | Létrehoz egy KeyDerivationParameters objektumot a 2. jelszóalapú kulcs származtatási függvényben (PBKDF2). |
| BuildForSP800108 | Létrehoz egy KeyDerivationParameters objektumot számláló módban, kivonatalapú üzenethitelesítési kód (HMAC) kulcs származtatási függvényben való használatra. |
| BuildForSP80056a | Létrehoz egy KeyDerivationParameters objektumot az SP800-56A kulcs származtatási függvényben való használatra. |
Windows developer