Все, что вам нужно знать о шифровании в Java



Эта статья предоставит вам подробные и всесторонние знания о шифровании в Java и о том, как его использовать с примерами.

Шифрование - это метод использования математических алгоритмов для маскировки значения части информации, чтобы только уполномоченные стороны могли ее расшифровать. В этой статье мы обсудим шифрование и дешифрование в в следующем порядке:

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

Шифрование применяется для защиты наших данных (например, текстов, разговоров и голоса), будь то на компьютере или при отправке через Интернет. Современные технологии шифрования - важные элементы любой безопасной вычислительной среды.





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

гибридный фреймворк в selenium webdriver

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



Симметричные алгоритмы шифрования

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

Асимметричные (или с открытым ключом) алгоритмы шифрования

В отличие от симметричных алгоритмов, которые используют один и тот же ключ для операций шифрования и дешифрования, асимметричные алгоритмы используют два идентичных ключа для этих двух шагов. Эти алгоритмы используются для вычисления цифровых подписей и протоколов установления ключей. Однако здесь также возникает проблема, связанная с необходимостью использования двух ключей, что усложняет задачу.



Для безопасной настройки любой базовой схемы шифрования очень важно, чтобы все такие параметры (как минимум) были правильно спроектированы:

  • Выбор правильного алгоритма важен.
  • Выбор правильного режима работы для соответствующей задачи
  • Выбор правильной схемы заполнения в соответствии с требованиями
  • Правильный выбор ключей и их размеров соответственно
  • Правильная инициализация с помощью криптографически безопасного CSPRING.

Очень важно знать, как безопасно настраивать все эти параметры. Даже крошечная неправильная конфигурация может поставить под угрозу всю криптосистему и открыть ее для атак хакеров и других вредоносных программ. Следовательно, чтобы не усложнять это обсуждение, давайте обсудим только независимые от алгоритмов инициализации шифра. Вместо того, чтобы выполнять такое шифрование самостоятельно, всегда лучше позволить экспертам выполнить свою работу по настройке более зависимых от алгоритмов конфигураций, таких как значения p и q алгоритма RSA и т. Д. Просто настроив элементарные криптографические параметры, превышающие более половины дюжина, классы используются.

Введение иерархий классов, множества перегруженных конструкторов / методов и так далее, добавляя много сложностей, делающих это ненужным. Я бы хотел, чтобы Java не усложняла базовые конфигурации, а просто использовала бы более упрощенную архитектуру, подобную архитектуре Microsoft, где все такие параметры находятся в пределах периметра одного класса SymmetricAlgorithm и AsymmetricAlgorithm. Для первых трех параметров, которые должны быть указаны (алгоритм, режим работы и схема заполнения), объект Cipher использует строку преобразования.

  • Выбор правильного алгоритма

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

реализовать минимальную кучу в java

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

Всегда для:

  1. Симметричный алгоритм: используется блочный шифр AES / AESWrap.

  2. Асимметричный алгоритм: используется RSA.

  • Режим работы

Режим работы является частью преобразования и актуален только для блочных шифров. Когда мы используем асимметричные шифры, используйте ECB в качестве режима работы, что, по сути, является скрытым взломом, то есть игнорируйте это значение. Поставщики Java, такие как SunJCE, SunPKCS11, по умолчанию используют режим ECB для симметричных и асимметричных алгоритмов. Это может быть хорошо для асимметричных алгоритмов, но плохой идеей для блочных шифров.

Провайдеры могут быть проинструктированы установить безопасные значения по умолчанию на основе используемого алгоритма. Используйте симметричное шифрование, чтобы уберечь себя от атак воспроизведения или атак с использованием известного открытого текста. Также используйте преобразование, которое полностью определяет алгоритм (то есть с его режимом работы и заполнением). Никогда, никогда не делайте чего-то вроде упомянутого ниже

Как указано выше, алгоритм AES будет использоваться с режимом работы ECB, что значительно упрощает повторные атаки. Для новых разработок, если есть малейшая возможность переделать старую работу, мы должны использовать режим аутентифицированного шифрования со связанными данными (AEAD) (например, GCM и CCM). У нас есть тег аутентификации с полной длиной 128 бит. Если мы используем режим без аутентификации, мы используем CBC или CTR с MAC для аутентификации зашифрованного текста.

  • Выбор подходящей схемы заполнения

Обычные режимы блочного шифрования требуют, чтобы длина простого текста была кратной размеру блока базового алгоритма шифрования, что бывает редко. Таким образом, нам требуется отступ.Программа на Java предоставляет нам три разные схемы симметричного шифрования: одна - без заполнения, что недопустимо, а другая - это ISO10126Padding, отозванный с 2007 г.).

Поэтому единственный подходящий вариант - использовать PKCS5Padding. Сочетание некоторых режимов работы (например, режима CBC) и схемы заполнения PKCS5Padding может привести к атакам оракула заполнения. Не упоминать схему заполнения вообще опаснее, чем предоставить схему, восприимчивую только к определенным типам атак. Рекомендуется использовать режим AEAD, чтобы вы были защищены от этих атак.

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

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

Здесь мы говорим о том, как правильно использовать преобразование в методе Cipher.getInstance.

как изучить визуальную студию
  • Симметричное шифрование

  • Асимметричное шифрование

Уровень безопасности любой схемы шифрования прямо пропорционален размеру ее ключа. Длина ключа должна быть достаточно большой, чтобы любая атака грубой силой становилась невозможной, в то же время она должна быть достаточно короткой, чтобы иметь в виду вычислительную осуществимость. Кроме того, мы должны попытаться рассмотреть, что еще выдержит вычислительный прогресс в следующие 30 лет.

На этом мы подошли к концу статьи «Шифрование в Java». Надеюсь, вы получили представление о шифровании и дешифровании и почему они используются в Java.

Проверьте от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Курс обучения и сертификации по Java J2EE и SOA от Edureka предназначен для студентов и профессионалов, которые хотят стать Java-разработчиками. Курс разработан, чтобы дать вам хорошее начало в программировании на Java и обучить вас как основным, так и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога «Шифрование в Java», и мы свяжемся с вами как можно скорее.