adattitkosítás

A következő lépéseket kell végrehajtania kódolásához és dekódolásához bizalmas adatok (amelyet részletesen a következő részben):

Válassza ki, és hozzon létre egy algoritmus.

Létrehoz és mentse a privát kulcsot.

Kódolására vagy dekódolására információk segítségével CryptoStream.

Bezár megfelelő forrás és a cél patakok.

Miután létrehozása és tesztelése hivatalos titkosítás osztályokat kell létrehozni egy adatbázist tároló minősített információk és írjuk be a kódot a kódolási és dekódolási titkos információt az adatbázisba.

kulcs menedzsment

Mielőtt rátérnénk dolgozni osztályok titkosítás részletei, akkor érdemes egy további ponttal: hol tartod a kulcsot? A használt kulcs kódolásához és dekódolásához - ez titok, ezért kell tárolni biztonságos helyen. fejlesztők gyakran úgy vélik, hogy a legjobb tartani a kulcsot a forráskódban. Azonban ez az egyik legsúlyosabb hiba, amit csak lehet tolerálható az alkalmazásban. Tegyük fel, hogy az alábbi kódot code class könyvtár, ami kell összeállítani egy bináris DLL-könyvtár:

Ez a fajta gombok könnyen nyitható, a szétszerelés eszközöket. Csak fuss ILDASM szerszám és elemzésére osztályban. Természetesen, ha biztosan tudja, hogy megtalálja a kulcsot, az alábbiak szerint:

adattitkosítás

Ha úgy gondolja, hogy ez a probléma csak a menedzselt kód, próbálja meg valami hasonlót menedzselt alkalmazások C ++. Hozzon létre egy osztályt, és tartalmaz egy titkos értéket állandó kérelmében. Mivel állandó tárolt értékeket egy külön szakaszban a belső végrehajtható fájlokat, kövesse az alábbi lépéseket:

Telepítse a Microsoft SDK készletet.

Nyisson meg egy parancssort, és írja be a következő parancsot:

Tehát, akkor feltétlenül kell vigyázni néhány kulcsfontosságú védelmet. Érdemes lehet a kulcs titkosításához, de akkor kell egy másik titkosítási kulcsot.

A Windows támogatja a beépített mechanizmus tárolására és védelmére privát kulcsokat. Ez a szerkezet egy gép generált kulcs telepítése során a rendszer és a kifejezetten adattitkosítás. Hozzáférés a gép kulcs csak helyi operációs rendszer (Local System Security Center). Természetesen a gép kulcs egyedi minden egyes létesítményre.

Az adatok védelme érdekében ezt a gombot a Windows felület előírt adatvédelmi API (DPAPI). Amikor az API-felület, amely nem rendelkezik közvetlen hozzáféréssel ezt a kulcsot, és egyszerűen olyan rendszert kódolására vagy dekódolására semmit az autó legfontosabb. Így lehetővé teszi, hogy megoldja a problémát, a kulcs kezelésére: az alkalmazás lehet használni, hogy titkosítja egy kulcs DPAPI. Erre a célra, a .NET-keretrendszer támogatja System.Security.Cryptography.ProtectedData osztályban. amelyet a következőképpen alkalmazzák:

Ahhoz, hogy használni ProtectedData osztály védi az érzékeny információkat, akkor kell hozzá egy hivatkozást az összeállítás System.Security.dll és importálja a System.Security.Cryptography névtérben. Lehetséges kontextusok LocalMachine és CurrentUser. Az első megoldás szerint a gép kulcs, és a második - generált kulcs a jelenlegi regisztrált felhasználó.

Ha a felhasználó rendszergazda a gép és van egy bizonyos ismeretekkel, tudja dekódolni az adatokat, írj egy programot, amely felhívja a funkció felett. Azonban ez még mindig határozottan felállítja a gáton, és megnehezíti a hozzáférést a kulcsot. És ha a felhasználó - nem rendszergazda, és nem jogosult dolgozni DPAPI van, akkor nem lesz képes dekódolni a titkosított adatokat a gép gombot.

Ne használja DPAPI titkosítja az adatokat egy adatbázisban. Bár könnyen kezelhető DPAPI a .NET Framework, ezzel a módszerrel, egy probléma: ha használ DataProtectionScope.LocalMachine beállítást, a titkosított adatok a géphez. Így, ha a gép elromlik, és az adatokat vissza kell állítani egy másik gépen, ebben az esetben meg kell egy biztonsági másolatot a kulcsot másik biztonságos helyen. Ahhoz, hogy használni DPAPI egy scriptet a web farm lesz szükség az alkalmazás futtatásához nevében a tartományi felhasználói fiókot, és alkalmazza a legfontosabb keletkezett a felhasználói profil (DataProtectionScope.CurrentUser). Nem volt szükséges, hogy egy tartományi felhasználói a cég belső hálózatához, ajánlott, hogy hozzon létre egy külön domain a Web farm.

Használata szimmetrikus algoritmusok

