博主論文狗,很久沒有來貼博客,最近作實驗須要用到屬性加密,瞭解了下CP-ABE,前來記錄一下:php
網上相關的博文較多,博主看了大部分的,認爲下面這兩個看完了基本就能夠成功安裝。html
可參見博文:前端
http://blog.csdn.net/hlsdbd1990/article/details/48291359算法
http://blog.csdn.net/huifeideyema/article/details/51695231ubuntu
(一)相關概念ide
cp-abe須要用到許多算法庫,像M四、bison、flex、gmp、pbc,且cpabe依賴pbc,pbc依賴gmp,gmp依賴M四、bison、flex函數
M4 :是一個宏處理器.將輸入拷貝到輸出,同時將宏展開. 宏能夠是內嵌的也能夠是用戶定義的. 除了能夠展開宏,m4還有一些內建的函數,用來引用文件,執行Unix命令,整數運算,文本操做,循環等. m4既能夠做爲編譯器的前端也能夠單獨做爲一個宏處理器.M4 依賴於: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Perl, Sed等;工具
bison: Bison其實是使用最普遍的Yacc-like分析器生成器,使用它能夠生成解釋器,編譯器,協議實現等多種程序. flex
flex:是一個產生掃描器的工具;能識別文本模式的詞句的程序.flex讀入給定的文件,或沒有文件名給定時的標準輸入,即要產生的掃描器的說明.說明按照正規表達式和C代碼的格式,叫作規則.flex產生定義了例程'yylex()'的'lex.yy.c'C源碼文件,該文件被編譯和用'-lfl'標誌連接庫以產生可執行文件,當可執行文件被運行後,它分析以正規表達式出現的輸入.不管什麼時候它找到匹配,都將執行相應的C代碼.(bison flex實際上就是用於實現屬性加密中訪問控制策略)ui
gmp:GMP是一個任意精度的開源算術庫,可用於符號整數,有理數,浮點數計算。
pbc:基於對數運算的算法庫
(二)安裝
一、安裝m4
sudo apt-get install m4
二、安裝gmp
http://gmplib.org/ 下載gmplib
./configure
make
make check
sudo make install
三、安裝pbc
http://crypto.stanford.edu/pbc/download.html 下載pbc
解壓,安裝
./configure
出現
flex not found
執行
sudo apt-get install flex
安裝成功後繼續執行
./configure
出現
bison not found
運行
sudo apt-get install bison
成功後執行
./configure
make
sudo make install
四、安裝cpabe toolkit
http://hms.isi.jhu.edu/acsc/cpabe/ 或者 http://acsc.cs.utexas.edu/cpabe/ 下載cpabe-0.11和libbswabe-0.9
安裝openSSL
sudo apt-get install libssl-dev
進入libbswabe-0.9解壓目錄
/configure
報錯
checking for GLIB - version >= 2.0.0... no
*** Could not run GLIB test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means GLIB is incorrectly installed.
執行
sudo apt-get install libglib2.0-dev
安裝成功後,執行
./configure
make
sudo make install
進入cpabe-0.11解壓目錄
./configure
出錯
/usr/bin/ld: note: '__gmpz_init' is defined in DSO /usr/local/lib/libgmp.so so try adding it to the linker command line
/usr/local/lib/libgmp.so: could not read symbols: 無效的操做
改成另外一種方式編譯:
sudo apt-get install checkinstall
修改Makefile,LDFLAGS後加入-lgmp
sudo checkinstall
編譯成功~
(三)報錯
除了上述報錯外,執行checkinstall之後也有可能出現這種錯誤
gcc -o cpabe-setup setup.o common.o -O3 -Wall -lglib-2.0 -Wl,-rpath /usr/local/lib -lgmp -Wl,-rpath /usr/local/lib -lpbc -lbswabe -lcrypto -lcrypto /usr/bin/ld: /usr/local/lib/libpbc.so: undefined reference to symbol '__gmpz_init' /usr/local/lib/libgmp.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status Makefile:34: recipe for target 'cpabe-setup' failed make: *** [cpabe-setup] Error 1</pre></code
或者出現這種錯誤
policy_lang.y: In function ‘yyparse’:
policy_lang.y:67:38: error: expected ‘;’ before ‘}’ token
result: policy { final_policy = $1 }
***解決方法***
https://ubuntuforums.org/showthread.php?t=2254939
或者http://stackoverflow.com/questions/17373306/error-in-linking-gmp-while-compiling-cpabe-package-from-its-source-code
安裝成功之後出現以下界面
圖片摘自http://blog.csdn.net/guomutian911/article/details/42558155