【RSA交换律】基于RSA的智力扑克游戏

前排提醒

陷阱,别来。
什么RSA智力扑克
都是陷阱。

初次尝试

据说RSA的加解密是具备交换律的(注:后来发现不完全是这样)
也就是这样子:
image
image
神奇吧?A加密某个数据,随后B加密该数据,此时本来要解密的话是先B解密然后A解密的。
但是想不到吧,A是可以先解密,随后B解密的。

就因为看到这个神奇的操作,我开始了苦逼的尝试之旅。
读者看到这里有福了,因为可以不用自己去尝试了

这个标题是初次尝试,不过初次尝试的代码已经被我迭代掉了。
一开始肯定是使用第三方库来的舒服对吧。

点击查看图片

image

有cryptography库干嘛不用呢? 然后就是这样的:

image

第二次加密出错了,没错,A加密,B加密。。。B加密直接出错了。
问AI,AI说填充的问题,叫我改成NoPadding,然后我改了,发现没有NoPadding这个选项。

思考了一下,也对,填充满了以后,长度大于RSA自己能够加密的长度了,所以填充会造成问题。

自定义代码,第二次尝试

行吧,毕竟是特殊操作,RSA本身也不难,叫AI换一个做法,自己写一个RSA吧。

AI写出了一个比较教科书的RSA密钥生成、加密、解密。

然后我运行了一下,我cpu风扇转起来了。

一看,卡在大素数生成呢,AI想对接正常的rsa,1024位长度(其实都手下留情了,正常应该2048起步),结果用的素性检测居然是最朴素的暴力穷举。

我摇了摇头,叫AI改一下,别卡大素数生成了,有第三方库就用一下吧,替代掉这步骤,不寒碜。

image

然后ai给我弄出来的代码是这样的,乐死了,cryptography:不用我给的rsa密钥别扒拉,还从我身上拿一个p一个q调用两遍

行吧,毕竟是我告诉ai用第三方库节制一点,只用来生成大素数的。这部分代码就不改了。

然后一运行,几乎是一瞬间就生成出公私钥对了,然后运行,加解密正常。

截图就没有了,因为我不是一边写代码一边写文章的,代码已经到下一个阶段了。

然后尝试最重要的:

image

and 0是因为已经失败了。

解密失败,没什么好看的。

然后我在想,是不是长度问题?

不,长度是mod n了,所以数字大小是固定的。
n。。。。n。。。。
等会,Alice和Bob的n,是不一样的!
所以他们mod n,其实是mod n1 和mod n2!
于是我开始翻资料。

image

哥们,别搜密钥协商算法了(往下滑也都一样,没有讲rsa交换律的)

那咋回事,难道我是开创者吗?不对,我再换个搜法。

我搜"rsa 智力扑克"

image

这样就对了。

然后我就找到了这个博客

https://www.thecodeway.com/blog/2025/02/MentalPoker02.html

image

同模,同模,同模!!!

不是,这个扑克协议是老师教的,老师你嘴是真严啊,同模这么重要的东西直接划过去了。
这篇博客也是一样,同模这么重要的东西也是划过去了。
行,我知道论文都是怎么水出来的了。只要把最关键的、无法解决的步骤划一下过去,就没有困难的步骤了。

那问题来了,rsa如何生成两个密钥对,确保其n是相同的呢?

回到n的定义上来,
n = p * q
其中,p、q是随机大素数。

那么n就是随机大合数。

提前随机一个n,然后让Alice和Bob自己根据这个n生成pq?
那不就是大整数分解吗?
但是没有pq又如何生成ed?

算了,问问AI。

image

2和3是陷阱。对了,我想起来在讲同态加密的时候还拿了rsa做例子。
rsa需要同态加密生成,然后rsa可以进行同态加密
死循环呢?

1。。。。。。。。。。。。。。。。。。。。。。

我有点无语了。
这不还是需要“裁判”的参与吗。

总结

需要在【相同】的n生成【两对】公私钥,并且A和B【互相不知道对方的私钥】。
沉默,被阴了,又一次。

如果不知道上一次被阴的,可以去看我 https://www.cnblogs.com/timmoc/p/18633277 这篇文章

posted @ 2025-05-11 15:39  Timmoc  阅读(29)  评论(1)    收藏  举报