Mint már említettük, a szimmetrikus titkosítási algoritmusokat használja ugyanazt a kulcsot adatok kódolásához és dekódolásához. A következő részben, megtudhatja a részleteket létrehozunk egy szolgáltatási osztály kódolásához és dekódolásához érzékeny adatokat. Akkor ez az osztály lehet újra több webes alkalmazásokat. A létrehozott szolgáltatási osztály lesz a szerkezete az alábbi, és fel lehet használni a titkosítás és dekódolás string adatokat. (Kérjük, vegye figyelembe, hogy az alapján ProtectKey kód lesz írva később, a döntéshozó, a kulcs titkosításához a DPAPI vagy sem. Ha ez igaz, azt jelzi, hogy a legfontosabb az, hogy védeni kell DPAPI.)

Mivel ez az osztály egy szolgáltatás csak statikus tagok, akkor lehet statikus, így senki nem tud létrehozni példányok. Az osztály biztosítja a képességét, hogy adja meg a nevét az algoritmus (DES, TripleDES, Rijndaei vagy RC2) a AlgorithmName tulajdon.

Ugyancsak támogatja a működését generál egy új kulcsot, a kulcs olvasni a fájlt közvetlenül a példány legfontosabb jellemzője az algoritmus, valamint az adatok titkosítás és dekódolás. Ahhoz, hogy használni ezt az osztályt szükségességét, hogy megfelelő adja meg a nevét az algoritmus, majd generál egy kulcsot, ha nem létezik. Akkor csak meg kell hívni módszereket és EncryptData DescryptData, ami már önmagában is okozhat ReadKey eljárás inicializálni az algoritmust. ProtectKey funkció lehetővé teszi a felhasználó számára, hogy adjon meg egy osztály, akár, hogy megvédje a DPAPI kulcs szükséges eszközzel.

Titkosítási kulcsokat lehet generálni egy osztály algoritmusok. GenerateKey módszer a következőképpen néz ki:

GenerateKey módszer (a SymmetricAlgorithm osztály) létrehoz egy új kulcsot az algoritmust, amely előállítja a szigorú véletlen kriptográfiai száma keresztül GenerateKey () metódus, hogy hozzon létre egy olyan algoritmus, és inicializálja a kulcsfontosságú tulajdonságát az új kulcsot. Ha a hívó fél székhelye igaz ProtectKey szolgáltatási osztály zászlót, a végrehajtás kódolja a kulcs használatával DPAPI.

ReadKey eljárás kiolvassa a kulcsot a fájl által létrehozott GenerateKey, az alábbiak szerint:

Ha a kulcs korábban már védett, ReadKey () metódus a DPAPI hogy távolítsa el a védelmet a kulcs elolvasása után egy fájlból. A módszer átadása a meglévő példány a szimmetrikus algoritmus. Ő közvetlenül inicializálja a kulcs tulajdonság az algoritmus, hogy ez a gombbal ezután automatikusan megjelennek a további műveleteket. A végén, mindkét funkció - EncryptData () és DecryptData () - használt ReadKey () függvény.

Mindkét módszer igényel keyfile paraméter fájl elérési útvonalát, amely a kulcs tárolja. Mindkét következetesen okoz ReadKey eljárás inicializálni a példány az algoritmus ezt a gombot. Míg EncryptData eljárás elfogad egy karakterláncot, és visszaadja a byte tömb titkosított Előadásában DecryptData elfogadja a titkosított bájttömböt és visszaad egy string szöveges formában:

Kezdjük azzal a módszerrel EncryptData ():

Először is, a módszer átalakítja a húr egy byte tömböt, mivel az összes titkosítási algoritmus feladatkörüknél byte tömbök bemeneti paramétereket. A legegyszerűbb módja, hogy használja ezt az osztályt a tér kódolás System.Text névtérben. Ezután a módszer létrehoz AlgorithmName algoritmus szerinti ingatlan osztályban. Ez az érték lehet az alábbi: RC2, Rijndaei, DES vagy TripleDES.

Gyári SymmetricAlgorithm.Create () módszer létrehoz egy megfelelő Például, míg további kriptográfiai osztályokba lehet jegyezve a szakaszban machine.config fájlt.

Ezután a módszer létrehoz egy memória patak, amely ebben az esetben fog szolgálni a célt titkosítási művelet. Mielőtt titkosítási művelet osztály indul keresztül CryptoStream, generál egy inicializáló vektor (inicializálóvektorból - IV) és kiírja az elérendő áramlási az első helyzetbe. inicializálóvektorból hozzáteszi véletlen adatokat titkosított adatfolyamot.

Képzeljük el a következő helyzetet: ha az alkalmazás továbbítja ugyanazt az információt többször a kliens és a szerver, az egyszerű titkosítás mindig is eredményezheti, hogy ugyanazt a titkosított ábrázolását az információkat. Ez egyszerűsíti a támadás „brute force”. Ahhoz, hogy hozzá valamilyen véletlen információk, szimmetrikus algoritmus támogatja inicializáló vektor. Ezek inicializálóvektorból nemcsak adunk a titkosított adatfolyamot, hanem használni, mint egy bemenet a titkosítás az első adatblokk.

