BabaSSL:支持半同态加密算法 EC-ElGamal

news2024/11/15 17:22:14

01 背 景

随着大数据与人工智能的快速发展,个人隐私数据泄露和滥用时有发生,隐私安全问题也越来越被重视。

国家于 2020 年施行密码法2021 年施行个人信息保护法,对个人隐私数据和数据安全加密有更高的要求。

因此,隐私计算也不断地被提及和关注,源于其有优秀的数据保护作用,使得**『数据不出域、可用不可见』**,限定了数据的使用场景,防止了数据的泄露,而引起了业界的热捧。

隐私计算是指在保护数据本身不对外泄露的前提下,实现数据共享和计算的技术集合,共享数据价值,而非源数据本身,实现数据可用不可见。

  • 隐私计算对于个人用户来说,有助于保障个人信息安全;* 对于企业来说,隐私计算是数据协作过程中履行数据保护义务的关键路径;* 对于政府来说,隐私计算实现数据价值最大化的重要支撑。隐私计算目前在金融、医疗、电信、政务等领域均在开展应用试验,比如:

  • 银行和金融机构

不泄露各方原始数据的前提下,进行分布式模型训练,可以有效降低信贷、欺诈等风险;

  • 医疗机构

无需共享原始数据便可进行联合建模和数据分析,数据使用方在不侵犯用户隐私的情况下,可以使用建模运算结果数据,有效推动医疗行业数据高效利用

隐私计算的相关技术有多方安全计算 (MPC) 、可信执行环境 (TEE) 、联邦学习 (FL) 、同态加密 (HE) 、差分隐私 (DP) 、零知识证明 (ZKP) 、区块链 (BC) 等等。

这些技术各有优缺点,隐私计算的产品或者平台也是由这些技术来搭建。

其中与密码学明显相关的是同态加密,目前同态加密算法的开源项目各有千秋,用户使用比较复杂。BabaSSL 作为基础密码库,应该提供一套简单易用和高效的同态加密算法实现和接口,让上层应用更方便简单地使用同态加密算法。

此外,随着隐私计算技术的兴起,蚂蚁集团推出了开箱即用、软硬件结合的隐私计算基础设施,一站式解决方案,即可信原生一体机。

BabaSSL 作为蚂蚁可信原生一体机中的核心基础软件密码库,将同态加密等隐私计算所需的相关密码学能力整合其中,为可信原生一体机的用户带来更加便捷高效的使用体验。

02 同态加密

同态加密 (Homomorphic Encryption, HE) 是指满足密文同态运算性质的加密算法,按性质分为加法同态和乘法同态:

  • 加法同态
  • 乘法同态

同态加密后得到密文数据,对密文数据进行同态加法或者乘法得到密文结果,将密文结果同态解密后可以得到原始数据直接加法或者乘法的计算结果。

如下图:

根据满足加法和乘法的运算次数又分为:全同态加密和半同态加密。

- 全同态加密

( Fully Homomorphic Encryption, FHE )

1.支持任意次的加法和乘法运算

2.难实现、性能差 (密钥过大,运行效率低,密文过大)

3.主流算法:Gentry、BFV、BGV、CKKS

4.需要实现的接口

  • 半同态加密

(Partially Homomorphic Encryption, PHE)

1.只支持加法或乘法中的一种运算,或者可同时支持有限次数的加法和乘法运算

2.原理简单、易实现、性能好

3.主流算法:RSA、ElGamal、Paillier

4.需要实现的接口:

(1)KeyGen(): 密钥生成算法,用于产生加密数据的公钥 PK( Public Key)和私钥 SK(Secret Key),以及一些公共参数 PP(Public Parameter)。__(2)Encrypt(): 加密算法,使用 PK 对用户数据 Data 进行加密,得到密文 CT(Ciphertext)。

(3)Decrypt(): 解密算法,使用 SK 对密文 CT 解密得到数据原文 PT(Plaintext)。

(4)Add(): 密文同态加法,输入两个 CT 进行同态加运算。

(5)Sub(): 密文同态减法,输入两个 CT 进行同态减法算。

(6)ScalaMul() 或者 Mul() :密文同态标量乘法,输入一个 CT 和一个标量 PT,计算 CT 的标量乘结果。

EC-ElGamal 原理

ElGamal 加密算法是基于 Diffie-Hellman 密钥交换的非对称加密算法,EC-ElGamal 是 ECC 的一种,是把 ElGamal 移植到椭圆曲线上来的实现,主要计算有:椭圆曲线点加、点减、点乘、模逆和离散对数。

以下是 EC-ElGamal 的算法原理:

- 公共参数

1.G:椭圆曲线基点2.SK:私钥,SK=d

