Основы криптографии в Java
Асимметричная криптография
В асимметричной криптографии используются два ключа: публичный (для шифрования) и приватный (для дешифрования). Это решает проблему обмена ключами, но работает медленнее, чем симметричная криптография.
Основные алгоритмы:
RSA (Rivest-Shamir-Adleman):
Основан на сложности факторизации больших чисел.
Использует ключи длиной 1024, 2048 или 4096 бит.
Плюсы: безопасный обмен ключами.
Минусы: низкая скорость, ограниченный размер данных для шифрования.
ECC (Elliptic Curve Cryptography):
Использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Плюсы: высокая эффективность, меньший размер ключей.
Минусы: сложность реализации.
Пример шифрования с использованием RSA в Java:
Основные понятия
Шифрование и дешифрование:
Шифрование — процесс преобразования открытого текста в зашифрованный.
Дешифрование — обратный процесс, преобразование зашифрованного текста в открытый.
Ключи:
Публичный ключ: Используется для шифрования, может быть передан кому угодно.
Приватный ключ: Используется для дешифрования, должен храниться в секрете.
Безопасность
Уязвимости:
Слабые ключи: Короткие или предсказуемые ключи могут быть взломаны методом перебора.
Атаки на реализацию: Например, атака по времени (timing attack) на RSA.
Социальная инженерия: Кража ключей через фишинг или другие методы.
#Java #Training #Medium #Crypto #Asymmetrical
Асимметричная криптография
В асимметричной криптографии используются два ключа: публичный (для шифрования) и приватный (для дешифрования). Это решает проблему обмена ключами, но работает медленнее, чем симметричная криптография.
Основные алгоритмы:
RSA (Rivest-Shamir-Adleman):
Основан на сложности факторизации больших чисел.
Использует ключи длиной 1024, 2048 или 4096 бит.
Плюсы: безопасный обмен ключами.
Минусы: низкая скорость, ограниченный размер данных для шифрования.
ECC (Elliptic Curve Cryptography):
Использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Плюсы: высокая эффективность, меньший размер ключей.
Минусы: сложность реализации.
Пример шифрования с использованием RSA в Java:
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Генерация ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048); // 2048-bit key
KeyPair keyPair = keyGen.generateKeyPair();
// Шифрование
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
String plainText = "Hello, World!";
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted: " + encryptedText);
// Дешифрование
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("Decrypted: " + decryptedText);
}
}
Основные понятия
Шифрование и дешифрование:
Шифрование — процесс преобразования открытого текста в зашифрованный.
Дешифрование — обратный процесс, преобразование зашифрованного текста в открытый.
Ключи:
Публичный ключ: Используется для шифрования, может быть передан кому угодно.
Приватный ключ: Используется для дешифрования, должен храниться в секрете.
Безопасность
Уязвимости:
Слабые ключи: Короткие или предсказуемые ключи могут быть взломаны методом перебора.
Атаки на реализацию: Например, атака по времени (timing attack) на RSA.
Социальная инженерия: Кража ключей через фишинг или другие методы.
#Java #Training #Medium #Crypto #Asymmetrical
Основы криптографии в Java: Асимметричная криптография
Асимметричная криптография, также известная как криптография с открытым ключом, использует два ключа: публичный ключ (для шифрования) и приватный ключ (для дешифрования). Это решает проблему обмена ключами, которая существует в симметричной криптографии, но работает медленнее.
Алгоритмы асимметричной криптографии
1. RSA (Rivest-Shamir-Adleman)
RSA — это один из самых популярных алгоритмов асимметричной криптографии. Он основан на сложности факторизации больших чисел.
Особенности:
Использует ключи длиной 1024, 2048 или 4096 бит.
Шифрование и дешифрование выполняются с помощью операций возведения в степень по модулю.
Публичный ключ: (e,n), приватный ключ: (d,n) где n=p×q (произведение двух больших простых чисел).
Плюсы:
Безопасный обмен ключами.
Широкое применение в SSL/TLS, цифровых подписях.
Минусы:
Низкая скорость по сравнению с симметричной криптографией.
Ограниченный размер данных для шифрования (обычно меньше размера ключа).
2. ECC (Elliptic Curve Cryptography)
ECC использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Особенности:
Использует ключи длиной 256, 384 или 521 бит.
Основан на сложности задачи дискретного логарифмирования на эллиптических кривых.
Публичный ключ: точка на кривой Q=d×G, приватный ключ: число d.
Плюсы:
Высокая эффективность, меньший размер ключей.
Подходит для устройств с ограниченными ресурсами (например, IoT).
Минусы:
Сложность реализации.
Меньшая распространенность по сравнению с RSA.
Этапы работы RSA
Генерация ключей:
Выбираются два больших простых числа p и q.
Вычисляется n=p×q (модуль).
Вычисляется функция Эйлера ϕ(n)=(p−1)(q−1).
Выбирается число e (публичная экспонента), такое что 1<e<ϕ(n) и НОД(e,ϕ(n))=1.
Вычисляется число d (приватная экспонента), такое что d×e≡1(mod ϕ(n)).
Публичный ключ: (e,n), приватный ключ: (d,n).
Шифрование:
Сообщение m преобразуется в число M, где 0≤M<n.
Зашифрованное сообщение C=M^e (mod n).
Дешифрование:
Расшифрованное сообщение M=C^d(mod n).
Пример работы RSA
Простые числа: p=61, q=53.
Модуль: n=61×53=3233.
Функция Эйлера: ϕ(n)=(61−1)(53−1)=3120.
Публичная экспонента: e=17 (выбрано так, что НОД(17, 3120)=1.
Приватная экспонента: d=2753 (так как 17×2753≡1 (mod 3120)).
Шифрование сообщения m=123: C=123^17 (mod 3233)=855.
Дешифрование: M=855^2753 (mod 3233)=123.
Пример шифрования с использованием RSA в Java
#Java #Training #Medium #Crypto #Asymmetrical
Асимметричная криптография, также известная как криптография с открытым ключом, использует два ключа: публичный ключ (для шифрования) и приватный ключ (для дешифрования). Это решает проблему обмена ключами, которая существует в симметричной криптографии, но работает медленнее.
Алгоритмы асимметричной криптографии
1. RSA (Rivest-Shamir-Adleman)
RSA — это один из самых популярных алгоритмов асимметричной криптографии. Он основан на сложности факторизации больших чисел.
Особенности:
Использует ключи длиной 1024, 2048 или 4096 бит.
Шифрование и дешифрование выполняются с помощью операций возведения в степень по модулю.
Публичный ключ: (e,n), приватный ключ: (d,n) где n=p×q (произведение двух больших простых чисел).
Плюсы:
Безопасный обмен ключами.
Широкое применение в SSL/TLS, цифровых подписях.
Минусы:
Низкая скорость по сравнению с симметричной криптографией.
Ограниченный размер данных для шифрования (обычно меньше размера ключа).
2. ECC (Elliptic Curve Cryptography)
ECC использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Особенности:
Использует ключи длиной 256, 384 или 521 бит.
Основан на сложности задачи дискретного логарифмирования на эллиптических кривых.
Публичный ключ: точка на кривой Q=d×G, приватный ключ: число d.
Плюсы:
Высокая эффективность, меньший размер ключей.
Подходит для устройств с ограниченными ресурсами (например, IoT).
Минусы:
Сложность реализации.
Меньшая распространенность по сравнению с RSA.
Этапы работы RSA
Генерация ключей:
Выбираются два больших простых числа p и q.
Вычисляется n=p×q (модуль).
Вычисляется функция Эйлера ϕ(n)=(p−1)(q−1).
Выбирается число e (публичная экспонента), такое что 1<e<ϕ(n) и НОД(e,ϕ(n))=1.
Вычисляется число d (приватная экспонента), такое что d×e≡1(mod ϕ(n)).
Публичный ключ: (e,n), приватный ключ: (d,n).
Шифрование:
Сообщение m преобразуется в число M, где 0≤M<n.
Зашифрованное сообщение C=M^e (mod n).
Дешифрование:
Расшифрованное сообщение M=C^d(mod n).
Пример работы RSA
Простые числа: p=61, q=53.
Модуль: n=61×53=3233.
Функция Эйлера: ϕ(n)=(61−1)(53−1)=3120.
Публичная экспонента: e=17 (выбрано так, что НОД(17, 3120)=1.
Приватная экспонента: d=2753 (так как 17×2753≡1 (mod 3120)).
Шифрование сообщения m=123: C=123^17 (mod 3233)=855.
Дешифрование: M=855^2753 (mod 3233)=123.
Пример шифрования с использованием RSA в Java
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Генерация ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048); // 2048-bit key
KeyPair keyPair = keyGen.generateKeyPair();
// Шифрование
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
String plainText = "Hello, World!";
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted: " + encryptedText);
// Дешифрование
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("Decrypted: " + decryptedText);
}
}
#Java #Training #Medium #Crypto #Asymmetrical
Уязвимости асимметричной криптографии
Атака на слабые ключи:
Если p и q слишком близки, можно быстро факторизовать n.
Решение: Использование стойких ключей (например, 2048 бит для RSA).
Атака по времени (Timing Attack):
Измерение времени выполнения операций может раскрыть приватный ключ.
Решение: Использование алгоритмов с постоянным временем выполнения.
Атака на короткие сообщения:
Если сообщение слишком короткое, его можно восстановить без ключа.
Решение: Использование padding (например, OAEP).
Когда использовать асимметричную криптографию?
Асимметричная криптография идеально подходит для:
Безопасного обмена ключами (например, в SSL/TLS).
Цифровых подписей и аутентификации.
Ситуаций, где безопасный обмен ключами невозможен.
#Java #Training #Medium #Crypto #Asymmetrical
Атака на слабые ключи:
Если p и q слишком близки, можно быстро факторизовать n.
Решение: Использование стойких ключей (например, 2048 бит для RSA).
Атака по времени (Timing Attack):
Измерение времени выполнения операций может раскрыть приватный ключ.
Решение: Использование алгоритмов с постоянным временем выполнения.
Атака на короткие сообщения:
Если сообщение слишком короткое, его можно восстановить без ключа.
Решение: Использование padding (например, OAEP).
Когда использовать асимметричную криптографию?
Асимметричная криптография идеально подходит для:
Безопасного обмена ключами (например, в SSL/TLS).
Цифровых подписей и аутентификации.
Ситуаций, где безопасный обмен ключами невозможен.
#Java #Training #Medium #Crypto #Asymmetrical