数据加密解密初探

在一次网络通信或者是进程通信中,如果传输数据采用明文的方式,那么很容易被第三方"窃听"到,安全性难以保障。

而所谓加密是让数据从明文变成密文,传输过程中是密文,传送过去之后对方接收到的也是密文。——可以理解为密文就是乱码,看不出内在的任何意义,通常也都是逐位对应的。

在接收方接收到密文之后只有把它还原为原来的样子才可以理解对方说的具体是什么,此过程就叫做解密。

所谓系统的安全要实现的目标应该包括:机密性-confidentiality,完整性-integrity 和可用性-availability;在通信中威胁到上述三者的攻击行为分别有:

1.威胁机密性的攻击行为:窃听、嗅探、扫描、通信量分析

2.威胁完整性的攻击行为:更改、伪装、重放、否认

3.威胁可用性的攻击行为: 拒绝服务(DoS)

针对各种威胁安全性攻击行为,我们分别从技术层面和服务层面出发,有不同的解决方案。

技术:数据的加密和解密;服务:安全服务;

今天来初探Linux世界里的加密和解密是怎么一回事;

加密需要两个东西,算法+密钥;

加密的算法分为四类:

  1. 对称加密算法-通俗的说就是 用什么密钥加密就用同一个密钥进行解密;

    其优势所在就是加密速度较快;但劣势也非常明显:

    对称加密无法保证完整性。被截获了,随破解不出来里面的密文是什么,但是,截获者插入一些字符篡改内容,再发送给接收者;接收者在接收到被篡改的密文以后,解密出来,发现内容似乎没有什么意义,此时,怎样确定此密文就是自己信任的对方发送过来的呢?所以完整性是无法得到保证的。

    这种算法的主流算法有:DES,AES,3DES等等;

  2. 公钥加密算法-采用公钥加密,私钥解密;

    公钥加密也叫做非对称加密,加密解密采用同一组的公钥和私钥。

    先来解释一下什么是公钥私钥:

    私钥(seceret key|private key):是通过特定的工具创建生成;由使用者自己留存。务必保证其私密性;

    公钥(public key):从私钥中提取生成,可以公开给所有人使用;

    这种方式加密的数据安全等级高,代价就是密钥很长,从512位、768位、1024位、2048位、4096位、8192位不等;由此也对系统的性能提出了更高的要求,例如此种加密技术的RSA的发展似乎遇到了瓶颈。因此,很少用公钥加密算法来加密大批量的数据;

  3. 单项加密算法 - 提取数据特征码,只能由明文计算出密文,也就是只可加密不能解密;

    因此此种算法的功能就是保证数据的完整性,防止被篡改;

    常见的算法:md5、SHA1(安全hash算法)、SHA2、SHA256、SHA512、SHA3(目前最新的)

  4. 密钥加密算法-IKE

所谓IKE:

1、IPsec使用IKE来完成对等体之间的认证和密钥的生成以及交换

2、协商和维护安全关联(SA)参数

3、SA是一个集合,包含了加密算法,认证方式等等

4、通过认证,防止伪装攻击

5、自动产生密钥,并自动更新密钥

6、动态,安全的交换密钥

在实际应用里,通信双方数据加密进行以下步骤:

1.通信双方互相交换证书,并到信任的CA进行证书验证;

2.发送方使用某种对称加密算法对数据进行加密;对加密后的数据使用单向加密,计算其特征值;发送方再用自己的私钥加密此特征值,以证明数据来源的可靠;发送方使用接收方的证书加密对称密钥;

3.接收方在收到数据后,先使用自己的私钥解密对此密钥;然后使用发送方的公钥特征值,再利用相同的单向加密算法;

不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。

(1)窃听风险(eavesdropping):第三方可以获知通信内容。

(2)篡改风险(tampering):第三方可以修改通信内容。

(3)冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

(1)所有信息都是加密传播,第三方无法窃听。

(2)具有校验机制,一旦被篡改,通信双方会立刻发现。

(3)配备身份证书,防止身份被冒充。

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

它将将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。这样保证了公钥不会被篡改;

数字证书里包含的内容:

拥有者的名称

拥有者所提交的公钥

有效期

证书的版本号

证书的序列号

签发算法ID

签发CA的名称

主体名称

发证者唯一标识

发证者的数字签名

扩展信息

因此,SSL/TLS协议的基本过程是这样的:

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通信。

前两步也叫握手阶段 - handshake

SSL/TSL的handshake的四个阶段:

1.客户端向服务器索要证书并验证;

client_hello发送的信息内容:

支持的协议版本,如:TLS V1.2...

客户端生成的随机数,可能在之后充当加密的密钥;

支持的加密算法,如AES,sha...

协商各自支持的压缩算法。非必

2.双方协商生成会话密钥;dh算法交换密钥

Server_hello的内容:

确认使用的加密协议的版本号。

服务器生成一个随机数,稍后用于生成会话密钥

确认加密算法及压缩算法;

3.双方采用生成的会话密钥进行安全加密的通信;

客户端验证服务器证书,在确认无误后,取出其公钥;

验证服务器证书需要验证下述内容:

验证发证机构CA;

验证证书的完整性;

验证证书的持有者信息;

验证证书的有效期

验证证书的吊销列表;

客户端发送信息给服务器:

1.一个随机数,用于服务器上的公钥加密

2.编码格式变更的通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;

客户端握手结束;

4.双方互相通告握手结束的信息;

服务器会收到客户端发送来的此次握手阶段的第三个随机数 Pre-Master_key

计算本次会话所用到的会话密钥,向客户端发送相关信息;

编码变更通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;

服务器端握手结束;

接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

时间: 2024-10-13 02:44:18

数据加密解密初探的相关文章

SQLServer 数据加密解密:将 TDE 保护的数据库移到其他实例(二)

-- 了解透明数据加密 (TDE) -- https://technet.microsoft.com/zh-cn/library/bb934049(v=sql.105).aspx "透明数据加密"(TDE) 可对数据和日志文件执行实时 I/O 加密和解密. 这种加密使用数据库加密密钥 (DEK),该密钥存储在数据库引导记录中以供恢复时使用. 数据库文件的加密在页级执行.已加密数据库中的页在写入磁盘之前会进行加密,在读入内存时会进行解密. 使用TDE操作步骤: 1. 创建主密钥 2. 创

Openssl及加密解密(一)数据加密解密及CA原理

明文:plaintxt或者cleartext,也就是没有加密的,直接可以看懂的内容.密文就是通过特殊方式处理过的内容,无法直接看懂. 常见的加密方式: 对称加密 公钥加密 单向加密 对称加密: 加密算法+口令,把要转换的数据也就是明文数据,通过加密算法内部转换明文变成密文.这个算法可能是公开的,但口令只有你自己知道.为了更加安全,那么加密本身不能过于依赖算法,因为算法固定而且一旦算法遭到破解,那么基于这个算法的所有密文都可以破解,所以算法固然重要,但是最重要的是口令,口令可以变,就算算法破解了,

SQLServer 数据加密解密:在多个服务器实例中创建相同对称密钥(三)

创建相同的对称密钥非常容易.使用相同的 KEY_SOURCE.ALGORITHM 和 IDENTITY_VALUE 密钥选项创建的对称密钥将是相同的. -- 创建测试 use [Temp] go -- drop table EnryptTest create table EnryptTest ( id int not null primary key, EnryptData nvarchar(20), ) go insert into EnryptTest values(1,N'888888')

数据加密解密及CA基本原理

1.加密方式 对称加密:加密算法+口令 DES(56bits),3DES,AES(128bits),Blowfish 特点: 加密,解密使用同一个口令 将原文分割成固定大小的数据块,对这些块进行加密 缺点: 1.口令传输 2.口令太多 密钥交换:(IKE)DH算法 用户认证: 数据完整性: 非对称加密(公钥加密):密钥对儿,公钥产生于私钥之中, 加密算法:RSA,EIGamal,DSA, 单向加密:之能从明文产生密文,反之不成,严格意义上来讲,它实现的是提取数据特征码 同一个数据,使用同一个算法

数据加密解密基础过程;

加密的分类: 对称加密: 机制: 加密方使用一个公开的算法对一段数据和特定的口令进行统一加密,解密方使用口令+算法反向解密: 算法:DES,3DES,AES,BlowFish等: 优势: 当对大量的数据进行加密时速度很快: 缺陷: 密钥(口令)的交换: 双方的身份认证: 数据的完整性: 2.非对称加密: 机制: 加密解密双方同时生成一对公钥和私钥,在加密过程中使用自己的私钥对要传递的信息进行加密,而对方使用发送方的公钥进行解密,也就是说,生成的公钥是公开的,而私钥是绝对不能外泄的: 算法: RS

PHP的数据加密解密

本文出至:新太潮流网络博客 /** * [对数据进行加密] * @E-mial [email protected] * @TIME 2017-04-07 * @WEB http://blog.iinu.com.cn * @param [数据] $data [要加密的数据] * @param [密钥] $key [解密的唯一方法] */ function encrypt($data, $key) { header('Content-type:text/html;charset=utf-8'); $

SQLServer 数据加密解密(一)

都是基本示例,更多参考官方文档: 1. Transact-SQL 函数 2. 数据库密钥 3. 证书 4. 非对称密钥 5. 对称密钥 -- drop table EnryptTest create table EnryptTest ( id int not null primary key, EnryptData nvarchar(20), ) insert into EnryptTest values(1,N'888888'),(2,N'888888'),(3,N'123456'),(4,N

CCUserDefault 数据加密解密

//加密 void HelloWorld::encode(std::string &str)  {      for(int i = 0; i < str.length(); i++) {          int ch = str[i];          ch = ch ^ 1;          str[i] = ch;      } }  //解密 void HelloWorld::decode(std::string &str)  {      for(int i = 0;

RSA不对称算法,对数据加密解密!

package com.yjm.test509; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; impo