【Charm-Crypto】开发环境保姆级搭建教程
博主的科研方向是基于双线性映射的公钥密码设计,主要包括基于身份和基于属性的加密算法、签名算法。在高校期间由于项目需要主力开发语言一直是java,所以算法仿真主要都是通过Java Pairing Based Cryptography库(JPBC)去实现的。最近一直在用Python做一些数据分析方面的工作,包括利用SciKit-Learn和Tensorflow去做机器学习以及深度学习算法的研发,于是充分感受到了Python简洁的语法和丰富的第三方库带来的爽快体验。考虑到后面可能会将两个领域进行一定程度的结合,所以希望将原先的密码学开发环境转移到Python生态下。
在GitHub上溜达一阵子后果然发现了一个叫Charm-Crypto的项目。它是一个基于Python语言的密码学设计框架,用于快速原型设计先进的密码系统。常用的基础密码库基本都有支持,包括对称加密、消息摘要、数字签名等。查看模块说明才发现,好家伙竟然有身份基密码系统和属性基密码系统的实现。除此之外,Charm-Crypto的底层是C语言开发的库,所以理论上各种算法的执行还是比较快的。
Charm-Crypto项目本身有些年头了,兼容的操作系统和依赖也大多是老版本。例如Charm-Crypto官网声明支持的Ubuntu版本最高只能到13.04。这里就手把手帮助各位在Ubuntu 18.04 上搭建一个基于Python3的Charm-Crypto开发环境。
一、安装基础依赖
1、通过以下两条指令检查系统是否安装了gcc
、make
、perl
gcc -v make -v perl -v
正常安装之后会显示两个工具的版本信息:
gcc
版本信息:
make
版本信息:
perl
版本信息:
如果没有的话,就通过以下指令安装:
sudo apt-get install gcc sudo apt-get install make sudo apt-get install perl
版本的话没有严格要求,尽量和我的保持一致。
2、安装依赖库m4
、flex
、bison
运行以下指令进行安装:
sudo apt-get update sudo apt-get install m4 flex bison
3、安装Python的依赖包python3-setuptools
、 python3-dev
、libssl-dev
运行以下指令进行安装:
sudo apt-get install python3-setuptools python3-dev libssl-dev
4、安装Python第三方包pyparsing
首先安装python3-pip
sudo apt-get install python3-pip
然后通过pip3
指令安装pyparsing
,这里最好指定一下版本。因为Charm-Crypto项目本身有些年头了,本身兼容的操作系统和依赖也都是老版本,而且考虑到项目需要最终我选择的是老版本2.4.6。
pip3 install pyparsing==2.4.6
二、编译安装OpenSSL1.0.0
Charm-Crypto官网上可以看到,该框架原先的编译安装依赖于OpenSSL 1.0.0环境。0.50版本的更新记录显示,目前已经修复了在OpenSSL 1.1.0环境下引起编译错误的问题。所以不管你的OpenSSL版本是1.0.0还是1.1.0,应该都是可以顺利完成编译安装的。我为了保险起见还是更换了OpenSSL版本,如果有出现编译不成功可以参考这里的步骤。
先查看Ubuntu 18.04自带的OpenSSL版本:
openssl version
发现Ubuntu自带的OpenSSL版本是1.1.1:
经过我的试验最终选择将版本更换为1.0.0s,这个版本保证可以在Ubuntu 18.04上面成功编译安装。
附上OpenSSL官网的下载链接。
下载完成后按照下面的步骤一步步进行:
1、将压缩包openssl-1.0.0s.tar.gz
解压至/usr/local/src/
目录
cd ~/Downloads/ sudo tar -zxvf openssl-1.0.0s.tar.gz -C /usr/local/src/
2、写入编译配置
cd /usr/local/src/openssl-1.0.0s/ sudo ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl
其中:
shared
:表示生成动态库,这个字段一定不要忘了,后面会对生成的动态库做进一步的操作。prefix
:表示安装路径,为了避免各种软件混杂在一起,我就为OpenSSL单独创建了路径/usr/local/openssl
openssldir
:表示配置文件目录(Ubuntu默认是/usr/lib/openssl
,若设置其他目录,执行openssl命令时会有警告)
配置写入成功的话会显示如下的信息:
4、编译
成功写入配置后,执行以下指令进行编译:
cd /usr/local/src/openssl-1.0.0s/ sudo make
指令执行完毕如果显示如下信息就表示编译成功:
5、安装
成功编译后,执行以下指令进行安装:
cd /usr/local/src/openssl-1.0.0s/ sudo make install
指令执行完毕如果显示如下信息就表示安装成功:
我们根据先前配置的安装路径,就能看到OpenSSL已经顺利安装好了:
接下来要做的就是用安装好的OpenSSL 1.0.0s去替换自带的OpenSSL 1.1.1。
6、创建软链接
执行以下指令,通过软链接将OpenSSL 1.0.0s的命令和库文件链接到系统:
sudo mv /usr/bin/openssl /usr/bin/openssl.bak sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl sudo ln -s /usr/local/openssl/include/openssl /usr/include/openssl
7、动态库相关配置:
- 配置动态库软链接:
sudo ln -s /usr/local/openssl/lib/libssl.so.1.0.0 /usr/lib/libssl.so sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so
- 刷新动态库配置
/etc/ld.so.conf
sudo gedit /etc/ld.so.conf
在配置末尾增加一行,写入include /usr/local/openssl/lib
然后保存退出。
8、测试
openssl version
如果安装成功,执行以上命令后会显示此时OpenSSL的版本号已经变为1.0.0s:
这里再次重申几点:
- 版本最好保持在1.0.0s,经过我的测试这个版本是可以在Ubuntu 18.04上正常编译安装的。
- 不要卸载原来的OpenSSL,卸载OpenSSL是很危险的(会破换掉很多软件的依赖,导致其他软件无法运行),这里仅仅是做了版本切换。
- 因为OpenSSL版本切换后会导致所有HTTPS的请求失败,例如apt的软件源地址原来都是HTTPS协议的,现在有可能导致无法执行软件源更新的操作。处理办法是将所有HTTPS请求修改为HTTP请求。不过为了不影响其他软件和开发环境,我建议是用单独的虚拟机或者docker容器搭建本套环境。
三、编译安装GMP
GMP是一个提供高精度算术的开源软件库,支持对有符号整数、有理数和浮点数进行运算。目前GMP官网提供的版本是6.2.1,我在下载链接中找到了历史版本的索引仓库,最终选择的版本是5.1.3:
1、下载好之后先解压到/usr/local/src
路径下
cd ~/Downloads sudo tar -jxvf gmp_5.1.3.tar.bz2 -C /usr/local/src
2、写入配置
cd /usr/local/src/gmp-5.1.3 sudo ./configure
这里不需要更改任何配置,基本不会什么问题。写入后会显示如下信息:
3、编译
执行下面的指令进行编译:
cd /usr/local/src/gmp-5.1.3 sudo make
编译一会儿就能结束,会显示如下信息:
4、安装
执行下面的指令:
cd /usr/local/src/gmp-5.1.3 sudo make install
安装成功后会显示如下信息:
四、编译安装PBC
PBC全称是Pairing-Based Cryptography library,是一个基于GMP构造的C语言库。PBC支持创建各类离线椭圆曲线并建立例如双线性配对和多线性配对运算。我在官网下载的是最新版本0.5.14:
1、下载好之后解压到/usr/local/src
路径下
cd ./Downloads sudo tar -zxvf pbc-0.5.14.tar.gz -C /usr/local/src/
2、写入配置
这里也不需要修改配置,直接执行以下命令即可:
cd /usr/local/src/pbc-0.5.14/ sudo ./configure
写入成功后显示如下信息:
3、编译
执行以下指令进行编译:
cd /usr/local/src/pbc-0.5.14/ sudo make
编译成功会显示如下信息:
4、安装
cd /usr/local/src/pbc-0.5.14/ sudo make install
安装成功后可以在终端里找到这样的显示信息:
五、编译安装Charm-Crypto
经过以上的部署工作,终于可以面对Charm-Crypto本尊了。在Charm-Crypto官网上看到的安装教程只能支持到Ubuntu13.04。
经过尝试我最终还是放弃了,Ubuntu官方早就不维护13.04版本了,非官方的软件源更是几乎没有。网上也有博客介绍了和官网类似的方法在16.04,18.04上面成功安装,可惜我还是失败了。好在最后我利用GitHub上0.50版本的dev源码还是成功安装了。
1、下载并解压到/usr/local/src
路径下
在GitHub可以看到这2点信息,一个是目前dev版本通过build测试,理论上应该没有大问题,而dev-2.7版本build失败。
所以大伙下载源码的时候注意一下版本:
另一个是目前dev版本只支持Python3:
正好我的代码主要都是基于Python3编写,自然基于以上几点我就直接选择dev版本了。
下载后还是解压到/usr/local/src
路径下:
cd ~/Downloads sudo mv ./charm-dev.zip /usr/local/src/ cd /usr/local/src/ sudo unzip ./charm-dev.zip
2、写入编译配置
直接执行以下命令写入编译配置,不需要任何修改:
cd /usr/local/src/charm-dev/ sudo ./configure.sh
写入成功后会显示如下信息:
3、编译
成功写入编译配置后,执行以下命令进行编译:
cd /usr/local/src/charm-dev/ sudo make
这一步应该没什么问题,编译完成后会显示如下信息:
4、安装
执行以下命令进行最后的安装:
cd /usr/local/src/charm-dev/ sudo make install
顺利安装完应该可以看到以下信息:
六、启动Python验证安装
进行到这里,部署工作就基本大功告成了。下面验证一下安装成果,在终端启动Python3:
python3
启动后尝试import:
import charm
如果没有报错,那么恭喜你正式大功告成,可以开始愉(jian)快(nan)地开发啦。
七、总结
Charm-Crypto项目已经有一些年头,不过密码学到底还是一个门槛比较高的方向,导致这个项目的进度一直比较慢。随着个人信息安全意识的提升以及全行业数据隐私保护制度的规范,在今后的数据分析行业里一定会更加注重数据挖掘与数据保护的平衡。这种平衡如何实现其实各家有各家的说法,具体来说我为了数据分析妥协了密码设计,选择将开发整体迁移到Python生态当中。当然也有大牛选择在Java生态下进行机器学习的开发,例如采用DeepLearning4j等。没有谁好谁坏之说,决定了就做下去吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律