网安萌新 大佬勿喷
最近睡我下铺的哥们要向隔壁班一个女生表白,
问我能不能用黑客技术帮他表示一下,
这我可就不困了!!!
正好我在预习RSA能不能做个表白密码呢?说干就干!
Hello RSA
先熟悉一遍整个加密流程:
找出两个互不相等的大质数p和q;
求出模n=p*q;
由欧拉函数 可得ϕ(n)=(p−1)(q−1);
找出一个与ϕ(n)互质的整数e,要求1<e<ϕ(n);
计算出e关于ϕ(n)的模反元素d——说白了不就是求个逆元吗;
计算公钥
计算私钥解密
打个比方 锁门要用钥匙(公钥)开门也要用钥匙(私钥)Public key 可以公开。对我的安全没有影响
但是 Private key则不能 同时 我不能只会锁门而不会开门。除非这个门我不想再用了所以在设计公钥
的同时也要考虑到私钥的可行性。从哲学的角度来讲 阴阳相生也。
几个问题
1.为什么要确保ϕ(n)互质的整数e?
在我看来有两个方面:
由欧拉定理可知当且仅当二者互质时 存在逆元 也就是私钥d;
若不互质 两个不同的明文 经过同样的秘钥加密 可以得到相同的密文
从而无法破解明文;
总的来说就是impossible to decrypt,not vulnerable.
2.为啥要求1<e<ϕ(n)?
这就涉及到了群的问题 简单来说 某些问题只能在某种范围或者说某种情况下成立例如椭圆曲线加密
就是建立在椭圆曲线上几何操作定义的有限素数群上的DLP问题。简称ECDLP(Elliptic Curve Disc
rete logarithm Problem感兴趣的读者可以研究一下。
一个核心
RSA算法的核心就是One Way——即已知明文求模得出密文容易反之则极为困难尤其是在
模n特别大的情况下。将模运算的单向性发挥的淋漓尽致。
密码学的本质就是解决计算复杂(不可行)的数学问题。
Security relies on the difficulty of factoring large composite numbers.
爱情密码
首先选择公钥e:1314(或521 520 147...一句话:越骚越好!)
然后选择p和q,要求
1.ϕ(pq)=(p−1)(q−1)
2.gcd(ϕ(n),e)=1
这里我通过某种手段获取到了that gilr 的个人信息包括但不限于姓名 学号 生日......)通过对其组合加密生
成了模n:1455925529734358105461406532259911790807347616464991065301847
首先将明文存为bytes形式(在Python语言中。数据是以bytes形式也就是扩展ASCII码保存的
呦 有点意思:
关注一下报错
原来在pow函数中要求输入的数值均为int类型。所以bytes_to_long即可
然 我怎么也装不上Crypto库 于是乎 手撕bytes:
加密 加密 加密!!!
大功告成 还有什么比爱情密码更美妙的东西吗?
脆弱性分析
考虑到接受方的专业程度这里的n可以很容易被大因数分解攻击破解。
实践是检验真理的唯一标准
我下铺那哥们拿到爱情密码 激动万分 感激不尽 喜极而泣。
然后他就跑去表白了
然 不是所有的女生都叫女黑客。
后话
看明文写的啥:
|