【Charm-Crypto】开发环境保姆级搭建教程

人工智能68

博主的科研方向是基于双线性映射的公钥密码设计,主要包括基于身份和基于属性的加密算法、签名算法。在高校期间由于项目需要主力开发语言一直是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、通过以下两条指令检查系统是否安装了 gccmakeperl

gcc -v
make -v
perl -v

正常安装后,显示两个工具的版本信息:

[En]

After normal installation, the version information of the two tools is displayed:

gcc版本信息:
【Charm-Crypto】开发环境保姆级搭建教程

make版本信息:
【Charm-Crypto】开发环境保姆级搭建教程

perl版本信息:
【Charm-Crypto】开发环境保姆级搭建教程

如果没有,请按照以下说明进行安装:

[En]

If not, install it with the following instructions:

sudo apt-get install gcc
sudo apt-get install make
sudo apt-get install perl

这个版本没有严格的要求,所以尽量让它和我的保持一致。

[En]

There are no strict requirements for the version, so try to keep it consistent with mine.

2、安装依赖库 m4flexbison

运行以下说明进行安装:

[En]

Run the following instructions to install:

sudo apt-get update
sudo apt-get install m4 flex bison

3、安装Python的依赖包 python3-setuptoolspython3-devlibssl-dev

运行以下说明进行安装:

[En]

Run the following instructions to install:

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:
【Charm-Crypto】开发环境保姆级搭建教程

经过我的试验最终选择将版本更换为1.0.0s,这个版本保证可以在Ubuntu 18.04上面成功编译安装。

附上OpenSSL官网的下载链接

下载完成后,请逐步执行以下步骤:

[En]

After the download is complete, follow these steps step by step:

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命令时会有警告)

如果配置写入成功,则会显示以下信息:

[En]

If the configuration is successfully written, the following information is displayed:

【Charm-Crypto】开发环境保姆级搭建教程

4、编译

成功写入配置后,执行以下指令进行编译:

[En]

After successfully writing to the configuration, execute the following instructions to compile:

cd /usr/local/src/openssl-1.0.0s/
sudo make

指令执行完毕后,如果显示如下消息,则编译成功:

[En]

After the instruction has been executed, if the following message is displayed, the compilation is successful:

【Charm-Crypto】开发环境保姆级搭建教程

5、安装

编译成功后,执行以下说明进行安装:

[En]

After successful compilation, execute the following instructions to install:

cd /usr/local/src/openssl-1.0.0s/
sudo make install

执行指令后,如果显示以下消息,则安装成功:

[En]

After the instruction has been executed, if the following message is displayed, the installation is successful:

【Charm-Crypto】开发环境保姆级搭建教程

我们根据先前配置的安装路径,就能看到OpenSSL已经顺利安装好了:
【Charm-Crypto】开发环境保姆级搭建教程

接下来要做的就是用安装好的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:
【Charm-Crypto】开发环境保姆级搭建教程

这里再次重申几点:

  • 版本最好保持在1.0.0s,经过我的测试这个版本是可以在Ubuntu 18.04上正常编译安装的。
  • 不要卸载原来的OpenSSL,卸载OpenSSL是很危险的(会破换掉很多软件的依赖,导致其他软件无法运行),这里仅仅是做了版本切换。
  • 因为OpenSSL版本切换后会导致所有HTTPS的请求失败,例如apt的软件源地址原来都是HTTPS协议的,现在有可能导致无法执行软件源更新的操作。处理办法是将所有HTTPS请求修改为HTTP请求。不过为了不影响其他软件和开发环境,我建议是用单独的虚拟机或者docker容器搭建本套环境。

三、编译安装GMP

GMP是一个提供高精度算术的开源软件库,支持对有符号整数、有理数和浮点数进行运算。目前GMP官网提供的版本是6.2.1,我在下载链接中找到了历史版本的索引仓库,最终选择的版本是5.1.3:
【Charm-Crypto】开发环境保姆级搭建教程

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

这里不需要更改任何配置,也不会有任何问题。写入后,将显示以下信息:

[En]

There is no need to change any configuration here, and there will be no problem. After writing, the following information is displayed:

