在之前的文章当中,我们涉及到许多在有限域以及环上的运算,在设计多项式运算的时候,我都吐槽式的说,不信的读者可以手算一下,当然,不会真的有读者去手算吧,如果有,当我没说蛤,这一篇文章呢,我们就来学习下,我们在学习密码学的过程当中,应该如何去处理这些运算,先稍微剧透一下,这肯定不是手写这些运算的实现,实话说,这些实现写起来还是比较费劲的。
为了处理密码学当中用到的那些复杂的运算呢,我们有请本篇文章的主角 「SAGE」 程序库,那么我们一起来看一下这个库在密码学当中的一些使用例子吧。
Sage是一款数学软件,旨在为数学爱好者和专业人员提供开源、高性能的数学计算平台,涵盖各种数学领域,包括代数、数论、加密、微积分、概率、统计学等。对你没听错,这个不是专门为了密码学搞得,这是个数学软件,但是这玩意用在密码学那是相当的好用,有了它,妈妈再也不用担心我计算不对数字了,前提是你学习的目的不是为了考试,因为绝大多数考试是不让你用这个的,你还是要手算。
这里简单的描述一下,详细的安装方案可以参考文末的参考资料[1],里面详细的说明了如何安装。
Jupyter notebook
,这两个可以根据需要自行选择如果你选择了终端,那么你得到的就是一个在终端运行的sage程序,你可以用它来直接交互式的运行sage代码。
你可以选择用它来进行用一些运算,具体的例子来源于参考资料[3],简单解释一下,第一个是生成一个在GF(2)上10000*10000维度的一个随机的矩阵,然后下一个例子是一个对格运行一下LLL算法,(1+1属于第0个例子,这没必要说了)。
然后如果选择Jupyter notebook
,打开如下所示。
然后,这里我们在新建的时候,需要选择
点击之后,我们就可以输入一些内容来试验一下。
例子和上面一样,我们发现结果也是可以的,并且这玩意是支持保存的,因此可以采用这种方式来搞一搞,界面也挺好看。
这里,推荐使用第二种方案(纯属个人看法,不接受反驳),也就是当前写的这种,我们可以直接部署一个sage服务,当然这个服务不限于使用sage。我们直接采用官方给的docker的方案,直接就可以起一个服务,具体命令如下。
docker run --name=cocalc -d -v ~/cocalc:/projects -p 10443:443 sagemathinc/cocalc
稍等片刻,等待运行结束,我们就得到了一个服务,这里尽量选择一个比较友好的网络,需要下载东西可能比较多。
这里的端口是可以自己改的,我选择了10443
,读者可以根据自己的需要自行切换,只要不和自己电脑端口冲突就行,运行成功之后,访问地址,就可以得到如下的页面。
然后你需要先注册一个账号,点击SignUp,这个应该是没有中文的,英文凑合看一下吧。这个邮箱不会验证,随便输就行,然后密码要记住,如果忘记了呢,可以考虑重新注册一个。注册完成之后,会自动登录,然后选择新建项目,名字随便起,创建完成之后如下。
然后我们点击New,或者中间的那个Create Or Upload Files...
,之后选择Sage Worksheet。
然后,我们依然来测试一下。
发现,他也是好使的,这样我们就成功运行了,这里简单的说一下为什么我推荐这种方案,因为这是一个在线的服务,是可以部署在服务器上的,这样,就不用来回折腾文件了,其次呢,这个里面有很多快捷运算的方式,和代码片段,我们也可以直接用。
上次在讲CRC的文章当中,我给我自己挖了个坑,那个多项式的计算,具体是如何计算的,我这边那肯定不会是手动计算的了,手动狗头。
先来看一下,我们这里用到的参数吧,具体如下。
然后,我们利用SAGE来计算一下
可以发现,具体的运算结果是正确的,到这里,我们就完成了对于CRC的计算,有关于其他的多项式,读者们可以自行来体验一下。