GmSSL — это набор криптографических инструментов с открытым исходным кодом, который поддерживает SM2/SM3/SM4/SM9/ZUC и другие алгоритмы национальной тайны (национального коммерческого шифрования), цифровые сертификаты национальной секретности SM2 и протоколы безопасной связи SSL/TLS на основе сертификатов SM2, а также поддерживает национальную тайну. Аппаратное обеспечение Криптографическое устройство предоставляет программные интерфейсы и инструменты командной строки, которые соответствуют стандартам национальной безопасности и могут использоваться для создания PKI/CA, защищенной связи, шифрования данных и других приложений безопасности, соответствующих стандартам национальной безопасности.
Проект GmSSL является ответвлением проекта OpenSSL и поддерживает совместимость интерфейса с OpenSSL. Таким образом, GmSSL может заменить компонент OpenSSL в приложении и позволить приложению автоматически иметь возможности безопасности, основанные на национальных секретах. Проект GmSSL использует лицензию с открытым исходным кодом, подобную BSD, которая удобна для коммерческих приложений. Это открытый исходный код, который можно использовать для коммерческих приложений с закрытым исходным кодом.
Проект GmSSL разрабатывается и поддерживается исследовательской группой по криптографии доцента Гуань Чжи из Пекинского университета, а исходный код проекта размещен на GitHub. С момента своего выпуска в 2014 году GmSSL был развернут и применен во многих проектах и продуктах и выиграл второй приз на китайском конкурсе программного обеспечения для Linux «Yiming Cup» 2015 года (высшая награда года) и рекомендованный проект китайской криптографии с открытым исходным кодом. . Основная цель проекта GmSSL — содействие внутренней безопасности киберпространства с помощью технологии криптографии с открытым исходным кодом.
Национальный секретный алгоритм — это аббревиатура национального коммерческого алгоритма паролей. С 2012 года,Государственное управление криптозоологии принимает «Стандарты криптографической отрасли Китайской Народной Республики».,Объявлены один за другимSM2/SM3/SM4
Подождите парольалгоритм Стандарты и спецификации их применения。в“SM”
представлять«Бизнес-секреты»
,То есть технология шифрования, которая используется в коммерческих целях и не содержит государственной тайны.
Среди них SM2 является открытым, основанным на криптографии эллиптических кривых. стандарт ключевого криптографического алгоритма, включая цифровые подписи, обмен ключами и открытый доступ. ключшифрование,используется для заменыRSA/Diffie-Hellman/ECDSA/ECDH
В ожидании международногоалгоритм。SM3Хешировать парольалгоритм,используется для заменыMD5/SHA-1/SHA-256
В ожидании международногоалгоритм。SM4для блочного шифра,используется для заменыDES/AES
В ожидании международногоалгоритм;SM9для паролей на основе личностиалгоритм,Она может заменить систему PKI/CA, основанную на цифровых сертификатах. Путем развертывания Национального секретного алгоритма,Это может снизить риски, вызванные слабыми паролями и неправильной реализацией, а также накладные расходы, вызванные развертыванием PKI/CA.
скачать
wget https://github.com/guanzhi/GmSSL/archive/refs/tags/v3.1.1.zip
unzip v3.1.1.zip
Установить
cd GmSSL-3.1.1/
mkdir build
cd build/
sudo cmake ..
cmake компилировать
sudo cmake ..
-- The C compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for getentropy
-- Looking for getentropy - found
-- have getentropy
-- Configuring done
-- Generating done
-- Build files have been written to: /home/www/build/GmSSL-3.1.1/build
компилировать
make
Установить
sudo make install
Ошибка при выполнении gmssl
sudo /usr/local/bin/gmssl
/usr/local/bin/gmssl: error while loading shared libraries: libgmssl.so.3: cannot open shared object file: No such file or directory
这时候要编辑/etc/ld.so.conf
документ,Добавьте строку:
/usr/local/lib
Затем выполните команду:
ldconfig
Введите в командной строке gmssl version
sudo /usr/local/bin/gmssl version
GmSSL 3.1.1
когда ты видишьGmSSL 3.1.1
когда,Это означает, что gmsslУстановить удалось.
Предоставить разрешения на выполнение текущему пользователю
sudo chown www:www /usr/local/bin/
путем выполненияgmssl --help
Заказ
gmssl --help
gmssl: illegal option '--help'
usage: gmssl command [options]
command -help
Commands:
help Print this help message
version Print version
rand Generate random bytes
sm2keygen Generate SM2 keypair
sm2sign Generate SM2 signature
sm2verify Verify SM2 signature
sm2encrypt Encrypt with SM2 public key
sm2decrypt Decrypt with SM2 private key
sm3 Generate SM3 hash
sm3hmac Generate SM3 HMAC tag
sm4 Encrypt or decrypt with SM4
zuc Encrypt or decrypt with ZUC
sm9setup Generate SM9 master secret
sm9keygen Generate SM9 private key
sm9sign Generate SM9 signature
sm9verify Verify SM9 signature
sm9encrypt SM9 public key encryption
sm9decrypt SM9 decryption
pbkdf2 Generate key from password
reqgen Generate certificate signing request (CSR)
reqsign Generate certificate from CSR
reqparse Parse and print a CSR
crlget Download the CRL of given certificate
crlgen Sign a CRL with CA certificate and private key
crlverify Verify a CRL with issuer's certificate
crlparse Parse and print CRL
certgen Generate a self-signed certificate
certparse Parse and print certificates
certverify Verify certificate chain
certrevoke Revoke certificate and output RevokedCertificate record
cmsparse Parse CMS (cryptographic message syntax) file
cmsencrypt Generate CMS EnvelopedData
cmsdecrypt Decrypt CMS EnvelopedData
cmssign Generate CMS SignedData
cmsverify Verify CMS SignedData
sdfutil SDF crypto device utility
skfutil SKF crypto device utility
tlcp_client TLCP client
tlcp_server TLCP server
tls12_client TLS 1.2 client
tls12_server TLS 1.2 server
tls13_client TLS 1.3 client
tls13_server TLS 1.3 server
$ KEY=11223344556677881122334455667788
$ IV=11223344556677881122334455667788
шифрование
echo Hello Tinywan | gmssl sm4 -cbc -encrypt -key $KEY -iv $IV -out sm4.cbc
// шифрованиесодержание
more sm4.cbc
$×ʩ#
Расшифровать
gmssl sm4 -cbc -decrypt -key $KEY -iv $IV -in sm4.cbc
Hello Tinywan
echo -n “Стек технологий с открытым исходным кодом” | gmssl sm3
3b944faa488763d08967e7999aa565f8035277f9b017adc8fe209e81de698465
Генерация открытых и закрытых ключей
gmssl sm2keygen -pass 1234 -out sm2.pem -pubout sm2pub.pem
закрытый ключ
cat sm2.pem
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBBjBhBgkqhkiG9w0BBQ0wVDA0BgkqhkiG9w0BBQwwJwQQD7UeQ0Nd0c8HjwJC
BwrZDAIDAQAAAgEQMAsGCSqBHM9VAYMRAjAcBggqgRzPVQFoAgQQJXNNiqfAxKIx
y4Ze0KxunASBoHsXGe2jtW6N1DkBROWr/QAY9r6zRlZ4JTphVjdy5MzRJo1Wa6pc
+AxPKqouSi5kfayp0nKvJijIZY2e67J3hF327g+xGHj9+keSfTZS1sJfN2c/i1CM
Zcg2IKes5/T3Zk6DRZKcGIwuuUo3cVYcw+oT3lE5onnSBYT0DXdrRpfGzM8yB3Qb
yfEcSLm+f22Xzx05AzyiMKWQHSk7n+aH50o=
-----END ENCRYPTED PRIVATE KEY-----
открытый ключ
cat sm2pub.pem
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE7DOZdFLay3eY7/H8J1CECQ5s2Z8o
4flOpF1HdPjUh4mPGigJzuOp/PzrrEMTuu9cISHqMmHn6XQDP6B6cy56Rg==
открытый ключшифрование
echo -n "Tinywan Стек технологий с открытым исходным кодом" | gmssl sm3 -pubkey sm2pub.pem -id 1234567812345678
7b2f0eb9ce8bf75a799bccff590f38178fbe8d14ff56a2ab001ce382b05cfcf0
$ gmssl sm2keygen -pass 1234 -out sm2.pem -pubout sm2pub.pem
$ echo hello | gmssl sm2sign -key sm2.pem -pass 1234 -out sm2.sig #-id 1234567812345678
$ echo hello | gmssl sm2verify -pubkey sm2pub.pem -sig sm2.sig -id 1234567812345678
$ echo hello | gmssl sm2encrypt -pubkey sm2pub.pem -out sm2.der
$ gmssl sm2decrypt -key sm2.pem -pass 1234 -in sm2.der
$ gmssl sm2keygen -pass 1234 -out sm2.pem -pubout sm2pub.pem
$ echo hello | gmssl sm2encrypt -pubkey sm2pub.pem -out sm2.der
$ gmssl sm2decrypt -key sm2.pem -pass 1234 -in sm2.der
$ gmssl sm2keygen -pass 1234 -out rootcakey.pem
$ gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA -days 3650 -key rootcakey.pem -pass 1234 -out rootcacert.pem -key_usage keyCertSign -key_usage cRLSign
$ gmssl certparse -in rootcacert.pem
$ gmssl sm2keygen -pass 1234 -out cakey.pem
$ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN "Sub CA" -days 3650 -key cakey.pem -pass 1234 -out careq.pem
$ gmssl reqsign -in careq.pem -days 365 -key_usage keyCertSign -path_len_constraint 0 -cacert rootcacert.pem -key rootcakey.pem -pass 1234 -out cacert.pem
$ gmssl sm2keygen -pass 1234 -out signkey.pem
$ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -days 365 -key signkey.pem -pass 1234 -out signreq.pem
$ gmssl reqsign -in signreq.pem -days 365 -key_usage digitalSignature -cacert cacert.pem -key cakey.pem -pass 1234 -out signcert.pem
$ gmssl sm2keygen -pass 1234 -out enckey.pem
$ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -days 365 -key enckey.pem -pass 1234 -out encreq.pem
$ gmssl reqsign -in encreq.pem -days 365 -key_usage keyEncipherment -cacert cacert.pem -key cakey.pem -pass 1234 -out enccert.pem
$ cat signcert.pem > certs.pem
$ cat cacert.pem >> certs.pem
$ gmssl certverify -in certs.pem -cacert rootcacert.pem
$ gmssl certparse -in cacert.pem
Официальная документация: http://gmssl.org/docs/quickstart.html.