一、对称密码算法存在的问题
1、密钥必须安全的分配。
密钥的价值要大于消息的价值,因为知道了密钥就意味着知道了所有消息。
2、密钥泄露。
如果密钥被泄露(被偷窃、猜测、逼迫、受贿等),窃听者就可以用该密钥去解密所传达的消息,当然也可以伪装成发送方,给接收方发送消息。
3、密钥数量问题。
若每个用户使用不同的密钥,当用户量很大的时候,用户密钥会随着用户的增加迅速增加,n个用户的网络需要n*(n-1)/2个密钥。
二、单向散列函数
散列函数是公开的,对处理过程不用保密,单向散列函数的安全性就是它的单向性。
三、消息认证码
消息认证码(Message authentication code MAC)也叫数据鉴别码,它是带有密钥的单向散列函数,散列值是预映射的值和密钥的函数,这在理论上和单向散列函数一样,只有拥有密钥的人才能验证散列值。
四、公开密钥体系
1、简介
公开密钥体系包含两个密钥,一个公开的,简称公钥;一个私有的,简称私钥。持有公钥的任何人都可以加密消息。但是只有持有私钥的人才能解密。
2、解决了什么问题
①公钥体系解决了对称加密体系的密钥配送问题。
在实际的操作过程中,接收方需要将加密的公钥传递给消息的发送方,但是私钥却自己保存,消息的发送方将拿到的公钥加密数据,然后把密文信息发送给消息接收方,消息接收方收到消息后用自己的私钥解密数据即可。这样私钥就不会出现在除接收方以外的人手里,这样就保证密钥的安全性。
②解决了密钥管理问题。
把公钥体系用于密钥分配,解决了对重要的密钥管理问题。(消息的接收者将公钥发送给消息的发送者,消息的发送者产生随机会话密钥,用会话密钥加密要发送的消息,然后用收到的公钥加密这个随机会话密钥,然后将随机密钥密文和消息密文一起发送给消息的接收者)
3、有什么缺点
①公钥算法的效率很低,不适合用于加密大数据。(对称算法一般比公开密钥算法快1k倍)
一般情况下,我们都是使用对称密码算法加密数据,然后使用公钥算法加密对称密码的密钥。然后将数据密文和密钥密文一起发送给消息的接收方。
②公钥算法对选择明文攻击是脆弱的。
因为公钥是公开的,当攻击者知道明文的可能值的时候,他只需加密这几个可能的明文值,然后与结果比较即可。这样虽然他不能拿到私钥,但是他却可以确定明文信息。
五、数字签名
1、数字签名是什么?
签名理想情况下是可信的、不可伪造的、不可重用的、不可抵赖的、文件的内容是不可改变的。
数字签名(又称公公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。(来自百度百科)
简单来说,私钥拥有者使用私钥对文件加密,就得到了文件的数字签名。(在实际操作中,消息的发送者对消息进行签名,然后将签名值发送给消息的接收者,消息的接收者使用发送者的公钥验证签名-----注意,这块与公钥加解密刚好相反,即加解密时公钥解密,私钥解密;数字签名时私钥签名,公钥验签。在这个过程中,只要接收者的共有确定是发送者给的,那么一定可以验签成功,即这个数字签名是有效的)
实际过程中,采用公钥体系对数据进行数字签名的效率非常低,为了节约时间,数字签名通常与单向散列函数一起使用。即消息的发送者将消息先做散列,将散列值用私钥签名,然后将消息和散列值一起发送给接收者,接收者用同样的散列函数对消息做散列,然后对新的散列值进行签名,将签名结果与发送者发送的签名值进行比较,如果相等代表验签通过,否则验签失败。
2、多重签名-------一般采用单向散列值进行多重签名
①如果两个人想要对同一个文件进行签名,但是不使用单向散列函数时,可以让A先签名,然后B对A的签名值进行再次签名,接收者收到签名值之后,需要先验证B的签名,然后在验证A的签名;
②使用单向散列函数时,A和B同时对文件的散列值进行签名,然后B把签名值发送给A,A将文件、自己的散列签名值、B发送过来的散列签名值一起发送给接收者,接收者只需验证A或B中的一个签名值即可。
六、带加密的数字签名
1、什么是带加密的数字签名?
通过把公钥体系和数字签名技结合起来,就能把数字签名的真实性和加解密技术的机密性结合起来,形成带加密的数字签名。
2、带加密的数字签名的步骤
①A用自己的私钥对消息进行签名-----加密前签名更安全;
②A用B的公钥对消息和签名信息进行加密,然后将加密结果发送给B;
③B用自己的私钥对消息进行解密;
④B用A的公钥对消息进行验签。
注意:加解密的密钥对和签名验签的密钥对不能是同一个。
七、随机与伪随机序列
编译器中的随机数生成器对密码学上来说几乎肯定是厌的,甚至可能不是很随机的。
1、伪随机序列
最好的计算机能产生的是伪随机序列产生器。
2、密码学意义上安全的伪随机序列
密码学的随机性不仅仅是统计的随机性,还需要它是一个不可预测的随机序列,即:即使给出产生修理店算法或硬件和所有以前产生的位序列的全部信息,也不可能通过计算来预测下一个随机位时什么。
3、真正的随机序列
在量子力学中,存在随机序列;但是在计算机芯片和有限状态机中,很少能保持序列的随机性。
真正的随机序列他需要满足“随机序列不能重复产生”这一性质,即:如果两个相同的输入作用于随机序列发生器,将得到两个不相关的随机序列。