公钥密码的缺点:
1.处理速度远远低于对称密码
2.难以抵御中间人攻击
混合密码系统-用对称密码提高速度,用公钥密码保护会话密钥
角色:小A和小B
1.小A和小B先进行一次公钥密码流程,这个时候小B拥有小A的公钥
2.小B生成对称加密密钥D
3.小B将要发送的消息使用密钥D加密
4.小B使用小A的公钥对密钥D加密,将加密后的密钥D和消息一起发送
密码技术的组合:
数字签名:有单向散列函数和公钥密码组合而成
证书:是有公钥和数字签名组合而成的
生日攻击(birthday attack):找到散列值相同的两条消息
生日攻击推理:
N个人,如果要至少有两个人生日一样的概率大于二分之一,N至少是多少?(排除2.29)
第一个人的生日可以是365-1+1=365天任意一天,第二个人的生日是365-2+1=364,可得第N个人365-N+1
所有人可选的生日数量相乘可以得到不一样的组合的数量,即:
公式S = 365*364*......*(365-N+1)
所有情况的数量为:
365*365*.....*365 即:365^N
因此:概率为1-S/(365^n),N=23时,约等于0.507297,这就大于二分之一了,这证明了任意两个生日相同的概率比我们想象中的要打多了,这个现象称为生日悖论
假设一年有Y天,N人集合中至少有两个人生日一样的概率大于二分之一是,N至少的多少?
结论:N 约等于 Y的平方根 (当Y足够大时)
操作:
1.生成N个 内容是 "给你100万"的文件
2.生成N个内容是 "给你1个亿"的文件
当然,上述生成的内容是肉眼可见的内容,实际上每个文件的哈希值是不一样的,比如加一个空格等等操作,都能改变文件的哈希值
现在假设单项散列函数的长度为M比特,M比特所产生的所有散列个数为2^m个,根据上述结论,可得:
N 约等于 2^m的平方根,即 2^(m/2)
当N = 2^(m/2)的时候,生日攻击就会有二分之一的概率可以成功
如果M = 160, 能容易计算出N = 280次,可见,生日攻击所需要的次数很少