ПредишенСледващото

Айез криптиране и андроид клиент

Както се казва, нищо няма признаци за неприятности. Мобилният клиента бавно pililsya, кафе замръзна, пъзели затворени един след друг, докато изведнъж не е писмо до корпоративна електронна поща:







Спешно въведе нова функционалност. Всички необходими параметри за изграждане на бизнес модел, от съображения за сигурност, ще се предават в криптиран AES / ТГС / PKCS5Padding с AAACCCDDDYYUURRS инициализация вектор и ключ ZZHHYYTTUUHHGGRR криптиране. Пример криптирани данни:

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

Опитите за намиране на решение бързо, издадени няколко неработни примери показват, че проблемът излиза извън запознат оформлението и писане layout'ov Presenter'ov и изисква преглед на доковете и наръчниците за четене. Една чудесна възможност да научат нещо ново и да обогатят своя опит.

Но за начало, нека да видим, какво е то - криптиране и защо е необходимо изобщо.

Някои теория за AES криптиране

Advanced Encryption Standard (AES) - симетричен алгоритъм за криптиране блок, приет от правителството на САЩ въз основа на резултатите от конкурса като стандарт за криптиране и се заменя с по-малко надежден алгоритъм Data Encryption Standard (DES). Одобрен като единен стандарт алгоритъм за криптиране е бил приложен широко за защита на електронни данни.

Алгоритъмът се основава съдържа замествания, замествания и линейни трансформации, всяка от които се изпълнява на блокове от 128 бита (цифри със стойности от 0 или 1), са в основата на структурата на входните и изходните данни и следователно е именуване на блок числото на. Повторението на операциите се повтаря по време на всяка итерация (кръг) се изчислява на базата на уникален ключ ключ за криптиране е вградена в по-нататъшни изчисления.

В криптографски ключ за алгоритъма AES е последователност от 128, 192 или 256 бита. Други параметри на вход и изход на данни и криптографски ключ не е позволено AES стандарт.

Надеждност Криптирането осигурява от факта, че промяната на дори един блок е свързано с промяна на следващите блокове и пълна промяна крайния изход на данни.

Този подход осигурява висока надеждност на алгоритъма, който може да се види като се вземат предвид следните прост пример:

Пример за изчисляване на времето за прекъсване ciphertext

Таблица 1: Зависимост на броя на комбинациите от дължината на ключа

Най-бързият суперкомпютър: 10.51 петафлопа = 10.51 х 10 ^ 15 провали (операции с плаваща запетая в секунда)

Нека приблизителния брой операции в секунда, е необходимо да се провери комбинацията е оптимист: 1000

Броят на проверките комбинации в секунда = (10.51 х 10 ^ 15) / 1000 = 10.51 х 10 ^ 12

Броят на секунда в продължение на една година = 365 х 24 х 60 х 60 = 31536000

Броят на години, за да се справи с AES 128-битов ключ = (3.4 х 10 ^ 38) / [(10,51 х 1012) х 31536000] = (0.323 х 10 ^ 26) / 31536000 = 1,02 х 10 ^ 18 = 1 милиард милиарда години.

Подробно описание на алгоритъма на английски: Advanced Encryption Standard
Можете също така да се провери тази голяма статия: Как работи AES

инициализация вектор

Инициализация вектор (IV) - инициализация вектор е произволно число, което може да се използва заедно с таен ключ за криптиране на данни.

Използване на IV за да се предотврати повторение на криптиране на данните, което прави процеса на хакване по-трудно за един хакер с помощта на речник атака, в опит да намерят модели и разбие шифъра. Например, последователността може да възникне два или повече пъти в тялото на съобщението. Ако повтаря последователност в шифрованите данни, атакуващият може да се предположи, че последователностите на съобщение, съответстващо също са идентични. IV предотвратява повтарящи символни последователности, съответстващи на шифрован текст.







Математическият основа

За да извикате изучаването на математическите основи, да се използва материал от документацията за алгоритъм Advanced Encryption Standard на. и този добър материал на руски: Общо описание AES криптографски алгоритъм

Съответно, за описание на алгоритъма, използван от ограничен Galois поле GF (2 ^ 8), конструиран като поле разширение GF на (2) = по модул несводима полином m (х) = х ^ 8 + х ^ 4 + х ^ 3 + х + 1. елементите на поле GF на (2 ^ 8) са полиноми на формата

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

в полеви операции, извършвани от m (х) модул. Общо в GF (2 ^ 8), има 2 ^ 8 = 256 полиноми.

