Всичко, което трябва да знаете за криптирането в Java



Тази статия ще ви предостави подробни и изчерпателни познания за шифроването в Java и как да го използвате с примери.

Шифроването е метод за използване на математически алгоритми за маскиране на значението на дадена информация, така че само упълномощени страни да могат да я дешифрират. В тази статия ще обсъдим криптиране и дешифриране в в следния ред:

Въведение в криптирането в Java

Прилага се криптиране, за да се защитят данните ни (като текстове, разговори и глас), било то седнали на компютър или изпратени в интернет. Последните технологии за криптиране са съществени елементи на всяка сигурна компютърна среда.





Основната роля на сигурността на криптирането се състои в способността на алгоритъм да генерира шифротекст (криптиран текст), който е трудно да се върне към първоначалния си открит текст. Използването на ключове също създава друго ниво на защита на методите за защита на нашата информация. Ключът е някаква информация, която позволява само на тези, които го държат, да кодират и декодират съобщение.

Шифроване и дешифриране в Java



Алгоритми за симетрично криптиране

Симетричните алгоритми използват същия ключ за криптиране и декриптиране. Такива алгоритми могат да работят само в блоков режим (който работи върху блокове с данни с фиксиран размер) или поток (който работи върху битове или байтове данни). Такива алгоритмичесто се използват и за приложения като криптиране на данни, криптиране на файлове и криптиране на предадени данни в комуникационни мрежи (като TLS, имейли, незабавни съобщения и др.)

Асиметрични (или публичен ключ) алгоритми за криптиране

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



За да конфигурирате безопасно всяка основна схема за криптиране, е много важно всички такива параметри (най-малкото) да бъдат проектирани правилно:

  • Изборът на правилния алгоритъм е важен.
  • Избор на правилния режим на работа за съответната задача
  • Изборът на правилната схема на подплънки според изискванията
  • Изборът на подходящите клавиши и техните размери съответно
  • Правилна инициализация с криптографски защитен CSPRING.

Много е важно да сте наясно с конфигурирането на всички тези параметри по сигурен начин. Дори малка погрешна конфигурация може да застраши цяла криптосистема и да я отвори за атаки от хакери и друг зловреден софтуер. Следователно, за да улесним тази дискусия, нека обсъдим само независими от алгоритъма инициализации на шифър. Вместо да правите такива шифрования сами, винаги е по-добре да оставите експертите да си свършат работата по конфигуриране на по-зависими от алгоритъма конфигурации, като p и q стойности на RSA алгоритъма и т.н. Като просто конфигурирате елементарните криптографски параметри над повече от половината от дузина, се използват класове.

Въвеждането на йерархии на класове, много претоварени конструктори / методи и така нататък, добавяйки много сложности, които го правят ненужен. Бих искал Java да не усложнява основните конфигурации и просто да използва по-опростена архитектура като тази на Microsoft, където всички такива параметри са в рамките на периметъра на един клас SymmetricAlgorithm и AsymmetricAlgorithm. За да бъдат посочени първите три параметъра (алгоритъм, режим на работа и схема на запълване), обект Cipher използва низ за трансформация.

  • Изборът на правилния алгоритъм

Низът за трансформация несъмнено включва името на криптографски алгоритъм. Между симетричното и асиметричното криптиране има 11 алгоритма (не по отношение на различни комбинации PBEWithAnd), които могат да бъдат посочени съгласно документацията за име на стандартен алгоритъм. От тях само две (по едно за всяко, симетрично и асиметрично криптиране) всъщност са напълно защитени.

Останалите алгоритми са или прекалено счупени (DES, RC2 и т.н.) или пукнатини са започнали да изплуват (RC5), което го прави чуплив с достатъчна мощност на процесора - той може да бъде счупен по времето, когато прочетете това. Разработчик, който се грижи за сигурността, може да не чете множество спецификации на NIST, нито да следи последните събития и изследвания в криптографската общност. Те могат да вземат счупените или рискови алгоритми, дайджест или псевдослучайни генератор.

Винаги за:

  1. Симетричен алгоритъм: Използва се AES / AESWrap блоков шифър.

  2. Асиметричен алгоритъм: Използва се RSA.

  • Начин на действие

Режимът на работа е част от трансформацията и е от значение само за блокови шифри. Когато използваме асиметрични шифри, използвайте ECB като режим на работа, което по същество е хак зад кулисите, което означава, че игнорирате тази стойност. Доставчиците на Java като SunJCE, SunPKCS11 по подразбиране са в режим ECB за симетрични и асиметрични алгоритми. Може да е нещо добро за асиметрични алгоритми, но лоша идея за блокови шифри.

получи дата от низ java -

Доставчиците могат да бъдат инструктирани да правят сигурни настройки по подразбиране въз основа на използвания алгоритъм. Използвайте симетрично криптиране, за да ви спести от повторни атаки или атаки с известен открит текст. Също така използвайте трансформация, която напълно определя алгоритъм (т.е. с неговия режим на работа и подложка). Никога, никога не правете нещо като споменатото по-долу.

Както по-горе, AES алгоритъмът ще бъде използван с режим на работа на ЕЦБ, което прави атаките за повторение много лесни. За ново развитие, ако има и най-малка възможност за обновяване на старата работа, трябва да използваме удостоверено криптиране със свързаните данни (AEAD) режим (например GCM и CCM). Имаме таг за удостоверяване с пълна дължина 128 бита. Ако използваме неаутентифициран режим, ние използваме CBC или CTR с MAC за удостоверяване на шифъртекста.

  • Избор на подходящата схема на подложка

Режимите на общия блоков шифър се нуждаят от дължината на обикновен текст, кратна на размера на блока на основния алгоритъм за криптиране, което рядко се случва. По този начин, ние се нуждаем от някои подложки.Програмата Java ни предоставя три различни схеми за симетрично криптиране, едната е No Padding, което е неприемливо, а другата е ISO10126Padding, която е изтеглена от 2007 г.).

Следователно единствената подходяща опция е използването на PKCS5Padding. Смесването на някои режими на работа (например CBC режим) и PKCS5Padding схема за подложка може да доведе до подплата на оракула атаки. Неспоменаването на схема за подплънки изобщо е по-опасно от предоставянето на схема, която е податлива само на определени видове атаки. Най-препоръчителен е режимът на работа AEAD, за да сте сигурни, че сте защитени срещу тези атаки.

  • Асиметрични алгоритми

В асиметричните алгоритми имаме възможност да избираме от две схеми за подплата. Важно е да се гарантира, че се използват само схеми OAEPWithAndPadding. В случай на дайджест, използвайте SHA1 или SHA256 / 384/512. За функцията за генериране на маска (MGF), използвайте подложката MGF1, както е посочено. PKCS1 Добавянето с RSA е уязвимо за атаки с шифротекст [6] от 1998 г. насам.

Тук говорим за правилния начин за използване на трансформация в метод “Cipher.getInstance”.

  • Симетрично криптиране

  • Асиметрично криптиране

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

С това стигаме до края на статията Encryption in Java. Надявам се, че имате представа за криптиране и дешифриране и защо се използва в Java.

Вижте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на този блог „Шифроване в Java“ и ние ще се свържем с вас възможно най-скоро.