写好笔记不是一件容易的事情
想想距离上一篇笔记. 我已经咕了一个月了.
已经渐渐丧失当初写笔记的热情了… 期间也看了很多其他人写的笔记(有些写得真的好👌). 也越发体会到要写好. 写得至少之后自己能看懂. 写全面. 是很不容易的一件事情. 首先你得需要对笔记中的东西知根知底. 其次要组织语言. 排版. 最好应用表格和动态图片解释. …
但是! 在下并不是说自己不写了!
只是. emm… 吐槽一下…
言归正传, 今天带来的对于 diffie-hellman key exchange 算法的讨论(那是真的头疼 = =)
diffile-hellman
最初了解这个(emm… 怎么说呢? 机制? 原理?)的时候. 是我打算理解一下 ssh 是如何运作 的. 然后就挖出了 diffie-hellman. (这还好. 主要是之后挖出的 ECC(elliptic-curve cryptography)才让我头秃…)
拿 wiki 上的一个案例来理解.
场景为 ssh 中协商对称密钥时. 假设 Alice(A) 和 Bob(B) 为客户端/服务器. 黄色部分为彼此已协商好的. 公开的信息. 记为 p (public). 其中 A 的私密信息为 a. 图中显示为橙色. B 的私密信息为 b, 图中显示为 …
双方彼此将公有信息和私有信息混合. 记为:
Alice: a + p = ap;
Bob: b + p = bp;
彼此交换混合后的结果.
Alice: bp + a = bpa = abp;
Bob: ap + b = apb = abp;
最后混合后的结果为双方的对称密钥. 核心的关键在于 ‘+’ 算法.
primitive root modulo n
其中一种比较简单的做法为:
这个做法的原理是 primitive root modulo n
还是拿 wiki 上的例子距离.
3的1次方 = 3 : mod 7 = 4; 3的1次方 = 3的0次方 x 3 = 1 x 3 = 3 : mod 7 = 3
3的2次方 = 9 : mod 7 = 2; 3的2次方 = 3的1次方 x 3 = 3 x 3 = 9 : mod 7 = 2
3的3次方 = 27: mod 7 = 6; 3的3次方 = 3的2次方 x 3 = 2 x 3 = 6 : mod 7 = 6
从第三次遍历时已经可以发现规律了. 其结果可以解释为:
(g 的 a 次方 mod p)的 b 次方 mod p = (g 的 b 次方 mod p)的 a 次方 mod p
其中 a, b 为 Alice 和 Bob 的私有变量. 在不传递其的情况下, 完成了对称密钥的协商.
elliptic curve
这是一种相对更难解释的函数. 所幸我找到了一篇非常不错的 讲解 (跪谢作者! Orz)
summary
所以… 不是我懒啊… 是真的. 写一篇至少自己满意的笔记. 越来越难了… (或许这意味着在下成长了! (●ˇ∀ˇ●) )
elliptic curve 中我贴出的讲解. 带动图. 带案例. wiki 中的讲解非常专业(就是哪些公式绕得脑壳疼…). 那我费劲写些没人看的三脚猫干嘛呢?
而这次的笔记仅仅是我在理解 ssh 时的其中一部分. ssh 中我非常感兴趣的非对称密钥(为什么可以私钥转公钥. 但不能反过来? 私钥如何解密公钥加密的数据? …)还未写.
还有一些在下最近在看的东西(比如 rsync 如何同步文件). 真的并不是那么简单可以写个笔记描述的.
当想写的东西太多, 太杂. 最后感觉太累, 写下来的反而比不如之前理解得深的还要少. 这种感觉. 有那么点痛苦 = =.
(突然想那个哲学: 山是山. 山非山. 山亦山. 难道说我已经在往第二步前进了么ヽ(✿゚▽゚)ノ)