(d 是 0 到椭圆曲线的阶 q 之间的随机数)

3.PK:公钥,PK=dG

- 加密

1.明文 m,随机数 r

2.计算密文 C

(3)明文 m 的取值范围为模 order(G) 的模空间,但实际使用时 m 需限制为较小的数 (例如 32 比特长度) ,否则椭圆曲线离散对数问题 (ECDLP) 无法求解。

-_解密_1.计算 rPK

2.计算 mG:\

3.计算 mG 的 ECDLP,获得明文 m。- 密文加法、密文减法

1.两个密文

2 .密文加

对 2 个密文的 2 个 ECC 点分别做点加,共 2 个点加,公式如下:

3.密文减

对 2 个密文的 2 个 ECC 点分别做点减,共 2 个点减,公式如下:

- 密文标量乘法

1.密文

2.对密文的 2 个 ECC 点分别用 𝑚_2 做点乘,共 2 个点乘,公式如下:

3.如上公式与明文m2m1的同态加密结果一致:

这里 r=m2r1

03 算法实现

接口定义

  • 对象相关接口

1.上下文对象:EC_ELGAMAL_CTX,该对象用来保存公私钥以及一些其他内部用到的信息,是 EC-ElGamal 算法其他接口的第一个参数。

接口如下:

//创建 EC_ELGAMAL_CTX 对象,key 为 ECC 公钥或者私钥的 EC_KEY 对象 

2.解密表对象

EC_ELGAMAL_DECRYPT_TABLE,该对象用来保存解密表的内部信息。椭圆曲线离散对数问题(ECDLP)只有爆力破解的方法可求解,而爆力破解的速度比较慢,通常的做法是使用小步大步算法(Baby-Step,Giant-Step,BSGS)。总体思想是提前将所有可能的明文结果提前运算后,保存到 hash 表中,下次只需要进行少量的运算和 hash 表查找就可以得到结果,大大提高 ECDLP 的解密效率,但解密表的初始化可能比较慢,而且解密表的实现事关解密速度,后面考虑可以开放接口的实现给上层应用,所以这里先定义了一个解密表的对象和默认实现。

接口如下:

//创建 EC_ELGAMAL_DECRYPT_TABLE 对象
//decrypt_negative 为 1 时表示该解密表可以解密负数,初始化解密表时将可能的负数运算后插入到 hash 中。
EC_ELGAMAL_DECRYPT_TABLE *EC_ELGAMAL_DECRYPT_TABLE_new(EC_ELGAMAL_CTX *ctx, int32_t decrypt_negative);

//释放 EC_ELGAMAL_DECRYPT_TABLE 对象
void EC_ELGAMAL_DECRYPT_TABLE_free(EC_ELGAMAL_DECRYPT_TABLE *table);

//设置 EC_ELGAMAL_DECRYPT_TABLE 对象到上下文对象中
//解密时如果存在解密表则使用解密表进行求解,否则直接爆力破解,速度会很慢
void EC_ELGAMAL_CTX_set_decrypt_table(EC_ELGAMAL_CTX *ctx,EC_ELGAMAL_DECRYPT_TABLE *table); 

3.密文对象

EC_ELGAMAL_CIPHERTEXT,由上面原理可知,加密之后得到的结果是两个点,该对象是用来保存加密后的密文信息(两个点),加密/解密和。

接口如下:

//创建 EC_ELGAMAL_CIPHERTEXT 对象
EC_ELGAMAL_CIPHERTEXT *EC_ELGAMAL_CIPHERTEXT_new(EC_ELGAMAL_CTX *ctx);

//释放 EC_ELGAMAL_CIPHERTEXT 对象
void EC_ELGAMAL_CIPHERTEXT_free(EC_ELGAMAL_CIPHERTEXT *ciphertext); 

4.加密/解密接口

//加密,将明文 plaintext 进行加密,结果保存到 EC_ELGAMAL_CIPHERTEXT 对象指针 r 中
int EC_ELGAMAL_encrypt(EC_ELGAMAL_CTX *ctx, EC_ELGAMAL_CIPHERTEXT *r, int32_t plaintext);

//解密,将密文 ciphertext 进行解密,结果保存到 int32_t 指针 r 中
int EC_ELGAMAL_decrypt(EC_ELGAMAL_CTX *ctx, int32_t *r, EC_ELGAMAL_CIPHERTEXT *ciphertext); 

5.密文加/减/标量乘运算接口

//密文加,r = c1 + c2
int EC_ELGAMAL_add(EC_ELGAMAL_CTX *ctx, EC_ELGAMAL_CIPHERTEXT *r, EC_ELGAMAL_CIPHERTEXT *c1, EC_ELGAMAL_CIPHERTEXT *c2);

