PKI — понимание SM1, SM2, SM3, SM4 и других алгоритмов национальной секретности в одной статье.
PKI — понимание SM1, SM2, SM3, SM4 и других алгоритмов национальной секретности в одной статье.

Pre

Java — глубокое понимание алгоритмов шифрования, дешифрования и подписи.

Обзор

Национальная криптозоология относится к отечественному криптографическому алгоритму, признанному Государственным бюро криптозоологии. В основном это SM1, SM2, SM3 и SM4. Длина ключа и длина блока составляют 128 бит.

Национальные криптографические алгоритмы относятся к серии отечественных криптографических алгоритмов, признанных Государственным криптографическим управлением, включая SM1-SM9 и ZUC. в

  • SM1, SM4, SM5, SM6, SM7, SM8, ZUC и т. д. — симметричные пароли.
  • SM2, SM9 и т. д. относятся к криптографии с открытым ключом. (асимметричныйшифрование)
  • SM3 — это односторонняя хэш-функция.

В настоящее время в нашей стране в качестве коммерческих алгоритмов шифрования в основном используются общедоступные SM2, SM3 и SM4.

Алгоритмы SM1 и SM7 не являются общедоступными. При вызове этого алгоритма необходимо вызывать его через интерфейс чипа шифрования.

  • SM2 — это криптография с открытым ключом, основанная на эллиптических кривых, включая SM2-1 для цифровых подписей, SM2-2 для обмена ключами и SM2-3 для криптографии с открытым ключом.
  • SM3 — это односторонняя хэш-функция, которая может вычислять 256-битное хеш-значение и в основном используется для цифровых подписей и кодов аутентификации сообщений.
  • SM4 — это блочный шифр, который является симметричным. Длина блока и длина ключа составляют 128 бит.

Национальный секретный алгоритм достиг симметрии от SM1-SM4 соответственно.、асимметричный、абстрактное и т. д.алгоритм Функция,Он широко используется во всех аспектах повседневной работы и жизни.,VPN нравится использовать на работе,Движение средств в финансовом бизнесе、Оплата картой,А также средства контроля доступа, аутентификации личности и т. д.


S1

Алгоритм SM1 представляет собой алгоритм блочного шифрования с длиной блока 128 бит и длиной ключа 128 бит. Уровень безопасности и конфиденциальности алгоритма, а также производительность соответствующей программной и аппаратной реализации сопоставимы с AES. Алгоритм не является общедоступным и предназначен только для этого. существует в чипе в виде IP-ядра.

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


SM2

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

Алгоритм шифрования с открытым ключом на основе эллиптической кривой SM2 представляет собой алгоритм шифрования с открытым ключом, независимо разработанный в моей стране, включая алгоритм цифровой подписи на основе эллиптической кривой SM2-1, протокол обмена ключами с эллиптической кривой SM2-2 и алгоритм шифрования с открытым ключом на основе эллиптической кривой SM2-3. соответственно, реализовывать такие функции, как согласование ключа цифровой подписи и шифрование данных. Разница между алгоритмом SM2 и алгоритмом RSA заключается в том, что алгоритм SM2 основан на задаче дискретного логарифма группы точек на эллиптической кривой. По сравнению с алгоритмом RSA, 256-битный пароль SM2 уже надежнее, чем 2048-битный RSA. пароль, но скорость работы выше, чем у RSA.

SM3

Его можно понимать как отечественный MD5. Краткое содержание сообщения. MD5 можно использовать для сравнения, чтобы понять. Алгоритм находится в открытом доступе. Результат проверки — 256 бит.

SM4

Его можно понимать как внутренний AES. Алгоритм пакетной передачи данных для стандартов беспроводной локальной сети. Симметричное шифрование, длина ключа и длина блока составляют 128 бит.

SM9

Алгоритм идентификационного шифрования (IBE), выпущенный Государственным управлением шифрования 28 марта 2016 г., соответствующий стандарт — «GM/T». 0044-2016 SM9Идентификационный парольалгоритм”。В основном используется для аутентификации личности пользователя.。SM9изшифрование Сила эквивалентна3072битовый ключизАлгоритм шифрования RSA


Используйте опыт

Как правило, сторона, отправляющая данные, использует SM4 для шифрования содержимого данных, использует SM3 для обработки содержимого, а затем использует SM2 для подписи обзора.

Обычно принимающая сторона сначала использует SM2 для проверки подписи дайджеста. После успешной проверки подписи она может предотвратить отказ от отправки содержимого, чтобы проверить, соответствует ли сгенерированный дайджест дайджесту после проверки подписи. , который используется для предотвращения взлома.


Кроме того, SM4 требует один и тот же ключ для шифрования и дешифрования. Мы можем сгенерировать один и тот же ключ, написав модуль обмена ключами. Используется для симметричного шифрования SM4.

