CP-ABEの暗号強度変更方法

 

PBC Library

url: https://crypto.stanford.edu/pbc/

PBCライブラリはCP-ABEで使用するペアリングベースの暗号を提供し、暗号強度もここで変更されます。
暗号強度に関するパラメータは

pbc-0.5.14/param
に格納されています。
RSA暗号基準の暗号強度の比較は以下のURLに記載されていますので参考にしてください。
http://www.cipher.risk.tsukuba.ac.jp/tepla/benchmark.html

CP-ABEの構成

cpabe toolkit

高レベルの機能とインタフェースを提供します。
具体的には

  • cpabe-setup
  • cpabe-keygen
  • cpabe-enc
  • cpabe-dec

のような機能です。

libbswabe

実際に暗号化と復号を行います。
暗号強度を決定するパラメータはここで変更します。
パラメータは同様にpbc-0.5.14/paramのものを使用します。

暗号強度の変更方法

今回はlibbswabeのデフォルトであるRSA暗号の1024bit相当の暗号強度から2048bit相当に変更します。

暗号強度を変更するにはCP-ABEのlibbswabe中のソースコードを変更し再度make, make installする必要があります。

libbswabe-0.9/core.c


の15行目あたりに

 

15 #define TYPE_A_PARAMS \
16 "type a\n" \
17 "q 87807107996633125224377819847540498158068831994142082" \
18 "1102865339926647563088022295707862517942266222142315585" \
19 "8769582317459277713367317481324925129998224791\n" \
20 "h 12016012264891146079388821366740534204802954401251311" \
21 "822919615131047207289359704531102844802183906537786776\n" \
22 "r 730750818665451621361119245571504901405976559617\n" \
23 "exp2 159\n" \
24 "exp1 107\n" \
25 "sign1 1\n" \
26 "sign0 1\n"


があります。このTYPE_A_PARAMSはpbc-0.5.14/param/a.paramの

type a
q 8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791
h 12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776
r 730750818665451621361119245571504901405976559617
exp2 159
exp1 107
sign1 1
sign0 1

と同じです。
a.paramはRSA暗号の1024bit相当の暗号強度なので、2048bit相当であるpbc-0.5.14/param/a1.paramを設定します。
TYPE_A_PARAMと同様にTYPE_A1_PARAMを記述します。

#define TYPE_A1_PARAMS \
"type a1\n" \
"p 48512875896303752499712277254589628516419352188294521198189567511009073158115045361294839347099315898960045398524682007334164928531594799149100548036445760110913157420655690361891290858441360807158247259460501343449199712532828063940008683740048500980441989713739689655610578458388126934242630557397618776539259\n" \
"n 36203638728584889925158415861634051131656232976339194924022065306723188923966451762160327870969638730567198058600508960697138006366861790409776528385407283664860565239295291314844246909284597617282274074224254733917313218308080644731349763985110821627195514711746037056425804819692632040479575042834043863089\n" \
"l 1340\n"


それから、libbswabeのcore.c中のvoid型bswabe_setup()関数内の

(*pub)->pairing_desc = strdup(TYPE_A_PARAMS);

(*pub)->pairing_desc = strdup(TYPE_A1_PARAMS);

に変更します。

$ ./configure
$ make
$ make install
$ make clean

 

で完了です。

応用情報技術者試験(平成28年秋季)を受けてきました

 情報系の大学生最後の年になっても資格欄にかけるものが1つもないのは寂しいと思い受けてきました。

 

応用情報技術者試験とは?

IPAによると

高度IT人材となるために必要な応用的知識・技能をもち、高度IT人材としての方向性を確立した者

を対象にしているらしいです。よくわからないけどSE養成のための試験かな?

 試験範囲は以下のリンクのシラバスを見ればわかります。

IPA 独立行政法人 情報処理推進機構:試験要綱・シラバス など

見るとわかりますが、案外広いです。

試験対策

 1週間前まで勉強をしていなかったので過去問をひたすら解くことに専念しました。目安としては4回分くらいです。1回解き終わる度に解説を流し読みします。

 苦手な分野は参考書やサイトを活用して適当に学習します。どうしても苦手な分野は勉強しなくていいです。私の場合はテクノロジのデータベースに関して触れていません。

 

典型的な勉強方法ですね。

 

試験の結果

午前:70%(自己採点)

午後:公式発表までお楽しみ

 

試験の感想

 午前試験では「クラウドソーシング」「死の谷」「ビジネスインテリジェンス」「ファジング」等の目新しい問題が出題されました。クラウドソーシングについてはどこかの記事で目にしたことがあったので自信をもって答えることができましたが、他は単語から推測する必要がありました。全体的にテクノロジの前半が足を引っ張った感じでした。

 午後試験の冊子を開いた瞬間「魔法陣」という単語が飛び込んできてワクワクしましたが、プログラムを理解するのに時間がかかる自信があったのでマネジメントやネットワーク系の問題に取り組みました。午後試験の対策は一切していなかったのですが、国語力があれば対策していなくても午前の知識さえあれば問題ないのではないでしょうか。

 基本情報技術者試験も受験したことないような人間が応用情報技術者試験に挑戦してみましたが、大学の授業で習ってきたことをある程度理解していればなんとなくいけそうな気がします。実質3~4日で対策ができるので、比較的暇な学生の間に受験することをお勧めします。

