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


Titkosítási kulcsok

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.