JPBC库应用之身份基加密IBE
身份基加密 (Identity based Encryption)算法
视频地址 https://www.bilibili.com/video/BV1Rq4y117Zw?share_source=copy_web
代码地址 https://github.com/hjlpb/IBE.git
Setup
- 生成pairing相关公共参数 <e,G1,GT,Zr><e,G_1, G_T,Z_r><e,G1,GT,Zr>
- 选取随机数x∈Zrx\in Z_rx∈Zr 作为系统主密钥mskmskmsk
- 选取随机元素g∈G1g\in G_1g∈G1作为生成元,计算公共参数gxg^xgx。因此,有系统公钥pk=<g,gx>pk=<g,g^x>pk=<g,gx>
- 选取公共哈希函数 H1:{0,1}∗→G1∗H_1:\{0,1\}^*\rightarrow G_1^*H1:{0,1}∗→G1∗,H2:GT→{0,1}nH_2:G_T \rightarrow \{0,1\}^nH2:GT→{0,1}n
KeyGen
- 给定用户身份 ID∈{0,1}∗ID\in \{0,1\}^*ID∈{0,1}∗,将其映射为群G1G_1G1上的元素。即计算 QID=H1(ID)Q_{ID}=H_1(ID)QID=H1(ID)
- 由系统主密钥xxx计算此IDIDID对应的私钥为sk=QIDxsk=Q_{ID}^xsk=QIDx
Encrypt
- 针对目标用户身份ID∈{0,1}∗ID\in \{0,1\}^*ID∈{0,1}∗,计算 QID=H1(ID)Q_{ID}=H_1(ID)QID=H1(ID)
- 选取随机数r∈Zrr\in Z_rr∈Zr,计算密文组件C1=grC_1=g^rC1=gr
- 计算gID=e(QID,gx)rg_{ID}=e(Q_{ID},g^x)^rgID=e(QID,gx)r
- 计算密文组件C2=M⊕H2(gID)C_2=M \oplus H_2(g_{ID})C2=M⊕H2(gID),其中M∈{0,1}nM \in \{0,1\}^nM∈{0,1}n是明文数据
- 最终的密文为<C1,C2><C_1,C_2><C1,C2>
Decrypt
- 解密的关键在于恢复gIDg_{ID}gID
- e(sk,C1)=e(QIDx,gr)=e(QID,g)xr=gIDe(sk,C_1)=e(Q_{ID}^x,g^r)=e(Q_{ID},g)^{xr}=g_{ID}e(sk,C1)=e(QIDx,gr)=e(QID,g)xr=gID
- 恢复明文 M=C2⊕H2(e(sk,C1))M=C_2 \oplus H_2(e(sk,C_1))M=C2⊕H2(e(sk,C1))
代码实现注意事项
1.选择用Properties保存是因为支持键值读取,比如密文可能包含多个组件,方便分别读取每个组件。
2.方法SetProperties的第二个参数必须为String类型,因此需要先将要保存的元素转换为String类型后存储。
//写入文件
Properties pkProp = new Properties();
//pkProp.setProperty("g", new String(g.toBytes())); //可以用这种方式将g转换为字符串后写入,但文件中会显示乱码
//为了避免乱码问题,统一采用Base64编码为可读字符串形式
pkProp.setProperty("g", Base64.getEncoder().encodeToString(g.toBytes()));
pkProp.setProperty("gx", Base64.getEncoder().encodeToString(gx.toBytes()));
storePropToFile(pkProp, pkFileName); //从文件读取
Properties pkProp = loadPropFromFile(pkFileName);
String gString = pkProp.getProperty("g");
Element g = bp.getG1().newElementFromBytes(Base64.getDecoder().decode(gString)).getImmutable();
String gxString = pkProp.getProperty("gx");
Element gx = bp.getG1().newElementFromBytes(Base64.getDecoder().decode(gxString)).getImmutable();
3.bp.getG1().newElementFromBytes()
和bp.getG1().newElementFromHash()
用法。前者一般用于将一个恢复一个通过bytes到处的元素,比如上图的代码中用于恢复g
和gx
。后者用于从一个hash得到的字节数组中构造一个新元素,如下代码中用于将ID映射为群元素。
byte[] idHash = sha1(id);
Element QID = bp.getG1().newElementFromHash(idHash, 0, idHash.length).getImmutable();
4.算法实现过程中,遵从原文,密文组件的计算采用了异或方式,即C2=M⊕H2(gID)C_2=M \oplus H_2(g_{ID})C2=M⊕H2(gID)。在后面的ABE方案中,一般都是直接计算C2=M⋅gIDC_2=M \cdot g_{ID}C2=M⋅gID,这样仿真起来会更简单一些。
JPBC库应用之身份基加密IBE相关推荐
- 身份基加密(IBE)
文章目录 背景及意义 一.身份基加密详细过程 二.双线性映射 总结 背景及意义 身份基加密(Identity-Based Encrypted,IBE)最早提出是在1984年,想要实现一个公钥机密方案, ...
- JPBC库实现基于身份的签名体制
JPBC库实现基于身份的签名体制---Hess体制 Hess算法: 代码: Hess类: import it.unisa.dia.gas.jpbc.Element; import it.unisa.d ...
- 属性基加密——模糊身份基加密(FIBE)
目录 引言 模糊身份基加密 相关补充 引言 在身份基加密被提出以后,又出现了模糊身份基加密(FIBE),也可以说是属性基加密雏形.在FIBE中,将身份看作是一组描述性属性.它允许具有身份的用户去解密用 ...
- 身份基加密方案的安全性证明
在上一篇博客中,介绍了Boneh-Franklin的基于身份的加密方案,准确地说,是介绍了Boneh-Franklin论文[1]中最基础的方案--BasicIdent.在这篇博客中,主要论述Basic ...
- JPBC库(基于配对的密码学)入门和避坑指南
视频地址:https://www.bilibili.com/video/BV1o5411Y77r/ 1. JPBC简介 Java Pairing-Based Cryptography Library ...
- 基于身份的加密(IBE)——使用PBC库实现 Identity Based Encryption(IBE) - Pairings Based Crypto (PBC) library
基于身份的加密(IBE)--使用PBC库实现 Identity Based Encryption(IBE) - Pairings Based Crypto (PBC) library 前言: 近期在学 ...
- 【属性基加密】Ubuntu下CP-ABE库安装及调用教程详解
目录 一.前言 二.CP-ABE 1.啥是CP-ABE 2.CP-ABE流程 三.CP-ABE库安装 1.下载 2.安装依赖项 3.gmp安装 4.pbc安装 5.libbswabe安装 6.cpab ...
- ibe加密原理_解析基于身份加密IBE
基于身份加密(IBE)是一种公共密钥加密方法,在这种加密方法中第三方服务器使用简单的识别符:邮件地址.社会保险号等来生成用于加密和解密电子信息的公共密钥.与传统的公共密钥加密方法相比较,这种加密方法为 ...
- 属性基加密仿真及代码实现(CP-ABE)论文:Ciphertext-Policy Attribute-Based Encryption
1.仿真论文:Ciphertext-Policy Attribute-Based Encryption 2.使用库:JPBC + lombok 3.目录结构: 3.1 essay:论文 3.2 lib ...
最新文章
- Serializable Clonable
- https://www.threatminer.org/domain.php?q=blackschickens.xyz ——域名的信誉查询站点 还可以查IP...
- 为什么 K8s 在阿里能成功?| 问底中国 IT 技术演进
- boost::callable_traits下qualified_class_of的测试程序
- S3C2440 SPI驱动框架
- idea 格式化代码 快捷键
- 数字信号处理-01- 数字信号处理基础知识
- 【转】中专生的C++之路!
- Emacs-057-hippie-expand使用
- python pcm 静音_使用静音检测分割音频文件
- 点餐微信小程序【源码好又多】
- python网球比赛模拟主持稿_模拟课堂比赛主持人稿
- ESP32/ESP8266
- android swf 播放器代码,Android Flash swf播放器源码(2019)
- 设计模式 -- 工厂
- 定位教程3---固定相机,先拍后抓
- idea 参数显示s: o:
- [unity3D]什么是预制体(Prefab)?如何制作预制体?如何导出预制体?预制体变体是什么?
- 电脑表格日期怎么修改原有日期_表格里日期格式怎么改
- joycon无法连接主机_Joy-Con与主机配对方法