9:59:59.000,9:59:59.000 单向函数的强度取决于反向过程所需要的时间 9:59:59.000,9:59:59.000 即便是借助地球上最强大的计算机 9:59:59.000,9:59:59.000 要遍历所有可能情况也需要上千年时间 9:59:59.000,9:59:59.000 那么想解密是不切实际的 0:00:01.646,0:00:05.725 我们需要一种朝一方向易朝反方向难的数值过程 0:00:05.725,0:00:07.791 我们需要一种朝一方向易朝反方向难的数值过程 0:00:07.791,0:00:12.689 于是我们找到了模算术 它也叫作时钟算术 0:00:12.689,0:00:20.120 比如 要求46除以12的余数 0:00:20.120,0:00:24.510 我们可以取一根长46单位的绳子 0:00:24.510,0:00:28.325 将其缠绕在12单位的时钟周围 12也就是模数 0:00:28.325,0:00:32.877 绳子终止的地方也就是答案 0:00:32.877,0:00:39.438 因此记作46 mod 12 ≡ 10 0:00:39.438,0:00:44.194 很简单 0:00:44.194,0:00:48.509 下面 我们考虑用质数做模数 比如17 0:00:48.509,0:00:52.742 我们找到17的一个原根 这里也就是3 0:00:52.742,0:01:00.102 它具有如下重要性质 取不同幂次时 0:01:00.102,0:01:05.510 结果会在时钟上均匀分布 0:01:05.510,0:01:08.858 3是一个生成元 0:01:08.858,0:01:14.038 取3的x次方 0:01:14.038,0:01:17.736 结果等可能地出现在0和17中间任何整数上 0:01:17.736,0:01:20.424 但相反的过程就难了 0:01:20.424,0:01:23.690 比如 给定12 要求这是3的多少次方 0:01:23.690,0:01:30.223 这被称为离散对数问题 0:01:30.223,0:01:32.612 这样我们就有了单向函数 0:01:32.612,0:01:39.073 一个方向很容易 但反向就很难了 0:01:39.073,0:01:42.086 已知12 我们只能采用试错法 求出匹配的指数 0:01:42.086,0:01:47.315 这有多难呢 0:01:47.315,0:01:49.751 如果数字很小 这还很容易 0:01:49.751,0:01:53.751 但模数若是长达数百位的质数