【系统架构设计】安全性和保密性设计(一)
- 前言
- 加密和解密
- 数字签名和数字信封
- 数字证书和密钥管理
-
- [公钥加密算法的密钥分配、对称密钥加密算法的密钥分配 区分](#公钥加密算法的密钥分配、对称密钥加密算法的密钥分配 区分)
- 数字证书和密钥管理
前言
信息安全,具体地说就是保证信息的保密性、完整性、真实性、占有性。其中,真实性是指对信息的发送者身份的确认或系统中有关主体的身份确认,这样可以保证信息的可信度,可以通过数字签名、公钥加密等方式来实现;占有性是指要保护信息赖以存储的节点、介质、载体等不被盗用或窃取。
加密和解密
在加密和解密的过程中,如果采用的加密密钥与解密密钥相同,或者从一个很容易计算出另一个,则这种方法叫作对称密钥密码体制,也叫作单钥密码体制 。反之,如果加密和解密的密钥并不相同,或者从一个很难计算出另外一个,就叫作不对称密钥密码系统或者公开密钥密码体制,也叫作双钥密码体制。
在之前的博文中,其实也有介绍过加密和解密的使用,其中如果想要实现非对称加密RSA,可以参考【QT】windows下OpenSSL的使用,RSA加解密 ;如果要实现对称加密AES,可以参考 【工具类】JAVA (Android Studio )+ JS 加密解密 AES + Base 64,其中都对加密解密进行类封装,提供了实例,有需要可以直接进行下载使用。
数字签名和数字信封
ps:这里一定要注意,公钥:用于加密信息和验证数字签名;私钥:用于解密信息和创建数字签名 。尤其是数字签名部分,公钥是验证,私钥才是创建。
散列函数
在介绍数字签名和数字水印前,得先介绍散列函数 。散列函数是一种公开的数学函数。散列函数运算的输入信息也可叫作报文 。散列函数运算后所得到的结果叫作散列码 或者叫作消息摘要。散列函数具有如下一些特点:
- 不同内容的报文具有不同的散列码,而一旦原始报文有任何改变,哪怕改变一位信息,则通过散列函数计算后得到的散列码也将完全不同。这样,这个散列码就好比是这个报文所特有的"指纹"。
- 散列函数是单向的,即求解某一个报文的散列码非常容易,但是根据散列码来倒推原始报文是非常困难的。
- 对于任何一个报文,无法预知它的散列码。
- 散列码具有固定的长度,不管原始报文的长度如何,通过散列函数运算后的散列码都具有一样的长度。
由于散列函数具有这些特征,因此散列函数可以用来检测报文的可靠性。接收者对收到的报文用与发送者相同的散列函数进行运算,如果得到与发送者相同的散列码,则可以认为报文没有被篡改,否则,报文就是不可信的。常见的散列函数有 MD5、SHA、HMAC 等。
数字签名
对于计算机系统中传送、存储的重要文件、数据、信息等,一般需要有某种方式来确认其真实性,即接收者能够确认自己得到的信息确实是由该信息所声称的发送者发出的 ,而不是由非法入侵者伪造、冒充发出的,并且还要能够保证信息在传送、存储中没有被恶意篡改 ,这样这份信息才能真实地反映发送方的意图。另外,对于发送方来说,如果发出一份信息,还必须有一定的措施阻止其否认自己发出信息的行为,即不可否认性。
针对以上三点,产生了数字签名技术。数字签名主要由两个算法组成:签名算法和验证算法 。通过使用签名算法签名一个消息,所得到的签名能够通过一个验证算法来验证签名的真实性和有效性。目前已经有大量的数字签名算法,如RSA等,但是仅仅使用公钥加密算法进行数字签名的运算量比较大,尤其是要传送的信息量比较大时,速度会更加慢 。因此不建议直接用加密技术,可以选用散列算法结合起来使用。以RSA 结合 MD5 数字签名为例,主要过程是:
信息的发送方通过对信息进行散列运算生成一个消息摘要 ,接着发送方用自己的私钥对这个消息摘要进行加密 ,就形成发送方的数字签名 。然后,把这个数字签名作为信息的附件和信息一起发送给信息的接收方。接收方收到信息后,首先对收到的信息进行与发送者相同的散列运算得到一个消息摘要 ,接着再用发送方的公钥来对信息中附加的数字签名进行解密 得到发送方计算出的散列码。如果两个散列码相同,那么接收方就能确认该信息和数字签名是由发送方发出的。通过数字签名能够实现对原始信息完整性的鉴别和发送方发送信息的不可抵赖性。
数字信封
在数字信封中,信息发送方采用对称密钥来加密信息内容 ,然后将此对称密钥用接收方的公开密钥来加密 (这部分称数字信封 )。之后将它和加密后的信息一起发送给接收方。接收方先用相应的私有密钥打开数字信封 ,得到对称密钥,然后使用对称密钥解开加密信息。这种技术的安全性相当高。
数字证书和密钥管理
公钥加密算法的密钥分配、对称密钥加密算法的密钥分配 区分
在对称密钥加密体制中,要求将密钥从一方传送到另一方,并且保证只有通信的双方知道密钥,而不让其他任何一方知道密钥。
而在公钥加密体制中,则要求通信各方的私钥只有通信的一方知道 ,而其他任何一方都不能知道,同时每一方的公钥需要公开,其他任何一方都可以查看和提取。
在公钥加密体制中,私钥的分配相对容易,但是,公钥的发布和获取就需要采取合适的方法来进行,否则很容易留下安全漏洞。如任何一个非法入侵者冒充是通信系统中的一方,向这个通信系统中公布一个冒充的公钥,此后系统中与该用户的通信实际上就是与该非法冒充者进行通信。同时,由于数字签名和公钥加密都是基于不对称加密技术,因此也存在这样的问题。
数字证书和密钥管理
基于以上的问题,需要用到数字证书和密钥管理。数字证书主要关注于公钥与用户之间的对应关系建立及身份验证,而密钥管理则侧重于密钥的生成、存储、分发和使用等全过程的管理,两者共同构成了PKI(Public Key Infrastructure,公开密钥基础设施)的核心组成部分,为信息安全提供重要保障,从而解决以上问题。