AES titkosítás és Android kliens

AES titkosítás és Android kliens

Mint mondják, semmi semmi jelét nem baj. A mobil kliens lassan pililsya, kávé megdermedt, kirakós zárt egyiket a másik után, amíg hirtelen ez nem egy levelet, hogy a vállalati e-mail:

Sürgősen új funkciók bemutatását. Minden szükséges paramétereket az építkezés egy üzleti modell, biztonsági okokból kerül továbbításra titkosított AES / CBC / PKCS5Padding a AAACCCDDDYYUURRS inicializálóvektorból és ZZHHYYTTUUHHGGRR titkosítási kulcsot. Példa titkosított adatok:

p + oJjsGEULNSptP5Sj1BM5w65hMjkqzahORd8ybIkqyJD0V / 608c1tYuKIvDLUIa
RQ9jQ6 + EwbyMFjlMa6xuEnxOx4sez001hd3NsLO7p00XoTqAvi9zwUBII +
nPphP6Zr0P4icvODpmhlmRILgSBsUf1H / 3VN1lNXjo4LTa
GxLqW3VSg9iV9yFq4VMWqsRF

Kísérletek megoldást találni gyorsan kiadott egy csomó nem működő példák azt mutatják, hogy a probléma túlmutat a megszokott elrendezés és írásban layout'ov Presenter'ov és vizsgálatát igényli a dokkok és az olvasás kézikönyvek. Egy nagyszerű lehetőség, hogy valami újat tanulni, és gazdagítják a tapasztalat.

De a kezdők, lássuk, mi ez - titkosítás és miért van rá szükség egyáltalán.

Néhány elmélet AES titkosítás

Advanced Encryption Standard (AES) - a szimmetrikus blokk titkosító algoritmus által elfogadott amerikai kormány eredményei alapján a versenyt, mivel a titkosítási szabvány, és helyette egy kevésbé megbízható algoritmus Data Encryption Standard (DES). Jóváhagyott egy algoritmus titkosítási szabvány már széles körben alkalmazzák, hogy megvédje az elektronikus adatokat.

Az algoritmus tartalmazhat szubsztitúciókat, helyettesítések és lineáris transzformációk, amelyek mindegyike tömbökben végzi a 128 bit (számjegy értéke 0 vagy 1), a struktúra alapján a bemeneti és kimeneti adatok, és ezért az elnevezés a blokk rejtjel. Ismétlés műveletek során többször előfordul mindegyik ismétlésnél (kerek) alapján kerül kiszámításra egyedi kulcsával titkosítva van ágyazva további számításokban.

A kriptográfiai kulcs az AES algoritmus egy szekvencia 128, 192 vagy 256 bit. Egyéb jellemzők bemeneti és kimeneti adatok és titkosítási kulcs nem engedélyezett AES szabvány.

Megbízhatóság A titkosítási biztosít az a tény, hogy a változó még egy blokk megváltoztatásával jár későbbi blokkok és teljes változás a végső kimeneti adatok.

Ez a megközelítés biztosítja a magas megbízhatóságot az algoritmus, amely látható figyelembe véve a következő egyszerű példa:

Számítási példa ideje törés rejtjelezett

1. táblázat: függése a kombinációk száma a kulcs hossza

A leggyorsabb szuperszámítógép: 10.51 petaflops = 10,51 x 10 ^ 15 papucsok (lebegőpontos művelet másodpercenként)

Hagyja, hogy a hozzávetőleges számát művelet másodpercenként, meg kell vizsgálni, akkor a kombináció optimista: 1000

Az ellenőrzések száma kombinációk másodpercenként = (10,51 x 10 ^ 15) / 1000 = 10,51 x 10 ^ 12

A másodpercek száma egy év = 365 x 24 x 60 x 60 = 31.536.000

Az évek száma, hogy kiváló a AES 128 bites kulcs = (3,4 x 10 ^ 38) / [(10,51 x 1012) x 31.536.000] = (0,323 x 10 ^ 26) / 31.536.000 = 1,02 x 10 ^ 18 = 1 milliárd milliárd év.

