立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

KonaJDK 8 新版本更新,国密算法轻松用

  • 2021-08-04
  • 本文字数:2470 字

    阅读完需:约 8 分钟

KonaJDK 8 新版本更新,国密算法轻松用

一、国密 SM2/SM3/SM4 算法支持


随着国密算法等商密算法国家标准的推出,云上客户对于 Java 版本的国密算法需求越来越多。


KonaJDK8 内置了国密算法的 JCE Provider, Java 用户只需要使用 JCE API 即可使用国密 SM2/SM3/SM4 算法。


下面利用微服务加密信息传输为例, 具体说明 TencentSMProvider 的使用方法。


1. 微服务示例简介


我们定义两个微服务,Consumer 与 Provider, 具体流程如图所示:



Consumer 负责根据 Provider 提供的秘钥对 secret 数据进行加密,然后传输给 Provider;Provider 侧负责生成公钥与私钥(SM2),或者秘钥(SM4), 获取 Consumer 提供的加密数据之后进行解密。


2. 国密 TencentSMProvider 的使用与说明


下面我们看一下以上逻辑的主要代码,请注意, 为了使代码简洁易懂,这里删除了一些日志打印以及异常处理的代码。另外代码中涉及的 SM4 秘钥传输并不安全,仅做说明使用。


首先看 Consumer 这一侧: 


  • 初始化 TencentSMProvider:



  • 获取秘钥


从发送 GET 请求到 <provider URL>/echo-rest/<sm2key> 和 <provider URL>/echo-rest/<sm4key> 来请求相应秘钥,并存储在相应变量中。



  • 使用 SM2/SM4 加密并传递密文


使用上一步存储的 Key 对数据进行加密。并使用 POST 发送给 Provider:<provider URL>/echo-rest/encrypt/{algorithm}/{str} 其中 algorithm 对应 SM2 与 SM4, str 对应待加密数据。http 消息中 header 包含解密所需要的参数,如 SM4 GCM 模式需要的 IV 和 tag , header 中还包含密文。



Provider 接收后会将数据解密并返回给 Consumer, 这里就是存储在 result 中。


再看 Provider 这一侧:


  • 初始化 TencentSMProvider


首先是 SM2/SM4 所需 Key 与配置:



  • 生成秘钥


在获得 Consumer 秘钥请求后,针对 SM2 生成 KeyPair,包含公钥与私钥,并返回公钥给 Consumer ; 针对 SM4 生成秘钥并返回给 Consumer :



  • 获取 SM2/SM4 加密的密文并解密



  • 使用 SM3 计算 hash digest


注意上图的代码中已经包含了使用 SM3 计算 digest 的实现。实际上 Consumer 可以通过 <provider URL>/echo-rest/encrypt/SM3/{str}  请求来通过 Provider 使用 SM3 计算 str 的 hash digest.


3. 如何运行


使用以上代码,用户需要使用 KonaJDK 启动 Consumer 与 Provider 微服务,之后只需要给 Consumer 发送 GET Key 请求以及 POST 待加密数据, 即可看到返回值中会打印解密之后的数据。例如:


(1)SM2 数据加密与解密


~$ curl http://localhost:18083/echo-rest/getkeysm2            --(获取 SM2 公钥)


MDQyMWJkNGY0ZDU0Y2U5MGIyMTY5NWVhNmRkNDRjN2M3NWY5MzE5OTc4OGQwOGZiNzA4NjJlNjE4NjYzYjJkMGQ0ZWFiODY3MzNiMDFlNTczN2E3MjkxNTE5NjgzODYxM2NlMjQyMTZkYjExNjE2NmFiYTVmYTFjNDZhM2RiYzcwNw==

-- (公钥)


~$ curl -X POST http://localhost:18083/echo-rest/encrypt/SM2/IamSecretData  

-- (加密数据 “IamSecretData”)


provider get secret: IamSecretData

--( Provider 解密后的数据打印)


(2)SM4 数据加密与解密


~$ curl http://localhost:18083/echo-rest/getkeysm4

--(获取 SM4 秘钥)


XaiwPX+FWQnVsqPpYgszpA==

-- (秘钥)


~$ curl -X POST http://localhost:18083/echo-rest/encrypt/SM4/IamSecretData

-- (加密数据 “IamSecretData”)


provider get secret: IamSecretData

--( Provider 解密后的数据打印)


(3)SM3 获取 “IamSecretData” 的 hash digest


$ curl -X POST http://localhost:18083/echo-rest/encrypt/SM3/IamSecretData

