AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

KonaJDK 助力微服务国密算法使用特性一览

  • 2021-03-08
  • 本文字数:2640 字

    阅读完需:约 9 分钟

KonaJDK 助力微服务国密算法使用特性一览

导读


本次 TencentKona 8 版本更新到 8.0.4, 在同步到社区版本 8u272 的基础上,还有哪些新的特性呢?本文为您一一介绍:


  • Update to jdk8u272

  • TencentSMProvider for SM2/SM3/SM4 support

  • Parallel Full GC for G1

  • Parallel Heap Inspection for G1 and ParallelScavenge Heap

  • Other performance enhancement

  • Bug fixes

国密 SM2/SM3/SM4 算法支持 JCE Provider

TencentSMProvider


随着国密算法等商密算法国家标准的推出,云上客户对于 Java 版本的国密算法需求越来越多。KonaJDK8 内置了国密算法的 JCE Provider, Java 用户只需要使用 JCE API 即可使用国密 SM2/SM3/SM4 算法。


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


  • 微服务示例简介


我们定义两个微服务,Consumer 与 Provider,


具体流程如图所示:



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


  • 国密 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.

  • 如何运行

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

  • 例如:

  • 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 解密后的数据打印)
复制代码


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 解密后的数据打印)
复制代码


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


作者介绍


臧琳


腾讯云中间件 JVM 工程师


主要负责腾讯云中间件 JDK 定制化开发及优化工作


专注于 JVM 中内存管理、Runtime 运行时以及执行引擎在云业务中的性能分析及优化


本文转载自公众号腾讯云中间件(ID:gh_6ea1bc2dd5fd)。


原文链接


去哪儿网 ReactNative 跨小程序多端方案介绍

2021-03-08 14:002364

评论 1 条评论

发布
用户头像
国密最大的问题出在加密机。而不是算法。
2021-03-10 20:07
回复
没有更多了
发现更多内容

苹果电脑软件应用打开出现意外退出、崩溃问题解决办法

互联网搬砖工作者

PCB拼版对SMT组装的影响,华秋一文告诉你

华秋电子

OpenSea交易平台开发NFT系统部署技术

薇電13242772558

NFT

携多款产品亮相“深圳先进制造业集群展”,华秋积极探索发展机遇

华秋电子

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等

汀丶人工智能

人工智能 自然语言处理 深度学习 关系抽取 命名实体识别

现在学C4D还是Blender好?这俩有啥区别?

Finovy Cloud

blender C4D

EMQ&阿里云Lindorm联合方案:解决物联网关键业务场景数据处理难题

EMQ映云科技

阿里云 物联网 IoT 数据处理 企业号 4 月 PK 榜

面试官:谈谈分布式一致性机制

Java永远的神

程序员 分布式 微服务 后端 架构师

智慧公共厕所,重构城市公共服务的新模式@光明源智慧公厕

光明源智慧厕所

智慧城市

EasyMR 安全架构揭秘:如何管理 Hadoop 数据安全

袋鼠云数栈

大数据

关于FTP文件传输协议说明,带你了解更详细的文件传输协议

镭速

上传了ipa但在苹果App Store中没有看到构建版本的问题

5 大手段,打造单一可信源代码托管平台|极狐GitLab DevSecOps 助力 SLSA 落地之源代码篇

极狐GitLab

DevOps DevSecOps 源代码 安全审计 SLSA

【福利】ChatGPT免费体验期延长,商用版正式开启预约!

BeeWorks

华秋PCB生产工艺分享 | 第十一道之成型

华秋电子

漫谈 ChatGPT 与问答式 BI

观远数据

数据分析 BI ChatGPT

干货分享|金融机构如何通过标签画像实现精细化客户运营?

索信达控股

详解 Flink Catalog 在 ChunJun 中的实践之路

袋鼠云数栈

flink

行业盛会丨九科信息亮相第十一届中国电子信息博览会(CITE2023),与您共享科技盛宴

九科Ninetech

精选2023年大厂高频Java面试真题集锦(含答案),面试一路开挂

程序知音

java面试 java架构 Java进阶 后端技术 Java面试八股文

阿里内部都在疯传!企业级Spring Boot 项目开发实战教程,我先肝了

程序知音

Java 微服务 springboot java架构 Java进阶

选择低代码,帮企业数字化转型提交一份满分答卷

加入高科技仿生人

软件开发 低代码 数字化 数字转型

新旧版本功能对比 | v1.5.0 全新升级

BinTools图尔兹

数据库 社区版 版本更新

MobTech ShareSDK|分享报错怎么办

MobTech袤博科技

GOPS 全球运维大会来了,龙蜥社区邀您一起了解“系统运维”

OpenAnolis小助手

开源 操作系统 内核 龙蜥社区 GOPS全球运维大会

面试还不懂Netty,看这篇文章就够了!

程序员小毕

Java 程序员 后端 Netty 架构师

关于 IDP 的五大认知误解

SEAL安全

IdP 平台工程

Redis崩吗?来一起搞定 Redis 实践中的常见问题!

Steven

redis

KonaJDK 助力微服务国密算法使用特性一览_服务革新_臧琳_InfoQ精选文章