A részletes leírást az algoritmus angolul: Advanced Encryption Standard
Azt is nézd meg ezt a nagyszerű cikket: Hogyan működik a AES

inicializálóvektorból

Inicializálóvektorból (IV) - inicializáló vektor egy tetszőleges szám, amely együtt használható egy titkos kulccsal titkosítja az adatokat.

A IV megismétlődésének elkerülése az adatok titkosítása, amely a folyamat hackelés nehezebb egy hacker egy szótár támadás, hogy megpróbálja megtalálni minták és megtörni a titkosítást. Például, a szekvencia kétszer fordul elő, vagy több az üzenet törzsében. Ha a ismétlődő szekvencia a kódolt adatot, a támadó feltételezheti, hogy az üzenet megfelelő szekvenciák ugyancsak azonosak voltak. IV megakadályozza ismétlődő szimbólum megfelelő szekvenciákat a titkosított szöveget.

A matematikai alapja

Ahhoz, hogy a tanulmány a matematikai alapjait használja anyagot a dokumentációt az algoritmus Advanced Encryption Standard. és ez jó anyag oroszul: Általános leírás AES titkosító algoritmus

Ennek megfelelően, egy leírását az algoritmus által használt véges Galois mező GF (2 ^ 8) kialakítva, mint egy kiterjesztése mező GF (2) = modulo redukálhatatlan polinom m (x) = x ^ 8 + x ^ 4 + x ^ 3 + x + 1. az elemek a mező GF (2 ^ 8) polinomok a nyomtatvány

b_7 · x ^ 7 + b_6 · x ^ 6 + b_5 · x ^ 5 + b_4 · x ^ 4 + b_3 · x ^ 3 + b_2 · x ^ 2 + b_1 · x + b_0

a szakterületen által végzett m (x) modulo. Összesen GF (2 ^ 8), van 2 ^ 8 = 256 polinomok.

Az alapvető matematikai műveletek terén GF (2 ^ 8)

  1. Ezenkívül bájtok lehet bármely három módja van:
    • Jelen polinomok bites byte, és azokat a szokásos módon, majd összegzési polinomok hozza együtthatók összege modulo 2 (XOR művelet együtthatók);
    • Összefoglalva modulo 2 a megfelelő biteket az byte;
    • hajtsa a bájtok hexadecimális.
  2. Szorzás segítségével végezzük byte képviseletére
    polinomok és megszorozzuk a szokásos algebrai szabályokat.
    Az így kapott terméket kell eredményeznie modulo m (X) = x ^ 8 + x ^ 4 + x ^ 3 + x + 1 (eredmény hajtja a fennmaradó részlege működik m (X)) a polinom
  3. Bármilyen nem nulla bit a polinom B (x) a területen GF (2 ^ 8)
    létezik olyan polinom b ^ -1 (x), vissza azt
    szorzás, azaz b (x) · b ^ -1 (x) = 1 modulo m (x)

Polinomok együtthatók olyan területen GF (2 ^ 8)
Harmadik fokozat polinomok együtthatói véges
mező a_i ∈ GF (2 ^ 8) az alábbi: a (x) = a_3 · x ^ 3 + a_2 · x ^ 2 + a_1 · x + a_0 (1)

Tehát, ezen polinomok együtthatói az ismeretlenek részt bájtok helyett bit. Továbbá, ezek a polinomok lesz a megfogalmazás [a_0, a_1, a_2, a_3]. Az AES szabvány megszorozzuk polinomok a forma (1) alkalmazunk, hogy modulo másik polinom x ^ 4 + 1.

Ahhoz, hogy tanulmányozza a számtani tekinthető polinomok vezessen be további polinom b (x) = b_3 · x ^ 3 + b_2 · x ^ 2 + b_1 · x + b_0, ahol b_i ∈ GF (2 ^ 8). majd

