DCC_2012_Sihong Su . Xiaohu Tang rotation symmetric boolean functions

论文名称:Construction of rotation symmetric Boolean functions with optimal algebraic immunity and high nonlinearity

1.majority function

这里写图片描述

2.Preliminaries

这里写图片描述

3 Compositions of an integer k

这里写图片描述

4 Construction of RSBFs on odd number of variables

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
5.SageMath程序实现

from sage.crypto.boolean_function import BooleanFunction
k=6
n=2*k+1
t=0
top=0
Sum=0
s=[None]*n
set=[]
#整数分解
def dfs():
    global Sum,top,t,k,s,set
    if Sum == k:
        if s[0] != 1:#构造的布尔函数要求开头不为1
            set.append(s[0:top])
        return
    if Sum > k:
        return
    for i in range(1,k+1):
        Sum+=i
        s[top]=i
        top=top+1
        dfs()
        Sum-=i
        top=top-1
        s[top]=i
dfs()
#print(set)
#求集合T
T=[]
for i in range(len(set)):
    tmp=[]
    for j in set[i]:
        for k in range(j):
            tmp.append(1)
        tmp.append(0)
    for k in range(n - len(tmp)):
        tmp.append(0 )
    T.append(tmp)
#print(T)
#print(len(T))
#求集合U
U=[]
for i in range(len(set)):
    k1=set[i][0]
    tmp=[0]*(n-k1)
    tmp=tmp+[1]*(k1-1)+[0]
    for j in range(n):
        tmp[j]=(tmp[j]+T[i][j])%2
    U.append(tmp)
#print(U)
#构造择多函数
f=[0]*(2^n)
for i in range(2^n):
    tmp=list(str('{0:b}'.format(i)).rjust(n,'0'))
    listkey=[int(x) for x in tmp ]
    wt=0
    for j in listkey:
        if j==0:
            wt=wt+1
    if wt >= ((n-1)/2+1):
        f[i]=1

TU=T+U
supp=[]
for Set in TU:
    for j in range(0,n):
        tmp=Set[j:]+Set[:j]
        index=0
        for k in range(len(tmp)):
            if tmp[k]==1:
                index=index+2^(n-k-1)
        supp.append(index)
for i in supp:
    f[i]=(f[i]+1)%2

B=BooleanFunction(f)
deg=0
ANF=str(B.algebraic_normal_form()).split("+")
for i in range(len(ANF)):
    count=0
    for j in range(len(ANF[i])):
        if ANF[i][j]=="x":
            count=count+1
    if count>deg:
        deg=count
#将真值表写入文件,使用其他程序测试函数抵抗快速代数攻击的能力
filename='truth_table.txt'
with open(filename,'w') as fw:
    fw.writelines(str(f))
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值