暗号文ポリシー属性ベース暗号(CP-ABE)のライブラリ

属性ベース暗号のライブラリを使う機会があったのでまとめます。

 

何も開発環境を整えてないのでまずは、

$ sudo yum groupinstall "Development tools" -y

 

リンク先の以下のものをwgetなりでダウンロードし、解凍します。

 

PBC Libraryが必要らしいので以下からダウンロードして解凍します。バージョンは0.5.4以上がいいでしょう。

 

pbcディレクトリに入り、

$  ./configure

...

checking for pow in -lm... yes
checking for __gmpz_init in -lgmp... no
************************
gmp library not found
add its path to LDFLAGS
see ./configure --help
************************

gmpが無いと怒られました。pbcは一度中断しましょう。

 

ここからダウンロード・解凍しましょう。

gmpのディレクトリに入り、

$ ./configure

...

configure: summary of build options:

Version: GNU MP 6.1.1
Host type: core2-pc-linux-gnu
ABI: 64
Install prefix: /usr/local
Compiler: gcc -std=gnu99
Static libraries: yes
Shared libraries: yes

$ make

$ sudo make install

$ make clean

gmp入りました。

 

では一度中断していたpbcディレクトに入り、

$ ./configure

 ...

global build variables
-----------------------------------------
Mon Sep 5 15:28:18 JST 2016
host info: x86_64-unknown-linux-gnu
optimized build: no
compiler (CC): gcc
LDFLAGS:
CPPFLAGS:
CFLAGS: -Wall -W -Wfloat-equal -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wredundant-decls -Wendif-labels -Wshadow -pipe -ffast-math -U__STRICT_ANSI__ -std=gnu99 -fomit-frame-pointer -O3
LEX: flex
AM_LFLAGS:
LFLAGS:
YACC: bison -y
AM_YFLAGS:
YFLAGS:
-----------------------------------------

環境によってはbisonとflexが無くて怒られる可能性があるので適宜導入してください。

$ make

$ sudo make install

$ make clean

これでpbcは入りました。

 

libbswabeを入れます。

$ ./configure 

...

checking for SHA1 in -lcrypto... no
configure: error: please install the OpenSSL crypto library, libcrypto.

怒られました。openssl-develを入れます。再チャレンジ。

$ sudo yum install openssl-devel -y

$ ./configure

checking for SHA1 in -lcrypto... yes
checking for strdup... yes
checking for pkg-config... /usr/bin/pkg-config
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.
checking for GMP version >= 4.0.0 or later... found
checking for the PBC library... found
configure: creating ./config.status
config.status: creating Makefile

また怒られました。GLIBが見つからないと言われました。入れましょう。

sudo yum install glib2-devel -y

$ ./configure

...

checking for GLIB - version >= 2.0.0... yes (version 2.42.2)
checking for GMP version >= 4.0.0 or later... found
checking for the PBC library... found
configure: creating ./config.status
config.status: creating Makefile

$ make

$ sudo make install

$ make clean

 

 やっとCP-ABE本体です。cpabeのディレクトリに入りましょう。

$ ./configure

 ...

checking for GLIB - version >= 2.0.0... yes (version 2.42.2)
checking for GMP version >= 4.0.0 or later... found
checking for the PBC library... found
checking for libbswabe... found
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting

$ make

$ sudo make install

$ make clean

これで導入完了です。

 

 試しにcpabe-enc等のコマンドを叩くとhelpが出るはずです。

構造体のアライメント

こんな構造体を作ってパケットを受信するときに困ったことが起きた。

struct rcv_format{

    uint16_t mtype;

    uint16_t mlen;

    uint16_t seq;

    uint8_t ipv;

    uint8_t subpre;

    unsigned char addr[16];

    float rtt;

    float jitter;

    float ploss;

    uint64_t date;

};

  指定したアドレスから指定の長さのアドレスをのぞいてみるデバッグ用の関数を用いてこの構造体を見てみると、なぜかfloat plossとuint64_t dateの間に無駄なパディングがあった。このため、uint64_t dateの部分を受け取り損ねていた。詳しいことはよく理解できていないが、パディングはある方が良いらしい。乱用は禁物とのこと。

 とはいえ今回はパディングがあっては困るので以下のようにするとパディングが消えた。

struct rcv_format{

    uint16_t mtype;

    uint16_t mlen;

    uint16_t seq;

    uint8_t ipv;

    uint8_t subpre;

    unsigned char addr[16];

    float rtt;

    float jitter;

    float ploss;

    uint64_t date;

}__attribute__((packed));