Углубленный анализ алгоритма шифрования и дешифрования ECC (криптография на основе эллиптических кривых).
Углубленный анализ алгоритма шифрования и дешифрования ECC (криптография на основе эллиптических кривых).

1. Введение

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

2. Принцип алгоритма ECC

2.1. Основы эллиптических кривых.

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

Вставьте сюда описание изображения
Вставьте сюда описание изображения
2.2. Генерация ключей ECC.

В ECC генерация ключей в основном опирается на точки на эллиптической кривой. Выберите подходящую эллиптическую кривую и базовую точку (генератор), закрытый ключ — это случайно выбранное целое число, а открытый ключ — произведение закрытого ключа и базовой точки. Поскольку точечная операция на эллиптической кривой является односторонней, закрытый ключ не может быть получен из открытого ключа, что обеспечивает безопасность алгоритма ECC.

2.3. ECC-шифрование и дешифрование.

Алгоритм шифрования ECCИспользуйте пару открытых ключей получателя.данныеруководитьшифрование,Получатель использует свой собственный секретный ключ для расшифровки. процесс шифрования включает в себя выбор случайного числа,Вычислить произведение открытого текста и случайного числа как части зашифрованного текста,А произведение случайного числа и открытого ключа получателя используется как еще одна часть зашифрованного текста. Процесс расшифровки использует закрытый ключ для вычисления значения случайного числа.,Затем восстановите простой текст.

2.4. Подпись и проверка ECC.

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

3. Характеристики алгоритма ECC

1. Высокая безопасность:ECCалгоритм Безопасность на основе задачи дискретного логарифмирования эллиптической кривой,По сравнению с алгоритмом RSA,по тем же требованиям безопасности,ECC требует более коротких ключей. Это означает, что ECC имеет более высокий уровень защиты от грубого взлома, атак методом перебора и т. д.

2. Короткая длина ключа:ECCСопоставимая безопасность с другими криптосистемами с открытым ключом может быть достигнута с использованием ключей меньшей длины.。Например,Длина ключа ECC в 256 бит может обеспечить безопасность, сопоставимую с 3072-битным ключом RSA. Это снижает затраты на хранение и передачу ключей.,Улучшена общая производительность системы.

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

4. Применение алгоритма ECC

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

Шифрование и дешифрование с использованием ECC (криптографии на основе эллиптических кривых) в Java обычно включает в себя процесс генерации пары ключей, шифрования и дешифрования. Следует отметить, что криптография на основе эллиптических кривых (ECC) обычно не используется непосредственно для шифрования больших объемов данных, а используется для согласования ключей, цифровых подписей или для шифрования небольших объемов данных (например, симметричных ключей шифрования). Для шифрования больших объемов данных часто используются симметричные алгоритмы шифрования, такие как AES, а ECC может использоваться для безопасного обмена этими симметричными ключами.

Следующий код используетJavaизBouncyCastle库руководитьECCГенерация пары ключей、шифрованиеи Расшифровать Простой пример。в коде“шифрование”实际上是指Используйте пару открытых ключей получателя.一个小消息或对称密钥руководитьшифрование,и“Расшифровать”относится к использованию закрытого ключа получателя для Расшифроватьэто。

Добавьте зависимости через Maven или Gradle, пример зависимости Maven:

Язык кода:javascript
копировать
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.69</version> <!-- Пожалуйста, проверьте, есть ли более новая версия -->
</dependency>

Код шифрования и дешифрования ECC:

Язык кода:javascript
копировать
import org.bouncycastle.jce.ECNamedCurveTable;
import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;
import javax.crypto.KeyAgreement;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.security.spec.ECPoint;
import java.security.spec.ECPublicKeySpec;
import java.security.spec.EllipticCurve;
import java.util.Arrays;
import java.util.Base64;

public class ECCExample {

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public static void main(String[] args) throws Exception {
        // Создать пару ключей ECC
        KeyPair keyPairA = generateKeyPair();
        KeyPair keyPairB = generateKeyPair();

        // Алиса использует открытый шифрованный ключ Боба.
        byte[] encrypted = encrypt(keyPairB.getPublic(), "Hello, ECC!".getBytes());
        System.out.println("шифрование后изданные: " + Base64.getEncoder().encodeToString(encrypted));

        // Боб расшифровывает данные, используя свой собственный секретный ключ.
        byte[] decrypted = decrypt(keyPairB.getPrivate(), encrypted);
        System.out.println("Расшифрованные данные: " + new String(decrypted));
    }

    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", "BC");
        keyGen.initialize(new ECNamedCurveParameterSpec("prime192v1")); // Используйте кривую prime192v1, вы также можете выбрать другие кривые.
        return keyGen.generateKeyPair();
    }

    public static byte[] encrypt(PublicKey publicKey, byte[] plainText) throws Exception {
        // Примечание. ECC не используется напрямую для шифрования больших объемов данных. Здесь мы используем ECC для шифрования небольшого сообщения, но обычно мы используем его для шифрования симметричного ключа.
        Cipher cipher = Cipher.getInstance("ECIES", "BC");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(plainText);
    }

    public static byte[] decrypt(PrivateKey privateKey, byte[] cipherText) throws Exception {
        Cipher cipher = Cipher.getInstance("ECIES", "BC");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return cipher.doFinal(cipherText);
    }
}

В коде используетсяECIES(Интеграция эллиптической кривойшифрованиеплан)Приходитьшифрованиеи Расшифроватьданные。это смесьшифрованиеплан,Он сочетает в себе преимущества шифрования с открытым ключом (ECC) и симметричного шифрования. в практическом применении,Обычно вы увидите, что ECC используется для установления безопасных каналов.,Затем обменяйтесь симметричными ключами по этому каналу,Наконец, для шифрования фактических данных используется симметричный ключ.

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

Подвести итог

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose