即刻App年轻人的同好社区
下载
横竖弯钩_
72关注5被关注0夸夸
just 不想展示星座
横竖弯钩_
1月前
微信 看一看 怎么变成这样了 不会再点在看了反正也被湮没 感觉误入内容垃圾场深处
00
横竖弯钩_
1月前
没有一个周五我想好了周末要怎么过
00
横竖弯钩_
1月前
不带细节地学习总结:大数很难分解为两个数的乘积,通过n进制取个位方法 可以通过乘以两个数得到原本的数 但是由于可逆运算难以起到加密效果;通过欧拉定理 可以将n“加密”为外界未知的fai n,且已知n很难得到fai n,从而实现加密。

王建硕: 前不久 Jason 同学邀请复旦大学数学系的梅同学给希望了解 Web3 的朋友们上了 5 节硬核的数学课。从自然数开始,一直讲明白了 RSA 非对称式加密的细节。我再回顾一下,尝试解释这个其实还挺复杂的事儿。 (前方数学预警,但是我保证努力限制在小学数学知识范围以内) 大数无法分解 3 * 7 算出 21 容易吗?容易。反过来,21 是哪两个数的乘积?也不难,但肯定比算 3 * 7 麻烦。 同理 967 * 379 = 366493 容易。反过来,366493 是哪两个数乘积?难多了。 随着乘积的不断变大,算乘法的难度略微增大,算是这个数是由哪两个数相乘的难度陡峭的增加。 一个一百位数字的数和一百位数字的数相乘,手工算不容易,但对计算机来说不难,结果是一个大约两百位数字的数字。 反过来,把这个200 位的数字分解?基本上现在能想到的办法就是近似于一个一个的试。别说算乘法了,光从一数到 80 位的数字,按照现在的计算水平,就要消耗掉一个中等恒星一生的能量了。所以,简单结论是,超级大的数字做分解不可能。 就利用这个简单的原理,加上听起来故弄玄虚的欧拉定理,就是一个精妙绝伦的 RSA 加密算法。 n 进制取个位 这个东西的数学名称叫「取模」,就是算「一个数除以 n 以后的余数是几」。 不过我们不用这个名字。我自己发明的一个混杂了数学和计算机的概念,叫做 n 进制取个位。比如 n = 8,八进制下只取个位,超过的十、百、千位数就直接扔掉,那么 15 这个数本来八进制就是 17,只取个位,就是 7。所以,我们规定,15 在八进制个位模式下,就等于 7。同样,23,31 等,在 8进制取个位下,都等于 7。这个「等于」,不是绝对数字的相等,而是经过了 n 进制取个位,我们用 ≡ 表示这种特殊的等于(正规说法叫做“模 n 同余”,可以忽略)。 这样,如果 n 是 4 万公里的话,数字的世界变成像地球一样,是一个循环。在赤道上可以向东走 1 万公里,和向西走 3 万公里结果是一样的,甚至向西走 7 万,11 万,15 万公里的终点是一样的,就是一圈一圈的转就是了。所以4 万进制取个位, 1 万 ≡ -7 万 ≡ -11 万 ≡ -15 万。注意,毕竟走 7 万公里和走 11 万公里不相等( = ),但是在地球赤道上走,他们的效果相等 ( ≡ )。 例子:比如在 20 进制取个位下,3 * 7 的结果就是 1 (本来是 21,结果走过头了, 又绕回来,回到了 1 )。 连着乘两个数就是它本身 这有啥用呢?神奇的事情在于,在 20 进制取个位下,任何数乘以 3 再乘以 7,就相当于乘以 1,就是这个数本身! 比如 12 * 3 = 36 ;36 % 20 = 16; 16 * 7 = 112; 112 % 20 = 12 变回原来了。神奇吗? 在 20 进制取个位下,你把一个数乘以 3,我不用除以 3,而是继续乘以 7 ,就是原来那个数。不仅仅是 7,我把乘 3 的数字乘以 67,127,或者 187。。。。它都会回到原来那个数,只是转的圈数多了些。 这就使得,如果两个数在一个 n 进制取个位下乘积为 1,这两个数不就是一个很好的加密和解密的工具吗? 比如数字大一点,在366492 进制取个位下,任何数乘以 967 得到的数再乘以379,就是它本身。 公钥和密钥 如果我把 e = 967 当做公钥,d = 379 当做密钥,我只需要告诉别人( e = 967, n = 366492)这两个数字,别人乘积以后交给我,我再乘以 d ,然后。。。。 不过有一个小问题,如果给出了(e = 967, n = 366492)这两个数,别人除以 e 不就得到了我的秘钥 d 吗?毕竟,你可以算乘法,别人就可以算除法,而且难度差不多。我们把这个办法成为露馅儿加密法。 接下来要做的事情,就是想办法把这自己的密钥藏起来,让别人拿到 n 进制数,还有公钥 e,没有办法算出我的密钥,但是依然可以用 e 加密,我可以用私钥 d 解密不就好了? 欧拉定理 我们引入 φ(n) 。它的定义可厉害了,是「小于 n 的正整数中和 n 互质的数的个数」。这个定义忽略就好,只要知道,如果 n 是两个素数 p, q 的乘积的话, φ(n) = (p-1)(q-1)。 欧拉发现了一个惊天大秘密,居然在 n 进制取个位下,如果 m 和 n 互为质数,m 的 φ(n) 次方 居然等于 1: m ^ φ(n) ≡ 1 两边都取 k 次方: m ^ (k * φ(n)) ≡ 1 两边都乘以 m : m ^ (k * φ(n) + 1) ≡ m k * φ(n) + 1 是啥意思?就是这是一个「除以 φ(n) 余数为 1 」的数字。也就是说,只要找到 e*d 这两个数,使得他们的乘积除以 φ(n) 余数为 1 就好。这个好找,有一个叫做辗转相除法的方法,不过这里先略过。我们一般常常把 e 固定的设为 65537,然后就可以找到一个满足的 d。 最后,也就是最惊艳的一步,如果我们能够找到这样的e, d,我们把 e 和 n 告诉整个世界,让他们在 n 进制取个位下,把要加密的数字 m 取 e 次方发给我,我对这个数再进行 d 次方,我就能得到 m。 (m ^ e) ^ d ≡ m 重新梳理 到现在大家应该已经无一例外的晕厥了。这很正常。我们再理一下就清楚了。 就是说,如果我能无论用什么方法,找到一个进制 n,在这个 n 进制取个位下,能够找到两个数字 e 和 d,e 公开给整个世界,d 留给自己,同时还能让任何数字 m 的 e 次方的 d 次方还等于原来这个 m,加密解密算法不就成立了吗?就跟最早我说的那个乘以一个数,再乘以另一个数,总等于原来的数字一样? 但露馅儿加密法两个乘法的算法的明显的漏洞在于,e 和 n 给出了,d 也就给出了。 在这个新的算法中,e 给出了。n 给出了,但 e * d ≡ 1 的进制,不是简单地 n,而是和 n 同源,但是不同的 φ(n) 。正因为进制改了,所以也不能用露馅儿加密法里面的两次乘法,而借用欧拉的惊天发现,做了两次幂运算。 从 n 能不能算出来 φ(n) 呢?如果有能力分解 n 当然 φ(n) 唾手可得,把两个因子各自减一再乘起来就好。 但是从 n 能不能轻易地找到 p 和 q 呢?根据最早的大数不可分解,要想找到 100 个太阳烧掉都不够用,p 和 q 好像是脚手架,算出来 n,算出来 φ(n) 就扔掉了。 那么 φ(n) 就是一个秘密。如果 φ(n) 是个秘密,有了 e 也找不到 d。 所以,整个算法是无比精巧的安全。 举例子 我们找两个脚手架数字:p = 2, q = 7,算出 n = 2 * 7 = 14, φ(n) = (2 - 1) * (7 - 1) = 6 。那两个脚手架数字 p, q 在算出 n 和 φ(n) 后就退休了。找在 6 进制取个位下,e * d ≡ 1 好办,e = 5, d = 11 就行 ( 5 * 11 = 55 = 6 * 9 + 1 ≡ 1)。 这样,公布给全世界的数字就是 (e = 5, n = 14),保留给自己的就是 d = 11。φ(n) 千万也不能告诉任何人。φ(n) 就如同总统,n 如同他的影子。世界只能看到他的影子,看不到总统本人。好在影子在世间行走不怕暗杀,总统躲在防空洞里是安全的。 我们来试一下,在 14 进制个位模式下,如果要传递的数字 m = 2,别人把 m ^ e 算出来,就是 2 ^ 5 = 32 = 2 * 14 + 4 ≡ 4 现在,4 就可以大大咧咧的在互联网上随便传输了。只有我知道有一个秘密是 11 。我拿到以后,算 4 的 11 次方,4 ^ 11 ≡ 4,194,304 % 14 ≡ 2 ,不就是别人要给我的那个数字吗?前提是,我们认为 别人从 n = 14 无法分解成 2 * 7,否则就全露馅了。 14 肉眼可以看出等于 2 * 7。 这个数 n: 8244510028552846134424811607219563842568185165403993284663167926323062664016599954791570992777758342053528270976182274842613932440401371500161580348160559 是 p 91119631364788082429447973540947485602743197897334544190979096251936625222447 乘以 q 90480063462359689383464046547151387793654963394705182576062449707683914045697 计算机眼也看不出来。 p 和 q 如同两位门神,死死的守住了获取它们后面的秘密的入口。但是从 p,q 算出 φ(n) ,以及e,d,却都是举手之劳。 如果知道 n 的组成是 p,q,我们按照上面的算法可以选出来 e 和 d: 65537 2545549238258797954286678713888152865623498585866759298032549597771444725977268190722532488574321463855938811396613702406984581214587037347197409962813953 也就是说,这个游戏,任何人要把一个数字 m 传给我,只需要在 n 进制取个位下,对它进行 65537 次幂(m ^ 65537),我再把它进行 d 次幂,我就拿回了原来的数字。 这个精巧的算法,就是 RSA 加密算法。 希望有人能够看明白。我真的是尽力了。

00
横竖弯钩_
1月前
感觉故事从自己身上脱线 创意和浪漫开始与我无关
我要找回来找回来
那些不彻底的事
和透彻的感受
00
横竖弯钩_
1月前
今年夏天怎么能这么热
蓬松的头发 骑车几分钟到公司 变成贴头皮
被迫几乎天天洗头 依然在白天照到镜子时深感无奈
洗完澡 不立刻快速擦干穿衣 水珠就会变成汗珠
00
横竖弯钩_
2月前
#直觉 可能是我的一个自带技能?
我确定自己在数学or逻辑上是有直觉在的 第一感觉不对的东西就是有不对劲的地方 一定一定要珍视自己的直觉 把困惑奇怪的都表达出来。尝试去表达 也是探索解惑的过程 也是验证直觉的过程。
00
横竖弯钩_
2月前
这个数字花园真的相当完备 我也正在尝试着建造自己的 并从中感到安定
但也想提醒自己 不要沉浸于打理自己的数字花园 有很多东西无法数字化 需要面对面 需要常常一起聊天 需要看见听见闻到和记忆 不要忽略啦

朴禅郑仁: 一个完美的数字花园(digital garden) 【帮助】 + moc(数字花园的索引地图) + tag(数字花园的标签云) + search(数字花园的搜索入口) + guide(数字花园的使用指南) + link(数字花园的友情链接) + changelog(数字花园的更新日志) 【工具】 + website(个人常用网站导航) + rss(网络阅读的订阅源) + news(由几个网站新闻汇总的每日新闻简报) + reading(书单/书摘/书评) + movie(影单/台词/影评) + music(歌单) + tool(工具清单/工具指南) + skill(技能清单) + wishlist(好物清单) + food(菜谱) + file(自建的常用资料网盘) + talk(聊天记录) + email(邮件备份) 【知识】 + idea(无法归类的碎碎念,按日期和编号依次记) + wiki(卡片为本体,标题/时间戳/目录树/标签/链接构建的个人知识库) + howto(自己常做事情的方法与流程) 【行动】 + okr(目标管理) + project(项目管理:做过/在做/要做) + task(任务管理) + calendar(落到每一天的日程) + journal(日记) + money(收支记录) + review(周总结/月总结/年总结) 【关系】 + family(为家里每个人建立一份个人档案) + friend(为每个好朋友建一份个人档案) + team(为团队每个成员建一份个人档案) 【个人】 + history(个人自传) + resume(个人履历) + photo(照片集与照片故事) + service(个人可以提供的服务清单与案例) + contact(联系方式) 【作品】 + blog(发长文的独立博客) + newsletter(每周好文推荐+摘录+思考) + book(个人所写的纸质书/电子书) + podcast(个人所做的播客节目) + vlog(个人所做的视频节目) + github(个人所写的代码)

00
横竖弯钩_
3月前
我的笑点be like
00
横竖弯钩_
3月前
今年过去一半了诶。
2022好像是我过过最魔幻的一年了吧。
00