ペアリング暗号ライブラリmclを使ってみる
初めに
インターネット上で安全な通信をするために、秘密鍵暗号や公開鍵暗号が使われています。最近では公開鍵暗号の一つとして楕円曲線暗号が使われることも多くなりました。
ここではそういった通常の公開鍵暗号ではなく、より機能が豊富なペアリング暗号を扱います。身近にペアリング暗号が使われているケースはまだあまりないのですが、いろいろ面白いことが実現できます。最近では完全匿名性を実現したと言われる分散型暗号通貨Zcashで使われています。
ペアリング暗号の詳細は拙著『クラウドを支えるこれからの暗号技術』(秀和システム)をごらんください。
さて、ペアリングは面白いことができるのですが実装するのが難しくなかなか気軽に試せません。そこで使いやすくて高速なライブラリmclを開発しています。そのライブラリを試してみようというのが本題です。
ちなみに「高速」と書きましたが、どれぐらいの性能かというとx64環境では筑波大学が開発しているTEPLAというペアリングライブラリの5.6倍ぐらい速いです。詳細はBenchmarkをごらんください。
mclのインストール
mclがサポートする環境
- 64bit Windows上のVisual Studio
- Linux上のx86/x64用gcc, clang
- Linux上の32bit/64bit ARM用gcc
mclはC++で記述されています。WindowsやLinuxのx64だけでなくスマートフォンなどで普及が進んでいる64bit ARMにも対応しているのが特長です。
チェックアウト
Linuxの場合、次のディレクトリ構成でチェックアウトしてください。
git clone https://github.com/herumi/mcl
外部ライブラリとしてOpenSSLやGMPを使います。
apt install libgmp-dev
(Ubuntuの場合)などとしてインストールしてください。
Windowsでは外部ライブラリのコンパイル済みバイナリを提供しています。上記work
ディレクトリで
git clone https://github.com/herumi/cybozulib_ext
としてください。
ビルドとテスト
Linuxなら
cd mcl
make test
でビルドとテストが走ります。最後にall unit tests are OK
と表示されればOKです。
Windowsでは
cd mcl
mklib
でライブラリが作られます。そしてたとえば
mk -s test/bn_test.cpp
とするとbin/bn_test.exeができるので実行してください。特にエラー表示がなければOKです。
ペアリングの最小サンプル
無事ビルドができれば簡単なサンプルsample/pairing.cppを動かしてみます。
以下はコードの抜粋です。
#include <mcl/bn256.hpp>
using namespace mcl::bn256;
const char *aa = "12723517038133731887338407189719511622662176727675373276651903807414909099441";
const char *ab = "4168783608814932154536427934509895782246573715297911553964171371032945126671";
const char *ba = "13891744915211034074451795021214165905772212241412891944830863846330766296736";
const char *bb = "7937318970632701341203597196594272556916396164729705624521405069090520231616";
int main()
{
initPairing();
G1 P(-1, 1);
G2 Q(Fp2(aa, ab), Fp2(ba, bb));
const mpz_class a = 123;
const mpz_class b = 456;
Fp12 e1, e2;
pairing(e1, P, Q);
G2 aQ;
G1 bP;
G2::mul(aQ, Q, a);
G1::mul(bP, P, b);
pairing(e2, bP, aQ);
Fp12::pow(e1, e1, a * b);
printf("%s\n", e1 == e2 ? "ok" : "ng");
}
Linuxなら
make bin/pairing.exe
でbin/pairing.exe
が、Windowsなら
mk -s sample/pairing.cpp
でbin/pairing.exe
ができます。実行してエラーがなければOKです。
ライブラリを使う
mclライブラリを使う場合はmcl/include/
をインクルードパスに、mcl/lib/
をリンカーのパスに指定してlibmcl.a
やmcl.lib
をリンクしてください。
まとめ
今回はペアリングライブラリmclのインストールとサンプルの動かし方を説明しました。
次回以降ではライブラリの説明をしたいと思います。
Author And Source
この問題について(ペアリング暗号ライブラリmclを使ってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/herumi/items/275179ab047359ecd5b9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .