casyup.me@outlook.com

0%

read/writeNotes

写好笔记不是一件容易的事情

想想距离上一篇笔记. 我已经咕了一个月了.

已经渐渐丧失当初写笔记的热情了… 期间也看了很多其他人写的笔记(有些写得真的好👌). 也越发体会到要写好. 写得至少之后自己能看懂. 写全面. 是很不容易的一件事情. 首先你得需要对笔记中的东西知根知底. 其次要组织语言. 排版. 最好应用表格和动态图片解释. …

但是! 在下并不是说自己不写了!

只是. 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, 图中显示为 …

  1. 双方彼此将公有信息和私有信息混合. 记为:

    Alice: a + p = ap;

    Bob: b + p = bp;

  2. 彼此交换混合后的结果.

    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 如何同步文件). 真的并不是那么简单可以写个笔记描述的.

当想写的东西太多, 太杂. 最后感觉太累, 写下来的反而比不如之前理解得深的还要少. 这种感觉. 有那么点痛苦 = =.

(突然想那个哲学: 山是山. 山非山. 山亦山. 难道说我已经在往第二步前进了么ヽ(✿゚▽゚)ノ)