//密文减,r = c1 - c2
int EC_ELGAMAL_sub(EC_ELGAMAL_CTX *ctx, EC_ELGAMAL_CIPHERTEXT *r, EC_ELGAMAL_CIPHERTEXT *c1, EC_ELGAMAL_CIPHERTEXT *c2);

//标量密文乘,r = m * c
int EC_ELGAMAL_mul(EC_ELGAMAL_CTX *ctx, EC_ELGAMAL_CIPHERTEXT *r, EC_ELGAMAL_CIPHERTEXT *c, int32_t m); 

6.编码/解码接口

同态加密涉及到多方参与,可能会需要网络传输,这就将密文对象 EC_ELGAMAL_CIPHERTEXT 编码后才能传递给对方,对方也需要解码得到 EC_ELGAMAL_CIPHERTEXT 对象后才能调用其他接口进行运算。

接口如下:

//编码,将密文 ciphertext 编码后保存到 out 指针中,out 指针的内存需要提前分配好;
//如果 out 为 NULL,则返回编码所需的内存大小;
//compressed 为是否采用压缩方式编码,1 为压缩编码(编码结果长度较小),0 为正常编码(编码结果长度较大)
size_t EC_ELGAMAL_CIPHERTEXT_encode(EC_ELGAMAL_CTX *ctx, unsigned char *out,size_t size, EC_ELGAMAL_CIPHERTEXT *ciphertext,int compressed);

//解码,将长度为 size 的内存数据 in 解码后保存到密文对象 r 中
int EC_ELGAMAL_CIPHERTEXT_decode(EC_ELGAMAL_CTX *ctx, EC_ELGAMAL_CIPHERTEXT *r, unsigned char *in, size_t size); 

核心实现

BabaSSL 是 OpenSSL 的衍生版,内部支持了很多椭圆曲线算法的实现。

比如,已支持国际 (prime256v1、secp384r1 等) 和国密 (SM2) 的大部分椭圆曲线,天生实现了椭圆曲线点运算、公私钥生成等基础算法,所以在 BabaSSL 实现 EC-ElGamal 算法的核心实现主要是 EC-ElGamal 原理的实现和 ECDLP 求解算法的实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年博客之路总结

今年是不平凡的一年,IT行业 开卷 的一年,今年大多数人 都 因种种原因 被迫换了工作,再次 先感谢CSDN 这个平台,在这里 给自己了一块可以展示自己才华的空间,通过CSDN平台的各项运营数据,让我有幸 拿到了 更…

flv.js播放flv视频

flv.js是FLV视频播放器&#xff0c;纯JS开发&#xff0c;无需Flash。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

【虚幻引擎UE】UE5 制作一个元旦烟花短视频的小案例(使用sequence制作视频案例)

祝愿大家元旦快乐&#xff01; 效果预览 一、创建粒子烟花特效 可以使用现成的Niagara烟花粒子特效&#xff0c;直接跳过这一步。 1、 通过Niagara系统创建粒子特效 选择现有发射器素材。 或者也可新建空白特效&#xff0c;将发射器拖入轨道&#xff08;素材包含闪光、拖…

基于TP6+Uni-app框架开发的多端圈子社区论坛小程序H5系统,带数据库和安装教程

正文&#xff1a; 前台uni-app后台tp6开发的多端圈子社区论坛小程序H5系统,带数据库和安装教程。 系统基于TP6Uni-app框架开发&#xff1b;客户移动端采用uni-app开发&#xff0c;管理后台TH6开发。 系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步&#xff0c…

CSDN的2022和2023

前言 今天是2022年12月31日&#xff0c;今年的最后一天&#xff0c;年关已至。 又到了&#xff1a;回头看路&#xff0c;低头赶路&#xff0c;抬头望路的时候。 回顾2022 疫情中的2022 今年应该算是疫情的高峰期吧&#xff0c;各种新冠变异株横行&#xff0c;从严控到一夜…

Day845.Fork/Join -Java 并发编程实战

Fork/Join Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Fork/Join的内容。 线程池、Future、CompletableFuture 和 CompletionService&#xff0c;仔细观察会发现这些工具类都是在帮助站在任务的视角来解决并发问题&#xff0c;而不是让纠缠在线程之间如何协作的…

深度学习:05 卷积神经网络介绍(CNN)

目录 卷积神经网络简介 为什么要用卷积神经网络 网络结构组成 卷积层 卷积计算 卷积核大小 f 边界填充 (p)adding 步长 (s)tride 计算公式 卷积层 激活函数 池化层&#xff08;pooling&#xff09; dropout层 全连接层 卷积神经网络简介 卷积神经网络由一个或多个…

DoIP协议从入门到精通系列——车载网络安全

