欢迎光临散文网 会员登陆 & 注册

【Miracl密码库】椭圆曲线的双线性配对实例AKE

2022-10-24 11:46 作者:C语言实验室  | 我要投稿

本文从公众号复制过来,排版较乱,可参考原文

【Miracl密码库】AKE的实现(ake.cpp)


在Miracl密码库的基础上,复现Miracl库中的案例AKE,了解双线性配对的原理。测试案例为Miracl库中的ake.cpp文件

ake.cpp中实现的AKE,源于Mike Scott的Authenticated ID-based Key Exchange and remote log-in with simple token and PIN numberhttp://eprint.iacr.org/2002/164


复现过程

1.生成静态库miracl.a

【Miracl密码库】编译库文件

2.添加所需要的库文件

cp_pair.cpp  miracl.a  zzn.h    zzn4.cppake.cpp    ecn.cpp    miracl.h  zzn2.cpp  zzn4.hbig.cpp    ecn.h    mirdef.h  zzn2.h    zzn8.cppbig.h    ecn4.cpp  pairing_3.h  zzn24.cpp  zzn8.hbls_pair.cpp  ecn4.h    zzn.cpp    zzn24.h

根据ake.cpp文件的相关说明

Compile with modules as specified below
  For MR_PAIRING_CP curve   cl /O2 /GX ake.cpp cp_pair.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib
  For MR_PAIRING_MNT curve   cl /O2 /GX ake.cpp mnt_pair.cpp zzn6a.cpp ecn3.cpp zzn3.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib     For MR_PAIRING_BN curve   cl /O2 /GX ake.cpp bn_pair.cpp zzn12a.cpp ecn2.cpp zzn4.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib
  For MR_PAIRING_KSS curve   cl /O2 /GX ake.cpp kss_pair.cpp zzn18.cpp zzn6.cpp ecn3.cpp zzn3.cpp big.cpp zzn.cpp ecn.cpp miracl.lib
  For MR_PAIRING_BLS curve   cl /O2 /GX ake.cpp bls_pair.cpp zzn24.cpp zzn8.cpp zzn4.cpp zzn2.cpp ecn4.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

首先测试MR_PAIRING_CP

#define MR_PAIRING_CP      // AES-80 security   #define AES_SECURITY 80

编辑项目管理Makefile文件为

ake : ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o  g++ -o ake ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o
ake.o : ake.cpp  g++ -c -o ake.o ake.cpp
zzn8.o : zzn8.cpp  g++ -c -o zzn8.o zzn8.cpp
zzn24.o : zzn24.cpp  g++ -c -o zzn24.o zzn24.cpp
zzn.o : zzn.cpp  g++ -c -o zzn.o zzn.cpp
zzn2.o : zzn2.cpp  g++ -c -o zzn2.o zzn2.cpp
zzn4.o : zzn4.cpp  g++ -c -o zzn4.o zzn4.cpp
ecn4.o : ecn4.cpp  g++ -c -o ecn4.o ecn4.cpp
ecn.o : ecn.cpp  g++ -c -o ecn.o ecn.cpp
big.o : big.cpp  g++ -c -o big.o big.cpp
cp_pair.o : cp_pair.cpp  g++ -c -o cp_pair.o cp_pair.cpp
clean :  rm -f *.o ake

其中MR_PAIRING_CP型明确指定了相关关联的文件

For MR_PAIRING_CP curve   cl /O2 /GX ake.cpp cp_pair.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

所以在编译的过程中,只需要编译如下文件

ake : ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o  g++ -o ake ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o

编译测试

% makeg++ -c -o ake.o ake.cpp g++ -c -o zzn2.o zzn2.cppg++ -c -o big.o big.cppg++ -c -o zzn.o zzn.cppg++ -c -o ecn.o ecn.cppg++ -c -o cp_pair.o cp_pair.cppg++ -o ake ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o
% ./ake Mapping Server ID to pointMapping Alice & Bob ID's to pointsAlice, Bob and the Server visit Trusted AuthorityAlice and Server Key ExchangeAlice  Key= 89EC2E83ADF6354DB21BServer Key= 89EC2E83ADF6354DB21BBob and Server Key ExchangeBob's  Key= 1F983883493C1FD49929Server Key= 1F983883493C1FD49929

MR_PAIRING_CP型AKE测试完成,得到了相应的公私钥对。

3.测试MR_PAIRING_MNT型

% lsMakefile  ecn.h    mirdef.h  zzn24.cpp  zzn6a.hake.cpp    ecn3.cpp  mnt_pair.cpp  zzn24.h    zzn8.cppbig.cpp    ecn3.h    pairing_3.h  zzn3.cpp  zzn8.hbig.h    ecn4.cpp  zzn.cpp    zzn3.hbls_pair.cpp  ecn4.h    zzn.h    zzn4.cppcp_pair.cpp  miracl.a  zzn2.cpp  zzn4.hecn.cpp    miracl.h  zzn2.h    zzn6a.cpp

编译Makefile文件

% makeg++ -c -o ake.o ake.cpp g++ -c -o mnt_pair.o mnt_pair.cppg++ -c -o zzn6a.o zzn6a.cppg++ -c -o ecn3.o ecn3.cppg++ -c -o zzn3.o zzn3.cppg++ -c -o zzn2.o zzn2.cppg++ -c -o big.o big.cppg++ -c -o zzn.o zzn.cppg++ -c -o ecn.o ecn.cppg++ -o ake mnt_pair.o zzn6a.o ecn3.o zzn3.o zzn2.o big.o zzn.o ecn.o miracl.aUndefined symbols for architecture arm64:  <span data-raw-text="" "="" data-textnode-index-1666582084849="609" data-index-1666582084849="3383" data-textnode-notemoji-index-1666582084849="3383" style=";padding: 0px">"_main<span data-raw-text="" "="" data-textnode-index-1666582084849="609" data-index-1666582084849="3389" data-textnode-notemoji-index-1666582084849="3389" style=";padding: 0px">", referenced from:     implicit entry/start for main executableld: symbol(s) not found for architecture arm64clang: error: linker command failed with exit code 1 (use -v to see invocation)make: *** [ake] Error 1

修改编译条件

#define MR_PAIRING_MNT  // AES-80 security#define AES_SECURITY 80

通过编译,发现不能通过,提示错误是

<span data-raw-text="" "="" data-textnode-index-1666582084849="652" data-index-1666582084849="3689" data-textnode-notemoji-index-1666582084849="3689" style=";padding: 0px">"_main<span data-raw-text="" "="" data-textnode-index-1666582084849="652" data-index-1666582084849="3695" data-textnode-notemoji-index-1666582084849="3695" style=";padding: 0px">", referenced from:     implicit entry/start for main executable

也即没有main函数,程序不能执行,检查Makefile的编写,发现掉了ake.o

ake : ake.o mnt_pair.o zzn6a.o ecn3.o zzn3.o zzn2.o big.o zzn.o ecn.o miracl.a  g++ -o ake ake.o mnt_pair.o zzn6a.o ecn3.o zzn3.o zzn2.o big.o zzn.o ecn.o miracl.a

再次执行程序

% makeg++ -c -o ake.o ake.cpp g++ -c -o mnt_pair.o mnt_pair.cppg++ -c -o zzn6a.o zzn6a.cppg++ -c -o ecn3.o ecn3.cppg++ -c -o zzn3.o zzn3.cppg++ -c -o zzn2.o zzn2.cppg++ -c -o big.o big.cppg++ -c -o zzn.o zzn.cppg++ -c -o ecn.o ecn.cppg++ -o ake ake.o mnt_pair.o zzn6a.o ecn3.o zzn3.o zzn2.o big.o zzn.o ecn.o miracl.a
% ./ake Mapping Server ID to pointMapping Alice & Bob ID's to pointsAlice, Bob and the Server visit Trusted AuthorityAlice and Server Key ExchangeAlice  Key= CC3EE86A798D92251EEServer Key= CC3EE86A798D92251EEBob and Server Key ExchangeBob's  Key= BC01538EC6A598F0FD98Server Key= BC01538EC6A598F0FD98


4.测试MR_PAIRING_BN型

For MR_PAIRING_BN curve   cl /O2 /GX ake.cpp bn_pair.cpp zzn12a.cpp ecn2.cpp zzn4.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

指定了需要的文件

编译执行Makefile文件

% makeg++ -c -o ake.o ake.cpp ake.cpp:37:9: warning: 'AES_SECURITY' macro redefined [-Wmacro-redefined]#define AES_SECURITY 192        ^ake.cpp:36:9: note: previous definition is here#define AES_SECURITY 128        ^1 warning generated.g++ -c -o bn_pair.o bn_pair.cppbn_pair.cpp:1439:8: warning: assigning field to itself [-Wself-assign-field]        mtbits=mtbits;              ^1 warning generated.g++ -c -o zzn12a.o zzn12a.cppg++ -c -o ecn2.o ecn2.cppg++ -c -o zzn4.o zzn4.cppg++ -c -o zzn2.o zzn2.cppg++ -c -o big.o big.cppg++ -c -o zzn.o zzn.cppg++ -c -o ecn.o ecn.cppg++ -o ake ake.o bn_pair.o zzn12a.o ecn2.o zzn4.o zzn2.o big.o zzn.o ecn.o miracl.a
% ./ake Mapping Server ID to pointMapping Alice & Bob ID's to pointsAlice, Bob and the Server visit Trusted AuthorityAlice and Server Key ExchangeAlice  Key= CDC63D1756A764F0285A1E2AC123329132204D5C9269C571Server Key= CDC63D1756A764F0285A1E2AC123329132204D5C9269C571Bob and Server Key ExchangeBob's  Key= 17D419F8F95565F7969D496224AEE9BB34682E6705BCCC3CServer Key= 17D419F8F95565F7969D496224AEE9BB34682E6705BCCC3C

虽然有两个警告信息,但是不影响结果。

5.测试MR_PAIRING_BLS型

% makeg++ -c -o ake.o ake.cpp g++ -c -o bls_pair.o bls_pair.cppg++ -c -o zzn24.o zzn24.cppg++ -c -o zzn8.o zzn8.cppg++ -c -o zzn4.o zzn4.cppg++ -c -o zzn2.o zzn2.cppg++ -c -o ecn4.o ecn4.cppg++ -c -o big.o big.cppg++ -c -o zzn.o zzn.cppg++ -c -o ecn.o ecn.cppg++ -o ake ake.o bls_pair.o zzn24.o zzn8.o zzn4.o zzn2.o ecn4.o big.o zzn.o ecn.o miracl.a
% ./ake Mapping Server ID to pointMapping Alice & Bob ID's to pointsAlice, Bob and the Server visit Trusted AuthorityAlice and Server Key ExchangeAlice  Key= AF9A730D9A22887CF75CF54156099212C75809611CF66847006CE5EA27E764D6Server Key= AF9A730D9A22887CF75CF54156099212C75809611CF66847006CE5EA27E764D6Bob and Server Key ExchangeBob's  Key= 9214406ADF3C8A31A7A8AC034E5F1E7384E6BC41E881340283BC6421FF80219FServer Key= 9214406ADF3C8A31A7A8AC034E5F1E7384E6BC41E881340283BC6421FF80219F


全部代码

Makefile  ecn2.cpp  mirdef.h  zzn2.cpp  zzn6.hake.cpp    ecn2.h    mnt_pair.cpp  zzn2.h    zzn6a.cppbig.cpp    ecn3.cpp  pairing_3.h  zzn24.cpp  zzn6a.hbig.h    ecn3.h    zzn.cpp    zzn24.h    zzn8.cppbls_pair.cpp  ecn4.cpp  zzn.h    zzn3.cpp  zzn8.hbn_pair.cpp  ecn4.h    zzn12a.cpp  zzn3.hcp_pair.cpp  kss_pair.cpp  zzn12a.h  zzn4.cppecn.cpp    miracl.a  zzn18.cpp  zzn4.hecn.h    miracl.h  zzn18.h    zzn6.cpp

