• 定义 :设p和q是两个大素数, 计算n = pq和Φ(n) = (p− 1)(q − 1). p, q, Φ(n)保密, n公开. 令P = C = ℤn,K = { (n, p, q, a, b) |1 < b < Φ(n), (b,Φ(n)) = 1, ab ≡1 (mod Φ n))}. 对每个K = (n, p, q, a, b) ∈ K, 以及任意x, y ∈ ℤn, 定义加密函数和相应的解密函数分别为:
• ek(x) = x^b mod n
• dk(y) = y^a mod n
• 这里公钥是n和b, 私钥是p ,q, a. 当明文x > n时, 可先将x分组,使得每一组都小于n,
然后分别对每一组加密.
• 下面将验证解密变换是加密变换的逆变换, 也即dk (ek(x)) = x
证明过程
• 现在的分解算法能够分解由512位二进制表示的整数, 为安全着想, 一般推荐p和q都为 比特的素数, 这样就是1024比特(相当位十进制数)的模数, 分解这样
长度的整数大大超出了现有的整数分解算法的能力.
• 注意到, RSA参数生成算法中的第一步中需要解决如何生成大的随机素数(比如512比特的素数). 在实际应用中,通常的做法是先生成随机整数, 然后利用测试等算法来检验它们的素性. 这个算法很快, 一个整数n可以在log2 n的多项式时间内检测其素性.
RSA参数生成
• 与生成随机素数相关的一个问题是, 我们需要检测多少特定长度的随机整数才能找到一个素数. 可知, 在1到n之间随机选取一个整数是素数的概率约为.
• 假设我们在RSA密码中考虑1024比特的模数n = pq,其中p和q都为512比特的素数.
因为一个随机512比特的整数是素数的概率约为1/ln2512 ≈ 1/355, 所以随机给定355个512比特的整数, 其中应该有一个是素数.当然如果把范围限定为奇数, 概率加倍, 约为2/355. 这表明我们能有效地生成可能为素数的大整数.
• 对RSA密码体制的个明显的攻击就是密码分析者试图分解n. 如果这点做到了, 那么便可以很简单地计算Φ(n) = (p − 1)(q − 1), 然后可以像Bob一样从b计算出解密指数a.
p&q选取不当分解N
• 攻击条件:当RSA中p和q选取不当时,我们也可以进行攻击。
• |p-q|很大:
• 当p-q很大时,一定存在某一个参数较小,这里我们假设为p,那么我们可以通过穷举的方法对模数进行试除,从而分解模数,得到保密参数与明文信息。基本来说,不怎么可行。
• |p-q|较小时
• 首先
模不互素
• 攻击原理:当存在两个公钥的N不互素时,我们显然可以直接对这两个数求最大公因数,然后直接获得p,q。进而获得相应的私钥。
• 攻击条件:当两个用户使用相同的模数 N、不同的私钥时,加密同一明文消息时
即存在共模攻击。
• 攻击原理• 密码分析者也可能既不分解n也不计算Φ(n), 而直接基于解密指数a进行攻击 . 可以证明, 如果解密指数a已知,那么n可以通过一个随机算法在多项式时间内分解, 这表明直接计算解密指数a并不比分解n容易. 当然, 这也告诉我们, 如果a被泄露(此时n可被很容易分解为p和q),那么Bob仅仅重新选取一个加密指数b是不够的(此时n不 变, 而其分解已知), 他必须选择一个新的模数n.
• 另外, Wiener提出了一种基于低解密指数的攻击方法,当**满足3a < n^0.25和q < p< 2q时, 这种方法可以成功地计算出解密指数a.
AES算法结构
• AES算法的轮变换中没有Feistel结构,轮变换是由三个不同的可逆致变换组成,称之为层:
• :确保多轮之上的高度扩散。
• :具有最优最差-情形非线性的S-盒的并行应用。
• :轮**简单地异或到中间状态上。
安全性分析
• 没有发现
• 能有效抵抗目前已知的攻击算法
• 没有发现
• 没有发现
one more thing:5.5布置的任务4天时间有点紧,所以代码任务未完成。格式排版有了进步,markdown的操作好了一些
相关文章: