一种用于乘法器的全同态混淆方法与流程

文档序号:16579287发布日期:2019-01-14 17:49阅读:208来源:国知局
一种用于乘法器的全同态混淆方法与流程

本发明涉及一种全同态混淆方法,尤其是涉及一种用于乘法器的全同态混淆方法。



背景技术:

作为运算单元的一部分,乘法器在数字电路设计中是必不可少的。在硬件电路设计中,乘法器可以直接使用乘法运算符号,在进行逻辑综合时会调用工艺库中的乘法器知识产权(intellectualproperty,ip)核来完成乘法运算。乘法器作为集成电路中的一个ip核,是可以重复使用的,所以其自身会受到各种攻击,比如ip核盗版等问题。现有的ip核保护是通过硬件混淆即改变ip核的设计来隐藏电路的功能,例如zhang等提出采用物理不可克隆函数(physicalunclonablefunction,puf)和有限状态机相结合的硬件混淆方法,有效保护现场可编程门阵列(field-programmablegatearray,fpga)器件的ip核,实现pay-per-device的强制付费许可。

但是传统ip保护方法很少涉及对乘法器ip核的保护,并且也不涉及对乘法器原始输入数据的保护,所以乘法器在进行乘法运算时,乘数和被乘数是以原始数据输入乘法器中来运算的,这些原始数据很容易被硬件木马等攻击所利用来对电路或者设计进行恶意修改,从而导致整个电路异常运行或者窃取整个电路信息。所以,如何有效保护集成电路中乘法器的运算数据及其自身ip核的安全,已成为亟待解决的问题。



技术实现要素:

本发明所要解决的技术问题是提供一种用于乘法器的全同态混淆方法,该全同态混淆方法可以对乘数和被乘数进行全同态加密,并将积混淆输出,由此避免乘数和被乘数的原始数据被盗用,对乘法器ip核进行保护,提高乘法器在集成电路中安全性。

本发明解决上述技术问题所采用的技术方案为:一种用于乘法器的全同态混淆方法,包括以下步骤:

(1)将乘法器的第一输入端口记为a',第二输入端口记为b',积输出端口记为c',将二进制乘数记为a”,a”=anan-1…a2a1,n为二进制乘数的位数,二进制被乘数记为b”,b”=bmbm-1…b2b1,m为二进制被乘数的位数,设定一个通过第二输入端口输入乘法器中的l位二进制密钥,将其记为ks,其中l为大于1的整数;

(2)采用随机函数随机产生两个大于等于-2且小于等于2的十进制变量r1和r2;

(3)在乘法器中设定l位二进制数,将该l位二进制数作为乘法器的正确秘钥;

(4)将a”对应的十进制数记为a,b”对应的十进制数记为b,对a和b进行全同态加密,具体加密过程为:

a、若m=n,将a加密后得到的数据记为c1,将b加密后得到的数据记为c0,按照以下步骤进行加密:

a-1、判定n是否等于1:如果n等于1,令c1=a+p*q+2r1,c0=b+p*q+2r2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(a+2r1)*(b+2r2)<p/2,*为乘运算符号;如果n大于1,令c1=a+p*q+4nr1,c0=b+p*q+4nr2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(a+4nr1)*(b+4nr2)<p/2;

a-2、将c1和c0输入到乘法器中执行乘法运算,将此时运算的结果记为c,c=c1*c0;

a-3、判定乘法器的第二输入端口b'输入的l位二进制密钥ks与乘法器的正确秘钥是否相等:

当输入的l位二进制密钥ks与乘法器的正确秘钥相等时,判定n的值是否等于1:如果n等于1,则将c先对p取模后再对2取模,得到解密后的数据out,该解密后的数据out即为乘法器输出的积,此时out=(cmodp)mod2,mod为取模符号;如果n大于1,则将c先对p取模后再对4n取模,得到解密后的数据out,该解密后的数据out即为乘法器输出的积,此时out=(cmodp)mod4n

当输入的l位二进制密钥ks与乘法器的正确秘钥不相等时,判定n的值是否等于1:如果n等于1,则将c先对p取模后然后对2取模最后按位取反,得到解密后的数据out输出,该解密后的数据out即为乘法器输出的积,此时out=~((cmodp)mod2),~为取反符号。如果n大于1,则将c先对p取模后然后对4n取模最后按位取反,得到解密后的数据out输出,该解密后的数据out即为乘法器输出的积,此时out=~((cmodp)mod4n);

b、若n>m,将n除以m的商记为k,余数记为h,对a”进行更新:若h不等于0,在a”的高位即最左边补m-h个0,得a”=a(k+1)m…an+2an+1anan-1…a2a1,其中a(k+1)m…an+2an+1=0…00,若h=0,则a”保持不变;将当前a”的位数除以m的商记为j,将am…a3a2a1对应的十进制记为d1,将a2m…am+3am+2am+1对应的十进制记为d2,以此类推,将ajm…a(j-1)m+3a(j-1)m+2a(j-1)m+1对应的十进制记为dj,按照以下步骤进行加密:

b-1、将di加密后得到的数据记为ci,i=1,2,…,j,将b加密后得到的数据记为c0;

b-2、判定m是否等于1:如果m等于1,令ci=di+p*q+2r1,c0=b+p*q+2r2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+2r1)*(b+2r2)<p/2;如果m大于1,令ci=di+p*q+4mr1,c0=b+p*q+4mr2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+4mr1)*(b+4mr2)<p/2;;

b-3、将c1,c2,c3,…,cj分别与c0输入到乘法器中执行乘法运算,将ci与c0运算的结果记为ci,即ci=ci*c0;

b-4、判定乘法器的第二输入端口b'输入的l位二进制密钥ks与设定的正确的l位二进制密钥值是否相等:

当输入的l位二进制密钥ks与乘法器的正确秘钥相等时,判定m的值是否等于1:如果m等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=(cimodp)mod2,mod为取模符号;则out=则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+c'1,将数据out输出,数据out即为乘法器输出的积;如果m大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=(cimodp)mod4m,mod为取模符号;则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+c'1,将数据out输出,数据out即为乘法器输出的积;

当输入的l位二进制密钥ks与乘法器的正确秘钥不相等时,判定m的值是否等于1:如果m等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,即c'i=~(cimodp)mod2,mod为取模符号;则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+c'1,将数据out输出,数据out即为乘法器输出的积;如果m大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=~(cimodp)mod4m,mod为取模符号;则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+…+c'1,将数据out输出,数据out即为乘法器输出的积;

c、若n<m,将m除以n的商记为k,余数记为h,对b”进行更新:若h不等于0,在b”的高位即最左边补n-h个0,得b”=b(k+1)n…bm+2bm+1bmbm-1…b2b1,b(k+1)n…bm+2bm+1=0…00,若h等于0,则b”保持不变;将当前b”的位数除以n的商记为j,将bn…b3b2b1对应的十进制记为d1,将d2n…bn+3bn+2bn+1对应的十进制记为d2,以此类推,将bjn…b(j-1)n+3b(j-1)n+2b(j-1)n+1对应的十进制记为dj,按照以下步骤进行加密:

c-1、将di加密后得到的数据记为ci,i=1,2,…,j,将a加密后得到的数据记为c0;

c-2、判定n是否等于1:如果n等于1,令ci=di+p*q+2r1,c0=a+p*q+2r2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+2r1)*(a+2r2)<p/2;如果n大于1,令ci=di+p*q+4nr1,c0=a+p*q+4nr2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+4nr1)*(a+4nr2)<p/2;;

c-3、将c1,c2,c3,…,cj分别与c0输入到乘法器中执行乘法运算,将ci与c0运算的结果记为ci,即ci=ci*c0;

c-4、判定乘法器的第二输入端口b'输入的l位二进制密钥ks与设定的正确的l位二进制密钥值是否相等:

当输入的l位二进制密钥与乘法器的正确秘钥相等时,判定n的值是否等于1:如果n等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=(cimodp)mod2,mod为取模符号;则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积;如果n大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模,得到解密后的数据c'1,c'2,c'3,…,c'k,此时c'i=(cimodp)mod4n,mod为取模符号;则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积;

当输入的l位二进制密钥与乘法器的正确秘钥不相等时,判定n的值是否等于1:如果n等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,即c'i=~(cimodp)mod2,mod为取模符号;则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积;如果n大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=~(cimodp)mod4n,mod为取模符号,则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积。

与现有技术相比,本发明的优点在于通过对乘法器的乘数和被乘数进行全同态加密,利用加密后的数据进行乘法运算,由此可以避免乘数和被乘数的原始数据出现,根据在乘法器第二输入端口b'输入的l位二进制密钥ks与设置的乘法器的正确密钥进行比较的结论,对乘积进行混淆输出,对于硬件木马而言,只能接触到乘数和被乘数被加密后的数据,并不知道乘数和被乘数被加密后的数据的真实意义,所以无法对相关数据发起有效的攻击,但乘数和被乘数被加密后的数据仍然可以进行后续乘法运算;对于旁道攻击而言,乘法器芯片在工作时处理的是乘数和被乘数被加密后的数据,不再是乘数和被乘数的原始数据,所泄露出来的功耗或者运行时间与乘数和被乘数被加密后的数据相关,不能体现乘数和被乘数的原始数据所代表的含义,可有效的阻止旁道攻击,在乘法器的输出端口,通过设置的乘法器的正确密钥来控制乘积输出,只有输入的l位二进制密钥ks与设置的乘法器的正确密钥相同时,才能将相乘后的数据全同态解密后输出,当攻击者不知道正确的乘法器的正确密钥时,l位二进制密钥ks与设定的乘法器的正确密钥不相同,将相乘后的数据全同态解密后再取反输出,从而实现输出混淆,而设定的乘法器的正确密钥是由设计者掌握的,攻击者无法获取到,由此提高了硬件知识产权的保护力度,可以有效阻止ip盗用的问题。

附图说明

图1为乘法器采用原始数据进行运算的输出波形图;

图2为乘法器采用本发明的用于乘法器的全同态混淆方法进行运算的输出波形图。

具体实施方式

以下结合附图实施例对本发明作进一步详细描述。

实施例:一种用于乘法器的全同态混淆方法,包括以下步骤:

(1)将乘法器的第一输入端口记为a',第二输入端口记为b',积输出端口记为c',将二进制乘数记为a”,a”=anan-1…a2a1,n为二进制乘数的位数,二进制被乘数记为b”,b”=bmbm-1…b2b1,m为二进制被乘数的位数,设定一个通过第二输入端口输入乘法器中的l位二进制密钥,将其记为ks,其中l为大于1的整数;

(2)采用随机函数随机产生两个大于等于-2且小于等于2的十进制变量r1和r2;

(3)在乘法器中设定l位二进制数,将该l位二进制数作为乘法器的正确秘钥;

(4)将a”对应的十进制数记为a,b”对应的十进制数记为b,对a和b进行全同态加密,具体加密过程为:

a、若m=n,将a加密后得到的数据记为c1,将b加密后得到的数据记为c0,按照以下步骤进行加密:

a-1、判定n是否等于1:如果n等于1,令c1=a+p*q+2r1,c0=b+p*q+2r2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(a+2r1)*(b+2r2)<p/2,*为乘运算符号;如果n大于1,令c1=a+p*q+4nr1,c0=b+p*q+4nr2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(a+4nr1)*(b+4nr2)<p/2;

a-2、将c1和c0输入到乘法器中执行乘法运算,将此时运算的结果记为c,c=c1*c0;

a-3、判定乘法器的第二输入端口b'输入的l位二进制密钥ks与乘法器的正确秘钥是否相等:

当输入的l位二进制密钥ks与乘法器的正确秘钥相等时,判定n的值是否等于1:如果n等于1,则将c先对p取模后再对2取模,得到解密后的数据out,该解密后的数据out即为乘法器输出的积,此时out=(cmodp)mod2,mod为取模符号;如果n大于1,则将c先对p取模后再对4n取模,得到解密后的数据out,该解密后的数据out即为乘法器输出的积,此时out=(cmodp)mod4n

当输入的l位二进制密钥ks与乘法器的正确秘钥不相等时,判定n的值是否等于1:如果n等于1,则将c先对p取模后然后对2取模最后按位取反,得到解密后的数据out输出,该解密后的数据out即为乘法器输出的积,此时out=~((cmodp)mod2),~为取反符号。如果n大于1,则将c先对p取模后然后对4n取模最后按位取反,得到解密后的数据out输出,该解密后的数据out即为乘法器输出的积,此时out=~((cmodp)mod4n);

b、若n>m,将n除以m的商记为k,余数记为h,对a”进行更新:若h不等于0,在a”的高位即最左边补m-h个0,得a”=a(k+1)m…an+2an+1anan-1…a2a1,其中a(k+1)m…an+2an+1=0…00,若h=0,则a”保持不变;将当前a”的位数除以m的商记为j,将am…a3a2a1对应的十进制记为d1,将a2m…am+3am+2am+1对应的十进制记为d2,以此类推,将ajm…a(j-1)m+3a(j-1)m+2a(j-1)m+1对应的十进制记为dj,按照以下步骤进行加密:

b-1、将di加密后得到的数据记为ci,i=1,2,…,j,将b加密后得到的数据记为c0;

b-2、判定m是否等于1:如果m等于1,令ci=di+p*q+2r1,c0=b+p*q+2r2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+2r1)*(b+2r2)<p/2;如果m大于1,令ci=di+p*q+4mr1,c0=b+p*q+4mr2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+4mr1)*(b+4mr2)<p/2;;

b-3、将c1,c2,c3,…,cj分别与c0输入到乘法器中执行乘法运算,将ci与c0运算的结果记为ci,即ci=ci*c0;

b-4、判定乘法器的第二输入端口b'输入的l位二进制密钥ks与设定的正确的l位二进制密钥值是否相等:

当输入的l位二进制密钥ks与乘法器的正确秘钥相等时,判定m的值是否等于1:如果m等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=(cimodp)mod2,mod为取模符号;则out=则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+c'1,将数据out输出,数据out即为乘法器输出的积;如果m大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=(cimodp)mod4m,mod为取模符号;则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+c'1,将数据out输出,数据out即为乘法器输出的积;

当输入的l位二进制密钥ks与乘法器的正确秘钥不相等时,判定m的值是否等于1:如果m等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,即c'i=~(cimodp)mod2,mod为取模符号;则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+c'1,将数据out输出,数据out即为乘法器输出的积;如果m大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=~(cimodp)mod4m,mod为取模符号;则out=c'j*2(j-1)m+c'(j-1)*2(j-2)m+…+c'2*2m+…+c'1,将数据out输出,数据out即为乘法器输出的积;

c、若n<m,将m除以n的商记为k,余数记为h,对b”进行更新:若h不等于0,在b”的高位即最左边补n-h个0,得b”=b(k+1)n…bm+2bm+1bmbm-1…b2b1,b(k+1)n…bm+2bm+1=0…00,若h等于0,则b”保持不变;将当前b”的位数除以n的商记为j,将bn…b3b2b1对应的十进制记为d1,将d2n…bn+3bn+2bn+1对应的十进制记为d2,以此类推,将bjn…b(j-1)n+3b(j-1)n+2b(j-1)n+1对应的十进制记为dj,按照以下步骤进行加密:

c-1、将di加密后得到的数据记为ci,i=1,2,…,j,将a加密后得到的数据记为c0;

c-2、判定n是否等于1:如果n等于1,令ci=di+p*q+2r1,c0=a+p*q+2r2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+2r1)*(a+2r2)<p/2;如果n大于1,令ci=di+p*q+4nr1,c0=a+p*q+4nr2,其中p为正的奇数,q为比p大的正整数,且满足-p/2<(di+4nr1)*(a+4nr2)<p/2;;

c-3、将c1,c2,c3,…,cj分别与c0输入到乘法器中执行乘法运算,将ci与c0运算的结果记为ci,即ci=ci*c0;

c-4、判定乘法器的第二输入端口b'输入的l位二进制密钥ks与设定的正确的l位二进制密钥值是否相等:

当输入的l位二进制密钥与乘法器的正确秘钥相等时,判定n的值是否等于1:如果n等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=(cimodp)mod2,mod为取模符号;则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积;如果n大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模,得到解密后的数据c'1,c'2,c'3,…,c'k,此时c'i=(cimodp)mod4n,mod为取模符号;则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积;

当输入的l位二进制密钥与乘法器的正确秘钥不相等时,判定n的值是否等于1:如果n等于1,则将c1,c2,c3,…,cj分别对p取模后再对2取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,即c'i=~(cimodp)mod2,mod为取模符号;则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积;如果n大于1,则将c1,c2,c3,…,cj分别对p取模后再对4n取模最后按位取反,得到解密后的数据,将ci解密后的数据记为c'i,此时c'i=~(cimodp)mod4n,mod为取模符号,则out=c'j*2(j-1)n+c'(j-1)*2(j-2)n+…+c'2*2n+c'1,将数据out输出,数据out即为乘法器输出的积。

乘法器采用原始数据进行运算的输出波形如图1所示,乘法器采用本发明的用于乘法器的全同态混淆方法进行运算的输出波形如图2所示。图1中,a”是乘数,b”是被乘数,out为乘法器输出的积。图2中,a”是乘数,b”是被乘数,out为乘法器输出的积,r1和r2在图2中采用二进制数表示,c1在图2中采用十六进制数表示,c0在图2中采用十六进制数表示,c在图2中采用十六进制数表示,p和q在图2中采用十六进制数表示,a”和b”采用相同的位宽,即m=n=2,ks表示从乘法器的第二输入端口b'输入的l位二进制密钥值是正确的,!ks表示从乘法器的第二输入端口b'输入的密钥值是错误的,这里我们选择了4位二进制密钥。分析图1和图2可知:乘法器采用本发明的用于乘法器的全同态混淆方法进行运算时,当输入的4位二进制密钥与设定的正确的4位密钥值相等时,乘法器输出的积out和图1乘法器输出的积一致,由此表明本发明的用于乘法器的全同态混淆方法具有正确的逻辑功能;当输入的4位二进制密钥与设定的正确的4位密钥值不相等时,乘法器输出的积out和图1乘法器输出的积相反,由此表明本发明的用于乘法器的全同态混淆方法将乘法器输出的结果进行了混淆输出,有效的保护集成电路中乘法器的运算数据及其自身ip核的安全。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1