1 99:59:59,999 --> 99:59:59,999 单向函数的强度取决于反向过程所需要的时间 2 99:59:59,999 --> 99:59:59,999 即便是借助地球上最强大的计算机 3 99:59:59,999 --> 99:59:59,999 要遍历所有可能情况也需要上千年时间 4 99:59:59,999 --> 99:59:59,999 那么想解密是不切实际的 5 00:00:01,646 --> 00:00:05,725 我们需要一种朝一方向易朝反方向难的数值过程 6 00:00:05,725 --> 00:00:07,791 我们需要一种朝一方向易朝反方向难的数值过程 7 00:00:07,791 --> 00:00:12,689 于是我们找到了模算术 它也叫作时钟算术 8 00:00:12,689 --> 00:00:20,120 比如 要求46除以12的余数 9 00:00:20,120 --> 00:00:24,510 我们可以取一根长46单位的绳子 10 00:00:24,510 --> 00:00:28,325 将其缠绕在12单位的时钟周围 12也就是模数 11 00:00:28,325 --> 00:00:32,877 绳子终止的地方也就是答案 12 00:00:32,877 --> 00:00:39,438 因此记作46 mod 12 ≡ 10 13 00:00:39,438 --> 00:00:44,194 很简单 14 00:00:44,194 --> 00:00:48,509 下面 我们考虑用质数做模数 比如17 15 00:00:48,509 --> 00:00:52,742 我们找到17的一个原根 这里也就是3 16 00:00:52,742 --> 00:01:00,102 它具有如下重要性质 取不同幂次时 17 00:01:00,102 --> 00:01:05,510 结果会在时钟上均匀分布 18 00:01:05,510 --> 00:01:08,858 3是一个生成元 19 00:01:08,858 --> 00:01:14,038 取3的x次方 20 00:01:14,038 --> 00:01:17,736 结果等可能地出现在0和17中间任何整数上 21 00:01:17,736 --> 00:01:20,424 但相反的过程就难了 22 00:01:20,424 --> 00:01:23,690 比如 给定12 要求这是3的多少次方 23 00:01:23,690 --> 00:01:30,223 这被称为离散对数问题 24 00:01:30,223 --> 00:01:32,612 这样我们就有了单向函数 25 00:01:32,612 --> 00:01:39,073 一个方向很容易 但反向就很难了 26 00:01:39,073 --> 00:01:42,086 已知12 我们只能采用试错法 求出匹配的指数 27 00:01:42,086 --> 00:01:47,315 这有多难呢 28 00:01:47,315 --> 00:01:49,751 如果数字很小 这还很容易 29 00:01:49,751 --> 00:01:53,751 但模数若是长达数百位的质数