provider get secret: ��%�h���Y�F�{��7��ע����<,


目前, KonaJDK8 中的 TencentSMProvider 主要支持的 SM2/SM4 算法配置如下:



我们即将推出 TencentSMProvider 的独立 jar 包版本,帮助用户在使用 openJDK 是同样可以使用 TencentSMProvider 提供的加密算法。


另外, TencentSMProvider 也可以拓展支持商业版本的国密算法, 由腾讯安全团队的密码专家提供优化与性能提升,欢迎垂询。


二、G1 并行 FullGC 优化


G1 算法由于具有更低的暂停和更高的吞吐,已经逐步开始取代 CMS 算法被广泛应用在各种在离线数据处理系统中,特别是在大堆情况下,在 JDK14 里面,CMS 算法正式被移除,G1 也在 JDK9 开始成为 JDK 默认的 GC 算法。


G1 算法通过 concurrent cycle,mixed gc 等算法来回收 Old 区对应的 Heap Region,有效降低 Old 区 Region 的回收成本,但是在最坏的情况下,G1 仍然需要靠 Full GC 算法来暂停业务,回收内存。


由于 JDK8 的 G1 Full GC 是单线程,全停机的实现,所以一旦由于内存碎片,业务流量变化等触发了 Full GC,一般会造成几十秒到上百秒的暂停,进而导致业务 SLA 可用性指标大幅降低,KonaJDK 8.0.4 版本里面对 G1 Full GC 算法进行了系统的优化,提供了一个 G1 并行 Full GC 实现,充分利用机器多核优势,大幅降低 Full GC 的停机时间,在内部大数据业务场景的测试中, 优化后的 G1 Full GC 停机时间平均降低约 80%。


性能评测数据如下:



三、并行堆扫描优化


另外,我们将 TencentKona 对于 openJDK 社区的贡献 parallel heap inspection 也汇合到 KonaJDK8 中, 用户在使用 G1 和 ParallelScavenge GC 时,可以通过使用 “jmap -histo:parallel=<n>” 选项提升 jmap 扫描堆得时间。从我们在 280g 大堆,多核 CPU 平台上的经验,针对 G1 GC, “jmap -histo:parallel=30” 可将对扫描时间从 15s 降至 0.8s。


另外针对高版本不在支持的 CMS GC,KonaJDK 团队也进行了 parallel heap inspection 的开发,内部正在针对该功能进行测试, 待测试完毕也会在后续版本中引入,敬请期待。


除了以上新特性以外, KonaJDK 本次升级还包含其他性能优化与问题修复。KonaJDK 团队也在持续开发和维护,不断努力,提供稳定可靠的 JDK,欢迎您的使用与反馈。


参考链接:

https://github.com/Tencent/TencentKona-8/releases



头图:Unsplash

作者:臧琳

原文:https://mp.weixin.qq.com/s/LGNs9Ljp5PAnvo7RpwsO3w

原文:KonaJDK 8 新版本更新,国密算法轻松用

来源:云加社区 - 微信公众号 [ID:QcloudCommunity]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


2021-08-04 12:003040

评论

发布
暂无评论
发现更多内容

腾讯云 ES 之日志分析新范式:10 倍性价比提升!基于 ES Serverless 完成审计日志溯源

腾讯云大数据

ES

Java RMI技术详解与案例分析

不在线第一只蜗牛

Java

从一个服务预热不生效问题谈微服务无损上线

阿里巴巴云原生

阿里云 微服务 云原生

将数据库系统实践转向 AI:使用生成式 AI 创建高效的开发和维护实践

哦豁完蛋了

AI Codec

腾讯云大数据 TBDS 参编信通院《数据库发展研究报告》,引领数据湖仓创新

腾讯云大数据

TBDS

构建数据中台,引领零售业数字化转型的最佳实践

数造万象

数据中台 零售 数字化 数据智能 实践案例

天翼云HBlock有奖众测活动 在线邀请存储Geek玩转轻量存储

InfoQ写作社区官方

热门活动 礼品 活动推荐 天翼云

数据复盘“黑色星期一”:加密市场震荡,代币表现如何?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

c#12 实验特性Interceptor如何使用的一个简单但完整的示例

EquatorCoco

C# 开发语言

国际化战略:京东商品详情API的全球视野

技术冰糖葫芦

api 货币化 API 接口 API 文档 API 测试

解锁亚马逊商品数据:API获取商品列表信息

tbapi

亚马逊API 亚马逊商品数据采集 亚马逊商品列表接口

JavaScript 字符串方法,让开发者生活更轻松

伤感汤姆布利柏

Golang 策略设计模式

俞凡

架构 设计模式

Spring Boot 基于 SCRAM 认证集成 Kafka 的详解

不在线第一只蜗牛

kafka Spring Boot

最佳实践:解读GaussDB(DWS) 统计信息自动收集方案

华为云开发者联盟

大数据 GaussDB(DWS) 企业号 8 月 PK 榜 2024企业号8月pk 实时查询

给我5分钟,保证教会你在vue3中动态加载远程组件

EquatorCoco

Vue 动态加载

免费一站式搭建企业云上数据库与BI 数据可视化分析平台

XxinQi

VideoProc Converter 4K for mac(一站式视频处理软件) v6.5中文版

Mac相关知识分享

Mac软件 视频处理软件

私网环境下如何使用云效流水线进行 CI/CD?

阿里巴巴云原生

阿里云 云原生 云效

代理IP如何助力品牌保护?

IPIDEA全球HTTP

品牌 代理IP

WiFi 7 IPQ5332 vs. WiFi 6 IPQ6010: A Comprehensive Comparison

wifi6-yiyi

WiFi7

2024 年 7 月区块链游戏研报:市场波动与数据分化的挑战与机遇

Footprint Analytics

链游

广汽集团与火山引擎签署战略合作协议

新消费日报

云手机:海外社媒运营必备工具

Ogcloud

云手机 海外云手机 云手机海外版 云手机群控 海外社媒运营

私网环境下如何使用云效流水线进行 CI/CD?

阿里云云效

阿里云 云原生 云效

ai做ppt的工具哪个好?盘点8个好用的AIPPT生成软件!

彭宏豪95

效率工具 职场 PPT 办公软件 AI生成PPT

重磅!观测云荣获SOC 2 Type II鉴证报告

观测云

安全合规

一文全面了解HPC高性能计算平台是什么、怎么选型?高性能计算平台CHPC 都能做什么?

XxinQi

打卡智能中国(八):“水花消失术”的AI秘籍

脑极体

AI

AI 点燃体育热情!使用 PAI-Artlab 定制专属海报

阿里云大数据AI技术

人工智能 奥运会 AIGC 文生图 PAI

官宣|Apache Flink 1.20 发布公告

Apache Flink

flink 实时计算 官宣

KonaJDK 8 新版本更新,国密算法轻松用_语言 & 开发_云加社区_InfoQ精选文章