现代社会慢慢步入数字时代,在这个时代,网络安全已经成为最重要的关注点。自从1980年第一次出现电脑病毒,网络威胁和攻击持续不断,给社会(经济)带来巨大影响。随着汽车的数字化和互联化发展,自然而然会联想到汽车也将为成为黑客攻击的目标。导致的问题除了单纯的不便(攻…

数据结构 | 十大排序超硬核八万字详解【附动图演示、算法复杂度性能分析】

写在前面 2023年的第一篇博客&#xff0c;在这里先祝大家兔年快乐&#x1f430; 本文从学习到搜寻各种资料&#xff0c;整理成博客的形式展现足足花了一个月的时间&#xff0c;慢工出细活&#xff0c;希望本篇文章可以真正带你学懂排序&#xff0c;不再为写排序算法而苦恼 博主…

MQTT协议的工作原理

一、MQTT概述 MQTT由IBM的Andy Stanford-Clark博士和Arcom&#xff08;现为Eurotech&#xff09;的Arlen Nipper于1999年发明。 MQTT 是物联网 &#xff08;IoT&#xff09; 最常用的消息传递协议。MQTT 代表 MQ 遥测传输。该协议是一组规则&#xff0c;用于定义物联网设备如何…

二叉树16:找树左下角的值

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;513.找树左下角的值 题目&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边…

Android每周一轮子:Nvwa(热修复)

前言 &#xff08;废话&#xff09; 最近发现了一个问题&#xff0c;一些平时博客写的很多的程序员&#xff0c;反倒在日常的工作中&#xff0c;却是业务写的很一般&#xff0c;只会摆理论的人&#xff0c;甚至还跑出来教别人如何找工作&#xff0c;如何做架构&#xff0c;其实…

2022年终总结:少年不惧岁月长,彼方尚有荣光在。

2022年终总结&#xff1a;少年不惧岁月长&#xff0c;彼方尚有荣光在。 &#x1f3ac; 博客主页&#xff1a;王同学要努力 &#x1f3ac;个人简介&#xff1a;大三小白&#xff0c;喜欢前端 &#xff0c;热爱分享 &#x1f3a5; 本文由 王同学要努力 原创&#xff0c;首发于…

Eureka 注册中心

Eureka 注册中心目录概述需求&#xff1a;设计思路实现思路分析1.快速上手2.增加 Maven 依赖3.Client端配置注册中心Server端配置注册中心参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip ha…

R 语言 管道操作符

背景 关于代码的简洁性,就是你使用了比较简化的高级操作符,但是有时候会增加代码的可读性。这种可读性在于你是否真正的去了解R的高级语法。你了解高级语法,他就不难,你不了解,他就难,可读性差。 这里我们来讲解一下,关于管道操作符,使R语言编程简化一些。 管道操作…

【登录流程执行逻辑】

1)整体流程图 2.main.js是入口&#xff0c;里面require("permission")时会触发方法体 在进行require("权限时")&#xff0c;会进行一系列初始化。 重定向。 接着走login方法。 vuex其实就是store。 触发vuex里面的方法: await store.dispatch(user/getInf…

CDN消耗速度太快,解决办法

前段时间发现我网站的CDN消耗速度太快了&#xff0c;20多块钱100G的流量&#xff0c;半个月甚至十几天左右都消耗完了。 于是我看CDN的访问ip并不多&#xff0c;发现大部分消耗的都是静态资源&#xff0c;js等文件。 后来找到了解决办法&#xff0c;目前100G还有这么多 方法 …

基于MVC的网上汽车城网站平台开发

摘要 随着现代都市生活节奏的不断加快、网络覆盖面的日益扩大&#xff0c;越来越多的人们加入了网上购物的行列。如今&#xff0c;网购已经成为人们生活的一部分。本系统主要是使用 B/S架构开发出的一个基于 ASP.NET的网上汽车城网站平台开发。前台页面使用CSSDIV&#xff0c;后…

Torch包学习

创建 torch.from_numpy(ndarray) → Tensor&#xff1a;将numpy.ndarray 转换为pytorch的 Tensor。两者共享内存。返回的张量不能改变大小。orch.linspace(start, end, steps100, outNone) → Tensor&#xff1a;生成一个 从start 到 end 的tensor。tensor的长度为steps。包括…

JVM【字节码与类的加载篇】

Class文件结构 字节码文件的跨平台性(了解) 1.Java语言&#xff1a;跨平台的语言 当Java源代码成功编译为字节码后&#xff0c;如果想在不同的平台上运行&#xff0c;则无须再次编译这个优势不再那么吸引人了。Python PHP perl ruby lisp等有强大的解释器跨平台似乎已经快成…