Makefile

# AKE加密算法测试  # 测试 ake.cpp 文件
# MR_PAIRING_CP# ake : ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o  # g++ -o ake ake.o miracl.a zzn2.o big.o zzn.o ecn.o cp_pair.o
# MR_PAIRING_MNT# ake : ake.o mnt_pair.o zzn6a.o ecn3.o zzn3.o zzn2.o big.o zzn.o ecn.o miracl.a  # g++ -o ake ake.o mnt_pair.o zzn6a.o ecn3.o zzn3.o zzn2.o big.o zzn.o ecn.o miracl.a
# MR_PAIRING_BN# ake : ake.o bn_pair.o zzn12a.o ecn2.o zzn4.o zzn2.o big.o zzn.o ecn.o miracl.a  # g++ -o ake ake.o bn_pair.o zzn12a.o ecn2.o zzn4.o zzn2.o big.o zzn.o ecn.o miracl.a
# MR_PAIRING_BLSake : ake.o bls_pair.o zzn24.o zzn8.o zzn4.o zzn2.o ecn4.o big.o zzn.o ecn.o miracl.a  g++ -o ake ake.o bls_pair.o zzn24.o zzn8.o zzn4.o zzn2.o ecn4.o big.o zzn.o ecn.o miracl.a
ake.o : ake.cpp  g++ -c -o ake.o ake.cpp
zzn8.o : zzn8.cpp  g++ -c -o zzn8.o zzn8.cpp
zzn24.o : zzn24.cpp  g++ -c -o zzn24.o zzn24.cpp
zzn.o : zzn.cpp  g++ -c -o zzn.o zzn.cpp
zzn2.o : zzn2.cpp  g++ -c -o zzn2.o zzn2.cpp
zzn4.o : zzn4.cpp  g++ -c -o zzn4.o zzn4.cpp
ecn4.o : ecn4.cpp  g++ -c -o ecn4.o ecn4.cpp
ecn.o : ecn.cpp  g++ -c -o ecn.o ecn.cpp
big.o : big.cpp  g++ -c -o big.o big.cpp
bls_pair.o : bls_pair.cpp  g++ -c -o bls_pair.o bls_pair.cpp
cp_pair.o : cp_pair.cpp  g++ -c -o cp_pair.o cp_pair.cpp
mnt_pair.o : mnt_pair.cpp  g++ -c -o mnt_pair.o mnt_pair.cpp
zzn6a.o : zzn6a.cpp  g++ -c -o zzn6a.o zzn6a.cpp
ecn3.o : ecn3.cpp  g++ -c -o ecn3.o ecn3.cpp
zzn3.o : zzn3.cpp  g++ -c -o zzn3.o zzn3.cpp
bn_pair.o : bn_pair.cpp  g++ -c -o bn_pair.o bn_pair.cpp
zzn12a.o : zzn12a.cpp  g++ -c -o zzn12a.o zzn12a.cpp
ecn2.o : ecn2.cpp  g++ -c -o ecn2.o ecn2.cpp
kss_pair.o : kss_pair.cpp  g++ -c -o kss_pair.o kss_pair.cpp
zzn18.o : zzn18.cpp  g++ -c -o zzn18.o zzn18.cpp
zzn6.o : zzn6.cpp  g++ -c -o zzn6.o zzn6.cpp
clean :  rm -f *.o ake


测试中存在的问题,欢迎留言讨论。


本文从公众号复制过来,排版较乱,可参考原文

【Miracl密码库】AKE的实现(ake.cpp)


【Miracl密码库】椭圆曲线的双线性配对实例AKE的评论 (共 条)

分享到微博请遵守国家法律