博主的科研方向是基于雙線性映射的公鑰密碼設計,主要包括基于身份和基于屬性的加密演算法、簽名演算法,在高校期間由于專案需要主力開發語言一直是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/opensslopenssldir:表示組態檔目錄(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等,沒有誰好誰壞之說,決定了就做下去吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438016.html
標籤:其他