Ha CryptoStream ne felejtsük el, hogy hívja a FlushFinalBlock (), hogy titkosítja az adatokat annak érdekében, hogy az utolsó blokk kódolt adatokat helyesen rögzített-e.

Inicializálóvektorból hozzá kell adni a titkosított sor bájt, mert ez az információ szükséges a későbbi dekódolás:

A szerkezet a dekódolás funkció épül másképp. Ez létrehoz egy algoritmus és egy cél flow a dekódolt információt. Mielőtt adatok dekódolásához, el kell olvasni a inicializálóvektorból a bemenő kódolt adatfolyam, mert egy algoritmus segítségével a végső átalakulás. CryptoStream visszük, amint ezt korábban, de azzal a különbséggel, hogy ezúttal jön létre megfejteni az átalakulás. És végül, hogy a dekódolt byte-ábrázolását a húr, hogy jött létre Encoding.UTF8.GetBytes (). Ahhoz, hogy az fordított műveletet, hívja a getString () metódus a kódoló egy osztály a UTF-8, így egy szöveget képviselet.

Segítségével osztály SymmetricEncryptionUtility

Most is létrehozhat egy oldalt tesztelésére az osztály. Ez egy egyszerű oldalt, amely létrehoz egy gombot, és adja az adatokat egy szöveges mező. A titkosított adatokat könnyen kiadási keresztül Convert.ToBase64String (). Visszafejteni kell dekódolni részét a kódolt Base64-, hát egy byte tömböt. A Convert.FromBase64String () metódus kell kapnia a titkosított bájt, és küldje vissza eljárás DecryptData:

Az oldalon lévő táblázatban alkalmazott DES algoritmust, mert azt AlgorithmName. Belül az esemény Click () GenerateKeyCommand elnevezésű gomb GenerateKey () metódust. Attól függően, hogy a négyzetet tölti ki az oldal, a kulcs titkosított DPAPI vagy sem. Miután az adatok titkosítva a közüzemi osztály Event Click () EncryptCommand kulcs titkosított byte alakítjuk Base64 húr, majd tárolni egy szöveges mező EcryptedDataText. Így megfejteni az információ újra, ehhez létre kell hozni egy byte tömb alapján Base64 karakteres ábrázolása, majd hívja a titkosítási módszert.

Az eredmények az alábbiakban láthatók:

adattitkosítás

Használata aszimmetrikus algoritmusok

Aszimmetrikus algoritmusokat használnak, mint a szimmetrikus. Elég egy kis különbség. A fő különbség annak köszönhető, hogy a kulcs kezelésére. Ha szimmetrikus algoritmusok foglalkozunk egy kulcs, az aszimmetrikus két kulcsot alkalmaznak: az egyik adattitkosítás (nyilvános kulcs), a másik visszafejteni őket (a titkos kulcs). Bár a nyilvános kulcs lehet bárki számára elérhető, aki szeretne titkosítja az adatokat, a titkos hozzáférhetővé kell tenni csak azoknak, akik dekódolja. Ebben a részben, akkor létrehoz egy segédprogram osztály, mint a fentihez.

Mivel a .NET-keretrendszer jön csak egy aszimmetrikus algoritmus valós adatok titkosítása (RSA, ne feledje, hogy a DSA csak arra használjuk a digitális aláírás), akkor nem szükséges a kiválasztására irányuló eljárás egy algoritmus:

GenerateKey () metódus létrehoz egy példányt az RSA algoritmust a kulcs generálás. Ez megőrzi csak a titkos kulcs egy fájlba, megvédve azt a DPAPI és visszaküldésével a nyilvános kulcs formájában XML-line segítségével ToXmlString () metódus az algoritmus. Ez egy meglehetősen reális fogalom - a privát kulcsot általában tárolja az alkalmazás titkos, míg a nyilvános kulcsot osztani másokkal, hogy képes legyen titkosítja az adatokat, ami a későbbiekben visszafejtése alkalmazás privát kulccsal:

A hívó ezt a funkciót kell tárolni valahol kapott nyilvános kulcs - úgy kell titkosítani információkat. Vegye ki a kulcsot az XML-ábrázolás, akkor ToXmlString () metódust. Paraméter határozza meg tartalmaznia kell a privát kulcs (true) az információt vagy sem (hamis). Így GenerateKey művelet először meghívja a függvényt az igazi paraméter mentéséhez teljes körű tájékoztatást a kulcsokat a fájlt, majd kéri, hogy azzal az érvvel, hamis, hogy csak a nyilvános kulcs. Ezt követően ReadKey () metódus egyszerűen kiolvassa a kulcsot a fájlt, és egy példányát inicializálja az algoritmus áthaladt FromXml (). amely ellentétes módszer ToXmlString ():

Ekkor egy eljárás ReadKey () használja csak a dekódolás funkciót. EncryptData () függvény paraméterként XML-alapú ábrázolását a nyilvános kulcs által visszaadott GenerateKey (), mert a titkos kulcsot, hogy végre a titkosítás nem szükséges. A titkosítás és visszafejtés az RSA végre az alábbiak szerint:

Most már építeni egy tesztoldal, az alábbiak szerint:

Kapcsolódó cikkek