最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【时快讯】RELIC库学习

来源:博客园

《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.gitcd relicmkdir buildcd buildcmake ..make

测试

测试:demo/psi-client-server

  • Added several laconic Private Set Intersection (PSI) protocols from https://eprint.iacr.org/2022/529
# 修改makefile文件
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);  //密文cassert(cp_ghpe_dec(b, c, pub, prv, s) == RLC_OK); //解密测试bassert(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));  //明文abn_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);//密文cassert(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;}

关键词: 椭圆曲线 双线性映射 广泛应用