首页 > 其他分享 >RELIC库学习

RELIC库学习

时间:2022-12-15 14:12:47浏览次数:195  
标签:RELIC bn pub 学习 prv new null

RELIC库学习》

文章介绍:密码学与区块链技术实验室向开源项目RELIC贡献国密算法代码

了解

RELIC是由Diego F. Aranha开发的高效、灵活的开源密码原语工具箱,包含多精度整数运算、有限域(包含素数域和二元域)运算、椭圆曲线、双线性映射和扩域运算、密码协议(如RSA、Rabin、ECDSA、BLS短签名、BB短签名、Paillier同态加密方案等),支持不同安全等级、多种优化实现方法和多平台运行,在学术界和工业界均得到了广泛应用。

只依赖于GMP库

2022年11月7日,武汉大学密码学与区块链技术实验室向开源项目RELIC贡献了国密算法代码。

具体贡献:

  • 增加了该项目对SM2椭圆曲线参数的支持
  • 修正了SM9算法参数下双线性映射的实现代码

实验结果:

配置64位Ubuntu操作系统、Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz、14GB内存的主机上,基于GMP库,使用RELIC实现SM2/9算法中核心运算的性能如下:

图片

图片

以上是SM2和SM9的测试结果。

安装

环境:Centos7

依赖:安装GMP库,参考:https://www.cnblogs.com/pam-sh/p/16750646.html

git clone https://github.com/relic-toolkit/relic.git

cd relic

mkdir build
cd build

cmake ..
make

测试

测试:demo/psi-client-server

# 修改makefile文件

image-20221212150641189

make

./receiver

./sender

测试:paillier算法(demo/general-paillier)

static int paillier(void) {
	int code = RLC_ERR;
	bn_t a, b, c, d, s, pub, prv;
	int result;

	bn_null(a);
	bn_null(b);
	bn_null(c);
	bn_null(d);

	bn_null(pub);
	bn_null(prv);

	RLC_TRY {
		bn_new(a);
		bn_new(b);
		bn_new(c);
		bn_new(d);

		bn_new(pub);
		bn_new(prv);

		/* Generate 2048-bit public and private keys (both integers). */
		result = cp_ghpe_gen(pub, prv, 2048);
		assert(result == RLC_OK);

		printf("Public key:\n");
		bn_print(pub);
		printf("Private key:\n");
		bn_print(prv);

		for (int s = 1; s <= 2; s++) {
			util_print("Testing generalized paillier for (s = %d)\n", s);

			// 加解密测试
			/* Generate plaintext smaller than n^s. */
			bn_rand(a, RLC_POS, s * (bn_bits(pub) - 1)); //明文随机数a
			/* Encrypt, decrypt and check if the result is the same. */
			assert(cp_ghpe_enc(c, a, pub, s) == RLC_OK);  //密文c
			assert(cp_ghpe_dec(b, c, pub, prv, s) == RLC_OK); //解密测试b
			assert(bn_cmp(a, b) == RLC_EQ);

			//同态性测试:Dec(c*d)=a+b
			/* Generate new plaintexts smaller than n^s. */
			bn_rand(a, RLC_POS, s * (bn_bits(pub) - 1));  //明文a
			bn_rand(b, RLC_POS, s * (bn_bits(pub) - 1));  //明文b
			/* Encrypt both plaintexts using the same public key. */
			assert(cp_ghpe_enc(c, a, pub, s) == RLC_OK);	//密文c
			assert(cp_ghpe_enc(d, b, pub, s) == RLC_OK);	//密文d

			/* Now compute c = (d * c) mod n^(s + 1). */
			bn_mul(c, c, d);
			bn_sqr(d, pub);
			if (s == 2) {
				bn_mul(d, d, pub);
			}
			bn_mod(c, c, d);
			/* Decrypt and check if result is (a + b) mod n^s. */
			assert(cp_ghpe_dec(c, c, pub, prv, s) == RLC_OK);
			bn_add(a, a, b);
			bn_copy(d, pub);
			if (s == 2) {
				bn_mul(d, d, pub);
			}
			bn_mod(a, a, d);
			assert(bn_cmp(a, c) == RLC_EQ);
		}
	}
	RLC_CATCH_ANY {
		RLC_ERROR(end);
	}
	code = RLC_OK;

  end:
	bn_free(a);
	bn_free(b);
	bn_free(c);
	bn_free(d);

	bn_free(prv);
	bn_free(pub);
	return code;
}

image-20221212221840691

标签:RELIC,bn,pub,学习,prv,new,null
From: https://www.cnblogs.com/pam-sh/p/16984866.html

相关文章

  • ECharts的学习(一):制作一个简单的柱状图
    https://blog.csdn.net/aiyishengyishi/article/details/53421365本文章作为学习ECharts练手之作,中文学习地址:http://echarts.baidu.com/index.html实现效果如下: <!DOC......
  • Canvas学习笔记(五)文本操作
    简介在Canvas中,文本操作的常用方法有:方法说明fillText()绘制实心文本strokeText()绘制空心文本measureText()获取文本长度在Canvas中,文本操作的常......
  • JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇
     前两篇文章分表讲述了后置处理器-正则表达式提取器概述及简单实例、多参数获取,相应博文敬请参阅 ​​简单实例​​、​​多参数获取​​。此文主要讲述如何引用正则表......
  • 【学习笔记】网络流学习笔记
    网络流学习笔记参考文章:网络流byAlex_Wei、网络流byrvalue、Dinic复杂度分析证明、网络流与二分图相关概念、学长留下的总结文档一些定义网络:一个有向图\(G=(V,......
  • Cypher学习《一》
    Cypher常用的语句如下:match:匹配图模式,这是从图中获取数据的常见方法()用括号表示节点-->和<--用一对横杠和大于号、小于号来表示联系......
  • 如何学习编程语言大揭秘(以C++为例)!!一
    在网上C++的教程多如牛毛,都有一个特点就是让读者扮演第三人称,如观看电影那样,效果最好的是让读者戴上3D眼镜可以有身临其境的感觉,但还是第三人称。第三人称教程的缺点有:很......
  • 芯科BG22学习笔记:如何添加定时器
    实验目的:BG22芯片添加定时器功能实验环境:SimplicityStudioV5实验器材:WirelessStarterKitMainboard(BRD4001ARevA01)+ EFR32xG222.4GHz6dBmQFN32RadioBo......
  • 百度文库-js学习文档
    JS实例学习笔记——w3cschool+菜鸟教程基础实例——w3cschoolwrite()document.write("thisisastring");//⽣成普通⽂本document.write("<br>"+Date());//html+函数......
  • WPF学习-UI布局
    (1)WPF布局原则:1.不用显示的方式设置元素的尺寸。2.不使用屏幕坐标来指定位置。(2)常用布局控件:Grid容器、StackPanel、DockPanel、WrapPanel、UniformGrid、Canvas、In......
  • 学期心得体会及寒假学习实践计划
    1、大数据技术学习-2门慕课220小时    自9月中旬-12月中旬开始学习大数据技术体系,主要是2门慕课,林子雨的《大数据技术原理与应用》,和《Spark编程基础》,其中《大数......