1、RSA的来源
RSA通常指基于RSA算法的密码系统,令我没想到的是,其名字的来源竟然不是某个含有特别意义的单词缩写而成(比如PHP:Hypertext Preprocessor(超文本预处理器)),而是由1977年提出该算法的三个歪果仁的姓氏首字母这么很随意的拼接起来的(Ron Rivest、Adi Shamir和Leonard Adleman),可它却是首个既能用于加密又能用于数字签名(这个还不懂什么是签名,书上是这么说的,反正不是真的 签名)的非对称加密算法
2、RSA算法的原理
RSA算法基于大数分解的数学难题,大概原理如下:
<1>密钥生成
·生成大质数p和q
选择两个大素数(我做题遇到的通常是1024位的)p和q
·计算公共模数n
另有一个数(通常叫做模数)n(2048位),计算n=pxq
·计算欧拉函数
欧拉函数f(n)(字符fai打不出来)或phi(值钱啊做题遇到过),f(n)=(p-1)(q-1)
·计算公钥e
存在一个整数e(通常叫公钥),满足1<e<f(n) (通过伪随机数生成器生成)且gcd(e,f(n))=1即两个数的最大公约数为1(gcd为欧几里得算法),这里e的选取是很容易的,因为所有大于p和q的素数都可用
·计算私钥d
计算d(私钥),使得dxe=1(且是恒等于) mod f(n) 移项后dxe mod f(n)=1也一样的。
解密的私钥d满足dxe=kf(n)+1(其中k是大于等于1的整数)所以,只要知道e和f(n),则很容易计算出d
<2>加密
使用公钥(e,n)加密消息m:c=m**e(m的e次方)mod n 其中c为密文
<3>解密
成功生成密钥后,只有接收者本人拥有私钥(d,n),然后即可通过公式进行RSA解密。
使用私钥(d,n)解密密文c:m=c**d(c的d次方) mod n(m表示解密后的明文,c表示待解密的密文)
3、RSA的运用
RSA算法大致广泛应用于以下领域:
<1>数据加密
用于加密敏感信息,如电子邮件、文件等等
<2>数字签名
用于验证消息的真实性和完整性
<3>SSL/TLS协议
用于保护网络通信,如HTTPS
<4>身份认证
用于验证用户或设备的身份,如智能卡、VPN等
4、RSA的安全性
其实RSA完全依赖于大数分解的难度(做题通常以分解n为突破口)。随着现在计算能力的提升,密钥长度需不断增加才能一定程度的保持安全性(像做题很容易找到工具分解n,即使密钥是1024位,我就发现不是很复杂的RSA把附件往AI那一扔也能跑出来,当然不建议这么做,因为啥也学不到)目前,网上公认2048位或更长的密钥被认为是安全的
5、RSA的优点与缺点
<1>优点
安全性高,基于数学难题
支持加密和数字签名
<2>缺点
计算量太大,速度较慢
密钥长度较长,存储和传输开销大
总之RSA算法是现代密码学呢基础,广泛应用于数据加密、数字签名等领域。尽管存在计算量大等缺点,但其高安全性使它在信息安全中占据重要地位(ctf中crypto方向也很常见)
这里我在做一题RSA时运用了pythoncharm运行代码,顺便学到了pycharm的安装与更新还有其中crypto dome库的安装
6、pycharm的运用
关于我的python和idle总是运行不了这个事在很多地方找了解决办法,但貌似并没用,最后直接把我的python系统直接卸载“从头来过”,并在网上得到了关于python软件包的组装,一步一步安装了近三个小时才达到正常使用的地步(包括库的install和换源换背景等统统学了个遍)
关于pycharm的下载及安装我就不写了,(安装的时候也忘了截图)因为网上有很多教程,都大同小异,我主要想记下的是我自己出现的感觉比较棘手和浪费时间的问题
<1>国内源的无法查找与换源
这里我卸载了重新装以后按教程新建了后缀名为.ini的国内源网站址,但在install crypto dome库时,报错国内网(douban)查找不到相关的库,这就很难办了
我一直以为可能是安装语句不正确的原因,在网上和AI那里找了各种各样的语句执行install命令,但最后发现报错还是一样(这里忘了截图,其实也没必要),于是我突然想到了我建的那个.ini文件夹里的网址,随即立即打开教程里给的国内网(豆瓣)复制到firefox里,发现果然打不开
所以说问题就出在了这个网址上,我的理解是可能pycharm将这个网址作为后端数据库,需要执行什么样的命令就从这个网站调取,既然这个网站访问不了了那install命令自然执行不了,也就找不到crypto dome库了(这么理解也不知道对不对)
既然这样,那我想了想能不能换个源站,可以用的那种...
于是上AI一查,的确有,阿里的华为的,然后发现内个用不了的douban也在,好像就有点理解怎么个事了,应该pycharm这款应用对应的国内网就是这几个
然后果断换了华为的,继续install,这次总算不像之前报错了,但,,,还是在报错
这我英语也不好,手机翻译了一下
所以意思就是我的pycharm也过期了,然后又找升级的口令
最后找到命令在终端里面升级
终于,几经辗转,这次install 终于成功了
最后自然是成功的获得了这题RSA算法的flag
诶我这时候有个微妙的感觉,成功的喜悦似乎不仅仅在获得flag上,还有很大一部分是经过我这么久的探索然后解决了让我困惑和棘手的问题 尽管是小问题
因为之前更多的是看别人怎么做自己就怎么做的被牵着鼻子解决,比如之前用的app都是下载安装好就什么工具都可以用,但这个组装crypto,如果一上来就有人教,而不去想,虽然花费的时间要少很多,但是下次同样的问题定然还要再到网上找一遍,虽然现在的条件不难但很麻烦
别的不说,光对命令理解了的话印象都会更深刻
比如这里终端升级python的命令
pip install --upgrade python
pip是python的包管理工具,install安装,upgrade升级,前面加两个--,最后接上python
还有安装crypto dome库就更好记了
pip install pycryptodome
前两个单词一样的,后面拆开就是py crypto dome
这样很好记,就算忘了下次再查一下包能记住的