Основните математически операции в областта GF (2 ^ 8)

  1. Добавяне на байта може да се направи във всеки от следните три начина:
    • Настоящите полиноми битови байтове и ги поставя в по обичайния начин, следвана от сумирането на полиноми носят коефициенти сума по модул 2 (XOR операция на коефициенти);
    • да обобщи по модул 2 на съответните битове в байтове;
    • сгънете байта в шестнадесетичен вид.
  2. Размножаването се извършва, използвайки байт представяне на тяхната
    полиноми и се умножи по обичайните алгебрични правила.
    Полученият продукт трябва да доведе модул М (х) = х ^ 8 + х ^ 4 + х ^ 3 + х + 1 (резултат е управление на остатъка от делене работи m (х)) на полином
  3. За всяка ненулева битова на полином В (х) в поле GF (2 ^ 8)
    съществува полином б ^ 1 (х), се върне към него в
    умножение, т.е. б (х) · б ^ -1 (х) = 1 мод m (х)

Полиноми с коефициентите в поле GF (2 ^ 8)
Трети полиноми степен с коефициенти в краен
област a_i ∈ GF (2 ^ 8) се получава чрез: а (х) = a_3 · х ^ 3 + a_2 · х ^ 2 + a_1 · х + a_0 (1)

По този начин, в тези полиноми като коефициентите на неизвестните участват байта вместо бита. Освен това, тези полиноми ще бъдат под формата на думи [a_0, a_1, a_2, a_3]. Стандартът AES чрез умножаване полиноми на форма (1) се използва за да модул друг полином х ^ 4 + 1.

За проучване на аритметични счита полиноми въведат допълнително полином б (х) = b_3 · х ^ 3 + b_2 · х ^ 2 + b_1 · х + b_0, където b_i ∈ GF (2 ^ 8). след това

г (х) = а (х) · б (х) = d_3 · х ^ 3 + D_2 · х ^ 2 + d_1 · х + d_0

Опции за шифроване

Е, има и AES инициализация вектор стана ясно. Сега се опитайте да се разбере до края на думата в низ AES / ТГС / PKCS5Padding

Свързване на кодирани блокове (СВС) - ciphertext блок верижното режим - по един за режим на симетричен шифриращ използване блок шифър механизъм за обратна връзка. Всяка прав текст блок (с изключение на първия) се състои побитова модул 2 към предишния резултат. Една грешка в малко блок на ciphertext се отразява на разшифроването на всички следващи блокове. Преструктуриране, за ciphertext блокове причинява увреждане разшифроването резултат.

Айез криптиране и андроид клиент

Друг вариант PKCS5Padding. Това показва колко блоковете трябва да бъдат обработени непълни. Ако използвате една от най-често срещаните алгоритми за пълнене да включва размера на блок в шифрованите данни, като гарантира, че когато се опитате да декриптира криптирана съобщение, можете да получите правилния размер на байта.

За работата на всички параметри, AES криптиране, всеки екземпляр на Java платформа трябва да поддържа следното стандартно алгоритъм за криптиране с ключови размери (в скоби):

Стандартни шифър трансформации

  • AES / CBC / NoPadding (128)
  • AES / CBC / PKCS5Padding (128)
  • AES / ЕЦБ / NoPadding (128)
  • AES / ЕЦБ / PKCS5Padding (128)
  • DES / CBC / NoPadding (56)
  • DES / CBC / PKCS5Padding (56)
  • DES / ECB / NoPadding (56)
  • DES / ECB / PKCS5Padding (56)
  • DESede / ТГС / NoPadding (168)
  • DESede / ТГС / PKCS5Padding (168)
  • DESede / ЕЦБ / NoPadding (168)
  • DESede / ЕЦБ / PKCS5Padding (168)
  • RSA / ЕЦБ / PKCS1Padding (1024, 2048)
  • RSA / ECB / OAEPWithSHA-1AndMGF1Padding (1024, 2048)
  • RSA / ECB / OAEPWithSHA-256AndMGF1Padding (1024, 2048)

Ковчеже що отворих

Айез криптиране и андроид клиент

След като приключва с теорията, можете да започнете прилагането на съобщенията за алгоритъм за разшифроване на сървъра.

За разлика от стандартен набор от JDK, защото ние трябва да конвертирате низ android.util.Base64:

Трябва също да се отбележи, че размерът на вектора на инициализация трябва да е 16 байта (128 - битова). Това се дължи на факта, че стандарт AES криптиране включва три вида блокови шифри: AES - 128, AES - 192 и AES - 256. Всеки един от тези кодове е 128 - размер битов блок, с ключ размер на 128, 192 и 256 бита, съответно и като се вземе предвид факта, че за всички видове блок шифър инициализация вектор със същия размер като размера на блок шифър на, ние откриваме, че вектора на инициализация е винаги 128 - размер малко.

В противен случай, дори и да се опитате да използвате различен вектор размер, ciphertext няма да бъде разшифрован и получаваме следното изключение:

Както може да се види от изпълнението на решението се оказа доста прост и тривиален в контекста на задачите от този вид. Въпреки това, понякога е много полезно да се рови в доковете и осъзнавам, че не се среща много често в ежедневието на разработчиците на Android.

За най-любопитен - спойлер, който е криптирана в съобщението:

отговорът на загадката







Свързани статии

Подкрепете проекта - споделете линка, благодаря!