d (x) = a (x) · b (x) = d_3 · x ^ 3 + d_2 · x ^ 2 + d_1 · x + d_0

titkosítási beállítások

Nos, vannak AES és inicializálóvektorból világossá vált. Most próbálja megérteni a többi szót egy karakterlánc AES / CBC / PKCS5Padding

Cipher blokk láncolási (CBC) - rejtjelezettszöveg-blokk láncolási üzemmódban - egy a szimmetrikus titkosítási mód alkalmazásával egy blokk titkosító visszacsatolási mechanizmus. Minden normálszövegblokkot blokk (kivéve az első) áll bitenkénti modulo 2 összeadással az előző eredményt. Az egyik hiba egy kicsit blokk rejtjelezett befolyásolja a dekódolás minden további blokkokat. Szerkezetátalakítási érdekében rejtjelezett blokkok kárt okoz dekódolás eredménye.

AES titkosítás és Android kliens

Egy másik lehetőség PKCS5Padding. Ez azt jelzi, hogy a blokkokat kell dolgozni hiányos. Ha az egyik gyakori töltés algoritmusok közé tartozik a blokk méretét a titkosított adatokat, biztosítva, hogy amikor megpróbálja dekódolni a titkosított üzenetet, akkor kap a megfelelő mennyiségű bájt.

A művelet minden AES titkosítási paramétereket, az egyes Java platform támogatnia kell az alábbi szabvány titkosító algoritmus kulcsfontosságú méretben (zárójelben):

Normál Cipher transzformációk

  • AES / CBC / NoPadding (128)
  • AES / CBC / PKCS5Padding (128)
  • AES / EKB / NoPadding (128)
  • AES / EKB / PKCS5Padding (128)
  • DES / CBC / NoPadding (56)
  • DES / CBC / PKCS5Padding (56)
  • DES / EKB / NoPadding (56)
  • DES / EKB / PKCS5Padding (56)
  • DESede / CBC / NoPadding (168)
  • DESede / CBC / PKCS5Padding (168)
  • DESede / EKB / NoPadding (168)
  • DESede / EKB / PKCS5Padding (168)
  • RSA / EKB / PKCS1Padding (1024, 2048)
  • RSA / EKB / OAEPWithSHA-1AndMGF1Padding (1024, 2048)
  • RSA / EKB / OAEPWithSHA-256AndMGF1Padding (1024, 2048)

Koporsó most megnyílt

AES titkosítás és Android kliens

Miután foglalkozott az elmélet, meg lehet kezdeni a végrehajtását az algoritmus dekódolást szerver üzeneteket.

Eltérően egy szabványos JDK, mert meg kell átalakítani a karakterláncot android.util.Base64:

Azt is meg kell jegyeznünk, hogy a méret a inicializáló vektor kell lennie 16 bájt (128 - bites). Ez annak a ténynek köszönhető, hogy a AES titkosítási szabvány tartalmazza a három típusú blokk titkosításokat: AES - 128, AES - 192 és az AES - 256. Az egyes kódok mindegyike 128 - bites blokk mérete, egy kulcs mérete 128, 192 és 256 bit, illetőleg és figyelembe véve azt a tényt, hogy minden típusú tömbrejtjelezésnél inicializálóvektorból az azonos méretű, mint a méret a blokk titkosító, azt találjuk, hogy a inicializálóvektorból mindig 128 - bit méretű.

Ellenkező esetben, még akkor is, ha megpróbáljuk használni a különböző méretű vektor, a rejtjelezett nem lehet visszafejteni, és megkapjuk a következő kivétellel:

Amint látható, a végrehajtás a megoldás kiderült, hogy nagyon egyszerű és triviális a feladatok keretében ilyen. Mindazonáltal, ez néha nagyon hasznos, hogy ásni a dokkok és rájönnek, hogy nem fordul elő gyakran a mindennapi életben az Android fejlesztők.

A legfurcsább - a spoiler, hogy már titkosított üzenet:

a válasz a puzzle

Kapcsolódó cikkek