Что касается асимметрии, на что следует обратить внимание:

(1) Открытый ключ генерируется посредством закрытого ключа;

(2) Шифрование с открытым ключом и расшифровка с закрытым ключом являются процессом шифрования.

(3) Шифрование секретного ключа и расшифровка открытого ключа представляют собой процесс подписания;

Поскольку размер группы для шифрования и дешифрования SM1 и SM4 составляет 128 бит, при шифровании и дешифровании сообщений, если длина сообщения слишком велика, его необходимо сгруппировать, а если длина сообщения недостаточна, его необходимо дополнить.


Безопасность национальных секретных алгоритмов

Безопасность Национального секретного алгоритма как стандарта криптографических алгоритмов, продвигаемого на национальном уровне, подверглась тщательному анализу и оценке.

Ниже приводится дальнейший анализ безопасности алгоритмов SM2, SM3 и SM4:

Безопасность алгоритма SM2

Алгоритм SM2 представляет собой криптографический алгоритм с открытым ключом, основанный на эллиптических кривых. Его безопасность в основном зависит от сложности задачи дискретного логарифмирования эллиптической кривой. По сравнению с алгоритмом RSA, алгоритм SM2 требует более короткой длины ключа при той же степени безопасности, поэтому он имеет определенные преимущества в скорости шифрования и подписи. Кроме того, при разработке алгоритма SM2 также учитывались различные методы атак и были приняты соответствующие меры защиты для обеспечения его безопасности в практических приложениях.

Безопасность алгоритма SM3

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

  1. Длина вывода: длина вывода алгоритма SM3 составляет 256 бит, что больше, чем у алгоритма MD5 (128 бит) и SHA-1 (160 бит), поэтому он имеет более высокую безопасность.
  2. Атака столкновением: Алгоритм SM3 был разработан с учетом атак столкновений и принял соответствующие защитные меры. В настоящее время не существует опубликованного метода коллизионной атаки против алгоритма SM3.
  3. Лавинный эффект: Алгоритм SM3 имеет лавинный эффект, то есть небольшое изменение входных данных приведет к огромной разнице в выходном результате. Эта функция затрудняет взлом алгоритма SM3 злоумышленникам с помощью догадок или исчерпывающих методов.

Безопасность алгоритма SM4

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

  1. Длина ключа: Длина ключа алгоритма SM4 составляет 128 бит, что соответствует длине ключа алгоритма AES. Ключа такой длины достаточно, чтобы противостоять всем известным в настоящее время методам криптографических атак.
  2. Длина блока: Длина блока алгоритма SM4 также составляет 128 бит, что означает, что размер каждого блока шифрования или расшифровки данных составляет 128 бит. Такая длина пакета обеспечивает конфиденциальность и целостность данных.
  3. Количество раундов шифрования: Алгоритм SM4 использует многораундный метод шифрования, и каждый раунд шифрования имеет разные ключи и функции шифрования. Этот метод шифрования может затруднить взлом алгоритма злоумышленниками путем анализа процесса шифрования.
  4. Оценка безопасности: SM4алгоритм прошел несколько раундов оценки и проверки безопасности, и его безопасность получила широкое признание. В настоящее время не существует общедоступного эффективного метода атаки на алгоритм SM4.

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

Использование в Java

Hutool упростил упаковку для Bouncy Castle и используется для реализации SM2, SM3 и SM4 в национальном секретном алгоритме.

Пакет инструментов национального секретного алгоритма включает в себя:

  • асимметричныйшифрованиеи подпись:SM2
  • Метод дайджеста подписи: SM3
  • симметрияшифрование:SM4

Алгоритм национальной секретности должен ввести зависимость от библиотеки Bouncy Castle.

использовать

Введение зависимости Bouncy Castle

Язык кода:javascript
копировать
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15to18</artifactId>
  <version>1.69</version>
</dependency>

Примечание. Для версии bcprov-jdk15to18 выполните поиск в центральной библиотеке Maven, чтобы найти последнюю версию соответствующего JDK.

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

Зашифруйте или дешифруйте, используя случайно сгенерированную пару ключей.
Язык кода:javascript
копировать
String text = «Я тестаааа»;

SM2 sm2 = SmUtil.sm2();
// Шифрование с открытым ключом, расшифровка с закрытым ключом
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
Шифрование или дешифрование с использованием специальной пары ключей.
Язык кода:javascript
копировать
String text = «Я тестаааа»;

KeyPair pair = SecureUtil.generateKeyPair("SM2");
byte[] privateKey = pair.getPrivate().getEncoded();
byte[] publicKey = pair.getPublic().getEncoded();

SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
// Шифрование с открытым ключом, расшифровка с закрытым ключом
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
Подпись и проверка SM2
Язык кода:javascript
копировать
String content = «Я Хэнли»;
final SM2 sm2 = SmUtil.sm2();
String sign = sm2.signHex(HexUtil.encodeHexStr(content));

// true
boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(content), sign);
Пользовательская пара ключей

конечно,ХОРОШОПользовательская пара ключей

Язык кода:javascript
копировать
String content = «Я Хэнли»;
KeyPair pair = SecureUtil.generateKeyPair("SM2");
final SM2 sm2 = new SM2(pair.getPrivate(), pair.getPublic());

byte[] sign = sm2.sign(content.getBytes());

// true
boolean verify = sm2.verify(content.getBytes(), sign);
Постройте SM2, используя точки кривой SM2.

использовать Точки кривой в стадии строительстваиз Создание и проверка точек см.:https://i.goto327.top/CryptTools/SM2.aspx?tdsourcetag=s_pctim_aiomsg

Язык кода:javascript
копировать
String privateKeyHex = "FAB8BBE670FAE338C9E9382B9FB6485225C11A3ECB84C938F10F20A93B6215F0";
String x = "9EF573019D9A03B16B0BE44FC8A5B4E8E098F56034C97B312282DD0B4810AFC3";
String y = "CC759673ED0FC9B9DC7E6FA38F0E2B121E02654BF37EA6B63FAF2A0D6013EADF";

// данные и идентификатор выражаются здесь в шестнадцатеричном формате.
String data = "434477813974bf58f94bcf760833c2b40f77a5fc360485b0b9ed1bd9682edb45";
String id = "31323334353637383132333435363738";

final SM2 sm2 = new SM2(privateKeyHex, x, y);
// Сгенерированная подпись является 64-битной.
sm2.usePlainEncoding();

final String sign = sm2.signHex(data, id);
// true
boolean verify = sm2.verifyHex(data, sign)
Подпишите, используя значение закрытого ключа D
Язык кода:javascript
копировать
//Обычный текст, который необходимо подписать, получаем массив байтов, соответствующий простому тексту
byte[] dataBytes = "Я тестаааа".getBytes();
//Указанный закрытый ключ
String privateKeyHex = "1ebf8b341c695ee456fd1a41b82645724bc25d79935437d30e7e4b0a554baa5e";

// Эта конструкция доступна начиная с версии 5.5.9.
final SM2 sm2 = new SM2(privateKeyHex, null, null);
sm2.usePlainEncoding();
byte[] sign = sm2.sign(dataBytes, null);
Проверьте подпись, используя Q-значение открытого ключа
Язык кода:javascript
копировать
//Указанный открытый ключ
String publicKeyHex ="04db9629dd33ba568e9507add5df6587a0998361a03d3321948b448c653c2c1b7056434884ab6f3d1c529501f166a336e86f045cea10dffe58aa82ea13d725363";
//Нужен открытый текст шифрования и получаем массив байтов, соответствующий открытому тексту
byte[] dataBytes = "Я тестаааа".getBytes();
//Значение подписи
String signHex ="2881346e038d2ed706ccdd025f2b1dafa7377d5cf090134b98756fafe084dddbcdba0ab00b5348ed48025195af3f1dda29e819bb66aa9d4d088050ff148482a";

final SM2 sm2 = new SM2(null, ECKeyUtil.toSm2PublicParams(publicKeyHex));
sm2.usePlainEncoding();

// true
boolean verify = sm2.verify(dataBytes, HexUtil.decodeHex(signHex));

Ключи в других форматах

В алгоритме SM2 ключевые форматы следующие:

Закрытый ключ:

  • Значение D обычно представляет собой значение, непосредственно генерируемое аппаратным обеспечением.
  • Формат закрытого ключа PKCS#8, создаваемый JDK по умолчанию.
  • PKCS#1 обычно представляет собой формат ключа EC, созданный OpenSSL.

Открытый ключ:

  • Значение Q обычно представляет собой значение, непосредственно генерируемое аппаратным обеспечением.
  • Формат открытого ключа, созданный X.509 JDK по умолчанию.
  • PKCS#1 обычно представляет собой формат ключа EC, созданный OpenSSL.

В новой версии Hutool метод построения SM2 совместим с этими типами ключей, то есть пользователям не нужно обращать внимание на тип ключа:

Алгоритм шифрования дайджеста SM3

Язык кода:javascript
копировать
//Результат: 136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
Строка дайджестHex = SmUtil.sm3("ааааа");

Симметричное шифрование SM4

Язык кода:javascript
копировать
String content = "тестовый китайский";
SymmetricCrypto sm4 = SmUtil.sm4();

String encryptHex = sm4.encryptHex(content);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
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