【Charm-Crypto】开发环境保姆级搭建教程

3、编译

执行以下指令进行编译:

[En]

Execute the following instructions to compile:

cd /usr/local/src/gmp-5.1.3
sudo make

编译将在片刻内完成,并显示以下消息:

[En]

The compilation will finish in a moment, with the following message displayed:

【Charm-Crypto】开发环境保姆级搭建教程

4、安装

执行下面的指令:

cd /usr/local/src/gmp-5.1.3
sudo make install

成功安装后,将显示以下信息:

[En]

After a successful installation, the following information is displayed:

【Charm-Crypto】开发环境保姆级搭建教程

四、编译安装PBC

PBC全称是Pairing-Based Cryptography library,是一个基于GMP构造的C语言库。PBC支持创建各类离线椭圆曲线并建立例如双线性配对和多线性配对运算。我在官网下载的是最新版本0.5.14:
【Charm-Crypto】开发环境保姆级搭建教程

1、下载好之后解压到 /usr/local/src 路径下

cd ./Downloads
sudo tar -zxvf pbc-0.5.14.tar.gz -C /usr/local/src/

2、写入配置

这里不需要修改配置,只需执行以下命令:

[En]

There is no need to modify the configuration here, just execute the following command:

cd /usr/local/src/pbc-0.5.14/
sudo ./configure

成功写入后将显示以下信息:

[En]

The following information is displayed after a successful write:

【Charm-Crypto】开发环境保姆级搭建教程

3、编译

执行以下指令进行编译:

[En]

Execute the following instructions to compile:

cd /usr/local/src/pbc-0.5.14/
sudo make

成功编译后会显示以下信息:

[En]

A successful compilation displays the following information:

【Charm-Crypto】开发环境保姆级搭建教程

4、安装

cd /usr/local/src/pbc-0.5.14/
sudo make install

安装成功后,您可以在终端中找到以下显示信息:

[En]

After successful installation, you can find the following display information in the terminal:

【Charm-Crypto】开发环境保姆级搭建教程

五、编译安装Charm-Crypto

经过以上的部署工作,终于可以面对Charm-Crypto本尊了。在Charm-Crypto官网上看到的安装教程只能支持到Ubuntu13.04。
【Charm-Crypto】开发环境保姆级搭建教程

经过尝试我最终还是放弃了,Ubuntu官方早就不维护13.04版本了,非官方的软件源更是几乎没有。网上也有博客介绍了和官网类似的方法在16.04,18.04上面成功安装,可惜我还是失败了。好在最后我利用GitHub上0.50版本的dev源码还是成功安装了。

1、下载并解压到 /usr/local/src 路径下

在GitHub可以看到这2点信息,一个是目前dev版本通过build测试,理论上应该没有大问题,而dev-2.7版本build失败。
【Charm-Crypto】开发环境保姆级搭建教程

所以当你下载源代码时,请注意版本:

[En]

So when you download the source code, pay attention to the version:

【Charm-Crypto】开发环境保姆级搭建教程

另一个是目前dev版本只支持Python3:
【Charm-Crypto】开发环境保姆级搭建教程

正好我的代码主要都是基于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、写入编译配置

直接执行以下命令,无需任何修改即可写入编译后的配置:

[En]

Execute the following command directly to write to the compiled configuration without any modification:

cd /usr/local/src/charm-dev/
sudo ./configure.sh

写入成功后,将显示以下信息:

[En]

After a successful write, the following information is displayed:

【Charm-Crypto】开发环境保姆级搭建教程

3、编译

成功写入编译配置后,执行以下命令进行编译:

[En]

After successfully writing to the compilation configuration, execute the following command to compile:

cd /usr/local/src/charm-dev/
sudo make

这一步应该没有问题,编译完成后会显示如下消息:

[En]

There should be no problem with this step, and the following message will be displayed when the compilation is complete:

【Charm-Crypto】开发环境保姆级搭建教程

4、安装

执行以下命令进行最终安装:

[En]

Execute the following command for the final installation:

cd /usr/local/src/charm-dev/
sudo make install

成功安装后,您应该会看到以下信息:

[En]

After successfully installing, you should see the following information:

【Charm-Crypto】开发环境保姆级搭建教程

六、启动Python验证安装

进行到这里,部署工作就基本大功告成了。下面验证一下安装成果,在终端启动Python3:

python3

启动后尝试import:

import charm

如果没有报错,那么恭喜你正式大功告成,可以开始愉(jian)快(nan)地开发啦。
【Charm-Crypto】开发环境保姆级搭建教程

七、总结

Charm-Crypto项目已经有一些年头,不过密码学到底还是一个门槛比较高的方向,导致这个项目的进度一直比较慢。随着个人信息安全意识的提升以及全行业数据隐私保护制度的规范,在今后的数据分析行业里一定会更加注重数据挖掘与数据保护的平衡。这种平衡如何实现其实各家有各家的说法,具体来说我为了数据分析妥协了密码设计,选择将开发整体迁移到Python生态当中。当然也有大牛选择在Java生态下进行机器学习的开发,例如采用DeepLearning4j等。没有谁好谁坏之说,决定了就做下去吧。

Original: https://www.cnblogs.com/letsplayball/p/15969695.html
Author: 拍呀拍皮球
Title: 【Charm-Crypto】开发环境保姆级搭建教程



相关阅读

Title: Python2.7 CentOS7 处理报错 ImportError: No module named psycopg2

运行出错:ImportError: No module named psycopg2
import psycopg2
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named psycopg2

安装出错:

[root@localhost pyscript]# pip install psycopg2
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.

Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/
Collecting psycopg2
Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/fd/ae/98cb7a0cbb1d748ee547b058b14604bd0e9bf285a8e0cc5d148f8a8a952e/psycopg2-2.8.6.tar.gz (383 kB)
|████████████████████████████████| 383 kB 15.5 MB/s
ERROR: Command errored out with exit status 1:
command: /usr/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-zXoKIr/psycopg2/setup.py'"'"'; file='"'"'/tmp/pip-install-zXoKIr/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-1DZX3c
cwd: /tmp/pip-install-zXoKIr/psycopg2/
Complete output (25 lines):
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'project_urls'
warnings.warn(msg)
running egg_info
creating /tmp/pip-pip-egg-info-1DZX3c/psycopg2.egg-info
writing /tmp/pip-pip-egg-info-1DZX3c/psycopg2.egg-info/PKG-INFO
writing top-level names to /tmp/pip-pip-egg-info-1DZX3c/psycopg2.egg-info/top_level.txt
writing dependency_links to /tmp/pip-pip-egg-info-1DZX3c/psycopg2.egg-info/dependency_links.txt
writing manifest file '/tmp/pip-pip-egg-info-1DZX3c/psycopg2.egg-info/SOURCES.txt'

Error: pg_config executable not found.

pg_config is required to build psycopg2 from source. Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
option:

python setup.py build_ext --pg-config /path/to/pg_config build ...

or with the pg_config option in 'setup.cfg'.

If you prefer to avoid building psycopg2 from source, please install the PyPI
'psycopg2-binary' package instead.

..........................................

ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output


$ wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
$ tar xf Python-2.7.6.tar.xz
$ cd Python-2.7.6
$ ./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
$ make && make altinstall
$ yum install postgresql-libs

$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py

$ python2.7 ez_setup.py

$ easy_install-2.7 psycopg2

安装 ez_setup.py setuptools


可以先打开setuptools的python官网看看setuptools软件包如何安装:

> wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py > python ez_setup.py --user

也可以下载setuptools软件包后安装:
(1)下载setuptools包

(2)解压setuptools包

(3)切换到当前文件夹

(4)编译setuptools

(5)开始执行setuptools安装


[root@localhost pyscript]
Python 2.7.5 (default, Jun 20 2019, 20:27:34)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import psycopg2
Traceback (most recent call last):
  File "", line 1, in <module>
ImportError: No module named psycopg2

解决步骤 1、

sudo  pip install psycopg2

解决步骤 2、

sudo  pip install psycopg2-binary

完成。

Original: https://blog.csdn.net/sunny_day_day/article/details/122194845
Author: ac.char
Title: Python2.7 CentOS7 处理报错 ImportError: No module named psycopg2