Java — глубокое понимание алгоритмов шифрования, дешифрования и подписи.
Национальная криптозоология относится к отечественному криптографическому алгоритму, признанному Государственным бюро криптозоологии. В основном это SM1, SM2, SM3 и SM4. Длина ключа и длина блока составляют 128 бит.
Национальные криптографические алгоритмы относятся к серии отечественных криптографических алгоритмов, признанных Государственным криптографическим управлением, включая SM1-SM9 и ZUC. в
В настоящее время в нашей стране в качестве коммерческих алгоритмов шифрования в основном используются общедоступные SM2, SM3 и SM4.
Алгоритмы SM1 и SM7 не являются общедоступными. При вызове этого алгоритма необходимо вызывать его через интерфейс чипа шифрования.
Национальный секретный алгоритм достиг симметрии от SM1-SM4 соответственно.、асимметричный、абстрактное и т. д.алгоритм Функция,Он широко используется во всех аспектах повседневной работы и жизни.,VPN нравится использовать на работе,Движение средств в финансовом бизнесе、Оплата картой,А также средства контроля доступа, аутентификации личности и т. д.
Алгоритм SM1 представляет собой алгоритм блочного шифрования с длиной блока 128 бит и длиной ключа 128 бит. Уровень безопасности и конфиденциальности алгоритма, а также производительность соответствующей программной и аппаратной реализации сопоставимы с AES. Алгоритм не является общедоступным и предназначен только для этого. существует в чипе в виде IP-ядра.
С использованием этого алгоритма был разработан ряд продуктов безопасности, таких как чипы, смарт-карты с интеллектуальными микросхемами, интеллектуальные ключи-пароли, карты шифрования и шифровальные машины, которые широко используются в различных областях применения электронного правительства, электронной коммерции и национальной безопасности. экономика (включая дела национального правительства, полицейская связь и т. д.) и другие важные области).
Его можно понимать как отечественный RSA. Асимметричное шифрование, основанное на ECC. Алгоритм находится в открытом доступе. Поскольку этот алгоритм основан на ECC, его скорость подписи и скорость генерации ключей выше, чем у RSA.
Алгоритм шифрования с открытым ключом на основе эллиптической кривой SM2 представляет собой алгоритм шифрования с открытым ключом, независимо разработанный в моей стране, включая алгоритм цифровой подписи на основе эллиптической кривой SM2-1, протокол обмена ключами с эллиптической кривой SM2-2 и алгоритм шифрования с открытым ключом на основе эллиптической кривой SM2-3. соответственно, реализовывать такие функции, как согласование ключа цифровой подписи и шифрование данных. Разница между алгоритмом SM2 и алгоритмом RSA заключается в том, что алгоритм SM2 основан на задаче дискретного логарифма группы точек на эллиптической кривой. По сравнению с алгоритмом RSA, 256-битный пароль SM2 уже надежнее, чем 2048-битный RSA. пароль, но скорость работы выше, чем у RSA.
Его можно понимать как отечественный MD5. Краткое содержание сообщения. MD5 можно использовать для сравнения, чтобы понять. Алгоритм находится в открытом доступе. Результат проверки — 256 бит.
Его можно понимать как внутренний AES. Алгоритм пакетной передачи данных для стандартов беспроводной локальной сети. Симметричное шифрование, длина ключа и длина блока составляют 128 бит.
Алгоритм идентификационного шифрования (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 представляет собой криптографический алгоритм с открытым ключом, основанный на эллиптических кривых. Его безопасность в основном зависит от сложности задачи дискретного логарифмирования эллиптической кривой. По сравнению с алгоритмом RSA, алгоритм SM2 требует более короткой длины ключа при той же степени безопасности, поэтому он имеет определенные преимущества в скорости шифрования и подписи. Кроме того, при разработке алгоритма SM2 также учитывались различные методы атак и были приняты соответствующие меры защиты для обеспечения его безопасности в практических приложениях.
Алгоритм SM3 — это криптографический алгоритм хеширования, который в основном используется в таких сценариях, как цифровые подписи и аутентификация сообщений. Его безопасность в основном отражается в следующих аспектах:
Алгоритм SM4 — это алгоритм блочного шифрования, который в основном используется для шифрования и дешифрования данных. Его безопасность в основном отражается в следующих аспектах:
Подводя итог, можно сказать, что алгоритмы SM2, SM3 и SM4 среди алгоритмов национальной секретности обладают высокой степенью безопасности и могут удовлетворить потребности криптографических приложений в различных сценариях. В практических приложениях подходящие алгоритмы могут быть выбраны и использованы в соответствии с конкретными потребностями и сценариями.
Hutool упростил упаковку для Bouncy Castle и используется для реализации SM2, SM3 и SM4 в национальном секретном алгоритме.
Пакет инструментов национального секретного алгоритма включает в себя:
Алгоритм национальной секретности должен ввести зависимость от библиотеки Bouncy Castle.
использовать
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.69</version>
</dependency>
Примечание. Для версии bcprov-jdk15to18 выполните поиск в центральной библиотеке Maven, чтобы найти последнюю версию соответствующего JDK.
String text = «Я тестаааа»;
SM2 sm2 = SmUtil.sm2();
// Шифрование с открытым ключом, расшифровка с закрытым ключом
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
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));
String content = «Я Хэнли»;
final SM2 sm2 = SmUtil.sm2();
String sign = sm2.signHex(HexUtil.encodeHexStr(content));
// true
boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(content), sign);
конечно,ХОРОШОПользовательская пара ключей
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);
использовать Точки кривой в стадии строительстваиз Создание и проверка точек см.:https://i.goto327.top/CryptTools/SM2.aspx?tdsourcetag=s_pctim_aiomsg
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)
//Обычный текст, который необходимо подписать, получаем массив байтов, соответствующий простому тексту
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);
//Указанный открытый ключ
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 ключевые форматы следующие:
Закрытый ключ:
Открытый ключ:
В новой версии Hutool метод построения SM2 совместим с этими типами ключей, то есть пользователям не нужно обращать внимание на тип ключа:
//Результат: 136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
Строка дайджестHex = SmUtil.sm3("ааааа");
String content = "тестовый китайский";
SymmetricCrypto sm4 = SmUtil.sm4();
String encryptHex = sm4.encryptHex(content);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);