整数分解难题
给定任意正整数 n n n,求解 n = p q n=pq n=pq中的 p 、 q p、q p、q是困难的。
离散对数问题
给定 p p p阶( p p p为一个大素数)有限循环群 G G G, g g g为 G G G上的一个生成元,已知 x ∈ Z p ∗ x\in Z_p^* x∈Zp∗,求解 y = g x m o d p y=g^xmod p y=gxmodp是容易的,若已知 y ∈ Z p ∗ y\in Z_p^* y∈Zp∗,求解 y = g x m o d p y=g^xmod p y=gxmodp中的 x x x是困难的。
判定n阶剩余类难题(DCR)
n = p q n=pq n=pq( p 、 q p、q p、q为大素数),整数 z z z如果被称为模 n 2 n^2 n2的 n n n阶剩余类,那么存在整数 y ∈ z n 2 ∗ y\in z_{n^2}^* y∈zn2∗,使得 z = y n m o d n 2 z=y^nmodn^2 z=ynmodn2。判定给定整数 z z z是不是模 n 2 n^2 n2的 n n n阶剩余类是困难的。
近似最大公因子难题
给定随机一组素数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots,x_n x1,x2,⋯,xn,每一个整数 x i x_i xi都接近于它们的近似公因子 p p p(其中 p p p为素数),寻找近似公因子 p p p是困难的。
离散子集求和难题
给定整数集合 S = { x 1 , x 2 , ⋯ , x n } S=\{x_1,x_2,\cdots,x_n\} S={x1,x2,⋯,xn}和另一个整数 x x x,当 n n n很大时,寻找 S S S中一个非空子集 T T T,满足 T T T中元素之和等于 x x x是困难的。
注1:困难通常指其算法有指数时间复杂度
注2:很多初学密码学的同学会存在一个疑惑,就是关于时间复杂度的问题,以整数分解问题为例进行介绍。假定对算法不进行任何优化,即乘法算法时间复杂度为 O ( n 2 ) O(n^2) O(n2),每个变量都从1遍历到n,也就是遍历了n次,两个变量遍历完时间复杂度为 O ( n 2 ) O(n^2) O(n2),总体时间复杂度为 O ( n 4 ) O(n^4) O(n4),这明明是多项式时间的复杂度啊,这个问题来自于我们此处认为的 n n n是数值的大小,而在密码学中的度量单位是bit, 也就是输入数据的二进制表达的长度,此时若 n = 2 k n=2^k n=2k,则时间复杂度为 O ( 2 4 k ) O(2^{4k}) O(24k),显然是指数的时间复杂度。