利用SAGE学习密码学
2023-4-7 12:2:23 Author: 格格巫和蓝精灵(查看原文) 阅读量:38 收藏

在之前的文章当中,我们涉及到许多在有限域以及环上的运算,在设计多项式运算的时候,我都吐槽式的说,不信的读者可以手算一下,当然,不会真的有读者去手算吧,如果有,当我没说蛤,这一篇文章呢,我们就来学习下,我们在学习密码学的过程当中,应该如何去处理这些运算,先稍微剧透一下,这肯定不是手写这些运算的实现,实话说,这些实现写起来还是比较费劲的。

为了处理密码学当中用到的那些复杂的运算呢,我们有请本篇文章的主角 「SAGE」 程序库,那么我们一起来看一下这个库在密码学当中的一些使用例子吧。

SAGE库简介

Sage是一款数学软件,旨在为数学爱好者和专业人员提供开源、高性能的数学计算平台,涵盖各种数学领域,包括代数、数论、加密、微积分、概率、统计学等。对你没听错,这个不是专门为了密码学搞得,这是个数学软件,但是这玩意用在密码学那是相当的好用,有了它,妈妈再也不用担心我计算不对数字了,前提是你学习的目的不是为了考试,因为绝大多数考试是不让你用这个的,你还是要手算。

如何使用SAGE库

0x01 直接安装

这里简单的描述一下,详细的安装方案可以参考文末的参考资料[1],里面详细的说明了如何安装。

  1. 从官网下载对应的安装包
  2. 运行安装程序,根据提示安装完成
  3. 安装可选的依赖项,如果你需要某些特定的东西,你可能要装依赖,具体的方案还是去看参考资料[1]
  4. 打开sage,这样你就得到了一个交互式的程序,可以选择采用什么方式运行sage,这里可选的方式有终端和运行Jupyter notebook,这两个可以根据需要自行选择
SAGE选择打开方式

如果你选择了终端,那么你得到的就是一个在终端运行的sage程序,你可以用它来直接交互式的运行sage代码。

终端运行SAGE

你可以选择用它来进行用一些运算,具体的例子来源于参考资料[3],简单解释一下,第一个是生成一个在GF(2)上10000*10000维度的一个随机的矩阵,然后下一个例子是一个对格运行一下LLL算法,(1+1属于第0个例子,这没必要说了)。

SAGE运行案例

然后如果选择Jupyter notebook,打开如下所示。

Jupyter notebook打开

然后,这里我们在新建的时候,需要选择

新建Sage文件

点击之后,我们就可以输入一些内容来试验一下。

SAGE运行案例

例子和上面一样,我们发现结果也是可以的,并且这玩意是支持保存的,因此可以采用这种方式来搞一搞,界面也挺好看。

0x02 cocalc方案

这里,推荐使用第二种方案(纯属个人看法,不接受反驳),也就是当前写的这种,我们可以直接部署一个sage服务,当然这个服务不限于使用sage。我们直接采用官方给的docker的方案,直接就可以起一个服务,具体命令如下。

docker run --name=cocalc -d -v ~/cocalc:/projects -p 10443:443 sagemathinc/cocalc

稍等片刻,等待运行结束,我们就得到了一个服务,这里尽量选择一个比较友好的网络,需要下载东西可能比较多。

这里的端口是可以自己改的,我选择了10443,读者可以根据自己的需要自行切换,只要不和自己电脑端口冲突就行,运行成功之后,访问地址,就可以得到如下的页面。

COCALC

然后你需要先注册一个账号,点击SignUp,这个应该是没有中文的,英文凑合看一下吧。这个邮箱不会验证,随便输就行,然后密码要记住,如果忘记了呢,可以考虑重新注册一个。注册完成之后,会自动登录,然后选择新建项目,名字随便起,创建完成之后如下。

Cocalc项目创建完成

然后我们点击New,或者中间的那个Create Or Upload Files...,之后选择Sage Worksheet。

新建Sage文件

然后,我们依然来测试一下。

SAGE运行案例

发现,他也是好使的,这样我们就成功运行了,这里简单的说一下为什么我推荐这种方案,因为这是一个在线的服务,是可以部署在服务器上的,这样,就不用来回折腾文件了,其次呢,这个里面有很多快捷运算的方式,和代码片段,我们也可以直接用。

代码片段

Sage使用案例

CRC循环冗余校验

上次在讲CRC的文章当中,我给我自己挖了个坑,那个多项式的计算,具体是如何计算的,我这边那肯定不会是手动计算的了,手动狗头。

先来看一下,我们这里用到的参数吧,具体如下。

  • 使用到的多项式:
  • 输入内容:
  • 计算内容:  

然后,我们利用SAGE来计算一下

CRC循环冗余校验计算结果

可以发现,具体的运算结果是正确的,到这里,我们就完成了对于CRC的计算,有关于其他的多项式,读者们可以自行来体验一下。

参考资料

  • https://doc.sagemath.org/html/en/installation/index.html
  • https://doc.sagemath.org/html/en/reference/cryptography/index.html
  • https://martinralbrecht.files.wordpress.com/2010/07/20120528_-sage-_mykonos.pdf
  • https://github.com/sagemathinc/cocalc
  • https://github.com/sagemathinc/cocalc-docker

文章来源: http://mp.weixin.qq.com/s?__biz=MzI5NDg0ODkwMQ==&mid=2247485214&idx=1&sn=a258759cc92d37d92c771240206c81ea&chksm=ec5dd7f4db2a5ee2112de49ded4298ff09fe6f23a7f1346b131e0fc42d9458c8c16568a740f0#rd
如有侵权请联系:admin#unsafe.sh