通用对称加密
Ⅰ 开发中常见的加密方式及应用
开发中常见的加密方式及应用
一、base64
简述:Base64是网络上最常见的用于传输8Bit 字节码 的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )编码后的数据~=编码前数据的4/3,会大1/3左右(图片转化为base64格式会比原图大一些)。
应用:Base64编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息。例如,在java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一 标识符 (一般为128-bit的UUID)编码为一个字符串,用作HTTP 表单 和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制 数据编码 为适合放在URL(包括隐藏 表单域 )中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。
命令行进行Base64编码和解码
编码:base64 123.png -o 123.txt
解码:base64 123.txt -o test.png -D Base64编码的原理
原理:
1)将所有字符转化为ASCII码;
2)将ASCII码转化为8位二进制;
3)将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;
4)统一在6位二进制前补两个0凑足8位;
5)将补0后的二进制转为十进制;
6)从Base64编码表获取十进制对应的Base64编码;
Base64编码的说明:
a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。
b.数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。
c.不断进行,直到全部输入数据转换完成。
d.如果最后剩下两个输入数据,在编码结果后加1个“=”;
e.如果最后剩下一个输入数据,编码结果后加2个“=”;
f.如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
二、HASH加密/单向散列函数
简述:Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度(32个字符)的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。对用相同数据,加密之后的密文相同。 常见的Hash算法有MD5和SHA。由于加密结果固定,所以基本上原始的哈希加密已经不再安全,于是衍生出了加盐的方式。加盐:先对原始数据拼接固定的字符串再进行MD5加密。
特点:
1) 加密 后密文的长度是定长(32个字符的密文)的
2)如果明文不一样,那么散列后的结果一定不一样
3)如果明文一样,那么加密后的密文一定一样(对相同数据加密,加密后的密文一样)
4)所有的加密算法是公开的
5)不可以逆推反算(不能根据密文推算出明文),但是可以暴力 破解 ,碰撞监测
原理:MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要。
1)数据填充
对消息进行数据填充,使消息的长度对512取模得448,设消息长度为X,即满足X mod 512=448。根据此公式得出需要填充的数据长度。
填充方法:在消息后面进行填充,填充第一位为1,其余为0。
2)添加信息长度
在第一步结果之后再填充上原消息的长度,可用来进行的存储长度为64位。如果消息长度大于264,则只使用其低64位的值,即(消息长度 对264取模)。
在此步骤进行完毕后,最终消息长度就是512的整数倍。
3)数据处理
准备需要用到的数据:
4个常数:A = 0x67452301, B = 0x0EFCDAB89, C = 0x98BADCFE, D = 0x10325476;
4个函数:F(X,Y,Z)=(X & Y) | ((~X) & Z);G(X,Y,Z)=(X & Z) | (Y & (~Z));H(X,Y,Z)=X ^ Y ^ Z;I(X,Y,Z)=Y ^ (X | (~Z));
把消息分以512位为一分组进行处理,每一个分组进行4轮变换,以上面所说4个常数为起始变量进行计算,重新输出4个变量,以这4个变量再进行下一分组的运算,如果已经是最后一个分组,则这4个变量为最后的结果,即MD5值。
三、对称加密
经典算法:
1)DES数据加密标准
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
2)3DES使用3个密钥,对消息进行(密钥1·加密)+(密钥2·解密)+(密钥3·加密)
3)AES高级加密标准
如图,加密/解密使用相同的密码,并且是可逆的
四、非对称加密
特点:
1)使用公钥加密,使用私钥解密
2)公钥是公开的,私钥保密
3)加密处理安全,但是性能极差
经典算法RSA:
1)RSA原理
(1)求N,准备两个质数p和q,N = p x q
(2)求L,L是p-1和q-1的最小公倍数。L = lcm(p-1,q-1)
(3)求E,E和L的最大公约数为1(E和L互质)
(4)求D,E x D mode L = 1
五、数字签名
原理以及应用场景:
1)数字签名的应用场景
需要严格验证发送方身份信息情况
2)数字签名原理
(1)客户端处理
对"消息"进行HASH得到"消息摘要"
发送方使用自己的私钥对"消息摘要"加密(数字签名)
把数字签名附着在"报文"的末尾一起发送给接收方
(2)服务端处理
对"消息" HASH得到"报文摘要"
使用公钥对"数字签名"解密
对结果进行匹配
六、数字证书
简单说明:
证书和驾照很相似,里面记有姓名、组织、地址等个人信息,以及属于此人的公钥,并有认证机构施加数字签名,只要看到公钥证书,我们就可以知道认证机构认证该公钥的确属于此人。
数字证书的内容:
1)公钥
2)认证机构的数字签名
证书的生成步骤:
1)生成私钥openssl genrsa -out private.pem 1024
2)创建证书请求openssl req -new -key private.pem -out rsacert.csr
3)生成证书并签名,有效期10年openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
4)将PEM格式文件转换成DER格式openssl x509 -outform der -in rsacert.crt -out rsacert.der
5)导出P12文件openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
iOS开发中的注意点:
1)在iOS开发中,不能直接使用PEM格式的证书,因为其内部进行了Base64编码,应该使用的是DER的证书,是二进制格式的;
2)OpenSSL默认生成的都是PEM格式的证书。
七、https
HTTPS和HTTP的区别:
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
1)https协议需要到ca申请证书,一般免费证书很少,需要交费。
2)http是 超文本传输协议 ,信息是明文传输,https则是具有 安全性 的 ssl 加密传输协议。
3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的 网络协议 ,比http协议安全。
5)SSL:Secure Sockets Layer安全套接字层;用数据加密(Encryption)技术,可确保数据在网络上传输过程中不会被截取及窃听。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape 浏览器 即可支持SSL。目前版本为3.0。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
Ⅱ 详解https是如何确保系统安全的
https协议需要到CA申请证书。
http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
http默认使用80端口,https默认使用443端口
下面就是https的整个架构,现在的https基本都使用TLS了,因为更加安全,所以下图中的SSL应该换为SSL/TLS。
客户端首次发出请求
由于客户端(如浏览器)对一些加解密算法的支持程度不一样,但是在TLS协议传输过程中必须使用同一套加解密算法才能保证数据能够正常的加解密。在TLS握手阶段,客户端首先要告知服务端,自己支持哪些加密算法,所以客户端需要将本地支持的加密套件(Cipher Suite)的列表传送给服务端。除此之外,客户端还要产生一个随机数,这个随机数一方面需要在客户端保存,另一方面需要传送给服务端,客户端的随机数需要跟服务端产生的随机数结合起来产生后面要讲到的 Master Secret 。
客户端需要提供如下信息:
支持的协议版本,比如TLS 1.0版
一个客户端生成的随机数,稍后用于生成”对话密钥”
支持的加密方法,比如RSA公钥加密
支持的压缩方法
协议的版本
加密的算法
随机数
服务器证书
服务端首次回应
服务端在接收到客户端的Client Hello之后,服务端需要确定加密协议的版本,以及加密的算法,然后也生成一个随机数,以及将自己的证书发送给客户端一并发送给客户端,这里的随机数是整个过程的第二个随机数。
服务端需要提供的信息:
客户端再次回应
客户端首先会对服务器下发的证书进行验证,验证通过之后,则会继续下面的操作,客户端再次产生一个随机数(第三个随机数),然后使用服务器证书中的公钥进行加密,以及放一个ChangeCipherSpec消息即编码改变的消息,还有整个前面所有消息的hash值,进行服务器验证,然后用新秘钥加密一段数据一并发送到服务器,确保正式通信前无误。
客户端使用前面的两个随机数以及刚刚新生成的新随机数,使用与服务器确定的加密算法,生成一个Session Secret。
ChangeCipherSpec
ChangeCipherSpec是一个独立的协议,体现在数据包中就是一个字节的数据,用于告知服务端,客户端已经切换到之前协商好的加密套件(Cipher Suite)的状态,准备使用之前协商好的加密套件加密数据并传输了。
服务器再次响应
服务端在接收到客户端传过来的第三个随机数的 加密数据之后,使用私钥对这段加密数据进行解密,并对数据进行验证,也会使用跟客户端同样的方式生成秘钥,一切准备好之后,也会给客户端发送一个 ChangeCipherSpec,告知客户端已经切换到协商过的加密套件状态,准备使用加密套件和 Session Secret加密数据了。之后,服务端也会使用 Session Secret 加密一段 Finish 消息发送给客户端,以验证之前通过握手建立起来的加解密通道是否成功。
后续客户端与服务器间通信
确定秘钥之后,服务器与客户端之间就会通过商定的秘钥加密消息了,进行通讯了。整个握手过程也就基本完成了。
值得特别提出的是:
SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL上传送的数据是使用对称密钥加密的!因为非对称加密的速度缓慢,耗费资源。其实当客户端和主机使用非对称加密方式建立连接后,客户端和主机已经决定好了在传输过程使用的对称加密算法和关键的对称加密密钥,由于这个过程本身是安全可靠的,也即对称加密密钥是不可能被窃取盗用的,因此,保证了在传输过程中对数据进行对称加密也是安全可靠的,因为除了客户端和主机之外,不可能有第三方窃取并解密出对称加密密钥!如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。
其他补充
对于非常重要的保密数据,服务端还需要对客户端进行验证,以保证数据传送给了安全的合法的客户端。服务端可以向客户端发出 Cerficate Request 消息,要求客户端发送证书对客户端的合法性进行验证。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。
PreMaster secret前两个字节是TLS的版本号,这是一个比较重要的用来核对握手数据的版本号,因为在Client Hello阶段,客户端会发送一份加密套件列表和当前支持的SSL/TLS的版本号给服务端,而且是使用明文传送的,如果握手的数据包被破解之后,攻击者很有可能串改数据包,选择一个安全性较低的加密套件和版本给服务端,从而对数据进行破解。所以,服务端需要对密文中解密出来对的PreMaster版本号跟之前Client Hello阶段的版本号进行对比,如果版本号变低,则说明被串改,则立即停止发送任何消息。
session的恢复
有两种方法可以恢复原来的session:一种叫做session ID,另一种叫做session ticket。
session ID
session ID的思想很简单,就是每一次对话都有一个编号(session ID)。如果对话中断,下次重连的时候,只要客户端给出这个编号,且服务器有这个编号的记录,双方就可以重新使用已有的”对话密钥”,而不必重新生成一把。
session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上。所以,如果客户端的请求发到另一台服务器,就无法恢复对话
session ticket
客户端发送一个服务器在上一次对话中发送过来的session ticket。这个session ticket是加密的,只有服务器才能解密,其中包括本次对话的主要信息,比如对话密钥和加密方法。当服务器收到session ticket以后,解密后就不必重新生成对话密钥了。
目前只有Firefox和Chrome浏览器支持。
总结
https实际就是在TCP层与http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书,等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。
Ⅲ JAVA和.NET使用DES对称加密的区别
如果我说没有区别你会信吗?
但答案还真是这样,两者没有任何区别的,只不过实现的语言代码不同而已。
那么java与dot net之间的DES是否可以通用?答案也是完全通用。无论是Java的DES加密还是dot net的DES回密,均可以使用另一种语言且不限于Java或dot net解密。够明白吗?
DES其实只是一个算法,加密与解密我们都知道算法与密码是分离的。算法是公开的,都可以用,而密码是独立于算法的。所以DES在不同的语言中实现的算法根本就是一样的——也正是因为如此不管何种语言都是通用的(除非伪DES,要知道DES算法网上本身能搜到而且是一个标准,最先是由美国安全部门公开的)
再说一下,为什么有人“通”用不起来的原因。DES其实有CBC之类的参数的,也就是针对加密块选用的不同的加密手段。正是这个参数的原因,不同的语言中使用不同的参数做为默认值,所以使用默认的方式进行让两个串进行加解密肯定是不同的。DES使用一种模式(方法)加密,用另一种模式(方法)进行解密能得到正确的结果吗?一些人不怪自己的学艺不精,反说是两种语言的DES不通用(这也就是为什么网络上会出现诸多说java和dot net的DES加密方法不通用的原因)。
即便是自己使用的DES加密的代码也是通用的(前提你要遵守DES分开算法),但不要“重复实现已经实现的东西(专业术语叫造轮子)”。
附:
DES.Model属性取值
CBC 密码块链 (CBC) 模式引入了反馈。每个纯文本块在加密前,通过按位“异或”操作与前一个块的密码文本结合。这样确保了即使纯文本包含许多相同的块,这些块中的每一个也会加密为不同的密码文本块。在加密块之前,初始化向量通过按位“异或”操作与第一个纯文本块结合。如果密码文本块中有一个位出错,相应的纯文本块也将出错。此外,后面的块中与原出错位的位置相同的位也将出错。
ECB 电子密码本 (ECB) 模式分别加密每个块。这意味着任何纯文本块只要相同并且在同一消息中,或者在用相同的密钥加密的不同消息中,都将被转换成同样的密码文本块。如果要加密的纯文本包含大量重复的块,则逐块破解密码文本是可行的。另外,随时准备攻击的对手可能在您没有察觉的情况下替代和交换个别的块。如果密码文本块中有一个位出错,相应的整个纯文本块也将出错。
OFB 输出反馈 (OFB) 模式将少量递增的纯文本处理成密码文本,而不是一次处理整个块。此模式与 CFB 相似;这两种模式的唯一差别是移位寄存器的填充方式不同。如果密码文本中有一个位出错,纯文本中相应的位也将出错。但是,如果密码文本中有多余或者缺少的位,则那个位之后的纯文本都将出错。
CFB 密码反馈 (CFB) 模式将少量递增的纯文本处理成密码文本,而不是一次处理整个块。该模式使用在长度上为一个块且被分为几部分的移位寄存器。例如,如果块大小为 8 个字节,并且每次处理一个字节,则移位寄存器被分为 8 个部分。如果密码文本中有一个位出错,则一个纯文本位出错,并且移位寄存器损坏。这将导致接下来若干次递增的纯文本出错,直到出错位从移位寄存器中移出为止。
CTS 密码文本窃用 (CTS) 模式处理任何长度的纯文本并产生长度与纯文本长度匹配的密码文本。除了最后两个纯文本块外,对于所有其他块,此模式与 CBC 模式的行为相同。
DES.Padding属性的取值
None 不填充。
PKCS7 PKCS #7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。
Zeros 填充字符串由设置为零的字节组成。
ANSIX923 ANSIX923 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零。
ISO10126 ISO10126 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。
当Mode不同时,解密的内密内容能与相同吗?PaddingMode不同时,解密的内容的结尾部分能相同吗(填充结果只涉及到最后的一个块).所以当不管何种语言使用相同的Mode及PaddingMode时,加解密的结果是相同的(当然不排除部分语言不实现全部的Mode和PaddingMode)但,基本的都是实现了的,所以基本上任何两种语言之间的DES都可以实现相同的加解密结果!而java和dot net中的DES显然指的是算法,两者是相同的,可以随意使用(Java中dot net中的Mode默认值是不同的,一定要设置相同的Mode和PaddingMode才可以的,不要双方都采用默认值,那样真的通不起来)
Ⅳ 对称加密,和不可逆算法是什么
加密算法
加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法。
对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。
不对称加密算法不对称加密算法使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。以不对称加密算法为基础的加密技术应用非常广泛。
不可逆加密算法 不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。不可逆加密算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等。
加密技术
加密算法是加密技术的基础,任何一种成熟的加密技术都是建立多种加密算法组合,或者加密算法和其他应用软件有机结合的基础之上的。下面我们介绍几种在计算机网络应用领域广泛应用的加密技术。
非否认(Non-repudiation)技术 该技术的核心是不对称加密算法的公钥技术,通过产生一个与用户认证数据有关的数字签名来完成。当用户执行某一交易时,这种签名能够保证用户今后无法否认该交易发生的事实。由于非否认技术的操作过程简单,而且直接包含在用户的某类正常的电子交易中,因而成为当前用户进行电子商务、取得商务信任的重要保证。
PGP(Pretty Good Privacy)技术 PGP技术是一个基于不对称加密算法RSA公钥体系的邮件加密技术,也是一种操作简单、使用方便、普及程度较高的加密软件。PGP技术不但可以对电子邮件加密,防止非授权者阅读信件;还能对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份;也可以在不需要通过任何保密渠道传递密钥的情况下,使人们安全地进行保密通信。PGP技术创造性地把RSA不对称加密算法的方便性和传统加密体系结合起来,在数字签名和密钥认证管理机制方面采用了无缝结合的巧妙设计,使其几乎成为最为流行的公钥加密软件包。
数字签名(Digital Signature)技术 数字签名技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。数字签名技术是在网络系统虚拟环境中确认身份的重要技术,完全可以代替现实过程中的“亲笔签字”,在技术和法律上有保证。在公钥与私钥管理方面,数字签名应用与加密邮件PGP技术正好相反。在数字签名应用中,发送者的公钥可以很方便地得到,但他的私钥则需要严格保密。
PKI(Public Key Infrastructure)技术 PKI技术是一种以不对称加密技术为核心、可以为网络提供安全服务的公钥基础设施。PKI技术最初主要应用在Internet环境中,为复杂的互联网系统提供统一的身份认证、数据加密和完整性保障机制。由于PKI技术在网络安全领域所表现出的巨大优势,因而受到银行、证券、政府等核心应用系统的青睐。PKI技术既是信息安全技术的核心,也是电子商务的关键和基础技术。由于通过网络进行的电子商务、电子政务等活动缺少物理接触,因而使得利用电子方式验证信任关系变得至关重要,PKI技术恰好能够有效解决电子商务应用中的机密性、真实性、完整性、不可否认性和存取控制等安全问题。一个实用的PKI体系还必须充分考虑互操作性和可扩展性。PKI体系所包含的认证中心(CA)、注册中心(RA)、策略管理、密钥与证书管理、密钥备份与恢复、撤销系统等功能模块应该有机地结合在一起。
加密的未来趋势
尽管双钥密码体制比单钥密码体制更为可靠,但由于计算过于复杂,双钥密码体制在进行大信息量通信时,加密速率仅为单钥体制的1/100,甚至是 1/1000。正是由于不同体制的加密算法各有所长,所以在今后相当长的一段时期内,各类加密体制将会共同发展。而在由IBM等公司于1996年联合推出的用于电子商务的协议标准SET(Secure Electronic Transaction)中和1992年由多国联合开发的PGP技术中,均采用了包含单钥密码、双钥密码、单向杂凑算法和随机数生成算法在内的混合密码系统的动向来看,这似乎从一个侧面展示了今后密码技术应用的未来。
在单钥密码领域,一次一密被认为是最为可靠的机制,但是由于流密码体制中的密钥流生成器在算法上未能突破有限循环,故一直未被广泛应用。如果找到一个在算法上接近无限循环的密钥流生成器,该体制将会有一个质的飞跃。近年来,混沌学理论的研究给在这一方向产生突破带来了曙光。此外,充满生气的量子密码被认为是一个潜在的发展方向,因为它是基于光学和量子力学理论的。该理论对于在光纤通信中加强信息安全、对付拥有量子计算能力的破译无疑是一种理想的解决方法。
由于电子商务等民用系统的应用需求,认证加密算法也将有较大发展。此外,在传统密码体制中,还将会产生类似于IDEA这样的新成员,新成员的一个主要特征就是在算法上有创新和突破,而不仅仅是对传统算法进行修正或改进。密码学是一个正在不断发展的年轻学科,任何未被认识的加/解密机制都有可能在其中占有一席之地。
目前,对信息系统或电子邮件的安全问题,还没有一个非常有效的解决方案,其主要原因是由于互联网固有的异构性,没有一个单一的信任机构可以满足互联网全程异构性的所有需要,也没有一个单一的协议能够适用于互联网全程异构性的所有情况。解决的办法只有依靠软件代理了,即采用软件代理来自动管理用户所持有的证书(即用户所属的信任结构)以及用户所有的行为。每当用户要发送一则消息或一封电子邮件时,代理就会自动与对方的代理协商,找出一个共同信任的机构或一个通用协议来进行通信。在互联网环境中,下一代的安全信息系统会自动为用户发送加密邮件,同样当用户要向某人发送电子邮件时,用户的本地代理首先将与对方的代理交互,协商一个适合双方的认证机构。当然,电子邮件也需要不同的技术支持,因为电子邮件不是端到端的通信,而是通过多个中间机构把电子邮件分程传递到各自的通信机器上,最后到达目的地
Ⅳ 对称加密算法的缺点有哪些
1、对称加密算法
优点
加解密的高速度和使用长密钥时的难破解性。
缺点
对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去。如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。
2、非对称加密算法
优点
非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
缺点
算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
3、传统密码体制
优点
由于DES加密速度快,适合加密较长的报文。
缺点
通用密钥密码体制的加密密钥和解密密钥是通用的,即发送方和接收方使用同样密钥的密码体制。
4、公钥密码体制
优点
RSA算法的加密密钥和加密算法分开,使得密钥分配更为方便。
RSA算法解决了大量网络用户密钥管理的难题。
缺点
RSA的密钥很长,加密速度慢。
Ⅵ 电脑怎样通过互联网传输数据
网络中数据传输过程
我们每天都在使用互联网,我们电脑上的数据是怎么样通过互联网传输到到另外的一台电脑上的呢?
我们知道现在的互联网中使用的TCP/IP协议是基于,OSI(开放系统互联)的七层参考模型的,(虽然不是完全符合)从上到下分别为 应用层 表示层 会话层 传输层 网络层 数据链路层和物理层。其中数据链路层又可是分为两个子层分别为逻辑链路控制层(Logic Link Control,LLC )和介质访问控制层((Media Access Control,MAC )也就是平常说的MAC层。LLC对两个节点中的链路进行初始化,防止连接中断,保持可靠的通信。MAC层用来检验包含在每个桢中的地址信息。在下面会分析到。还要明白一点路由器是在网路层的,而网卡在数据链路层。
我们知道,ARP(Address Resolution Protocol,地址转换协议)被当作底层协议,用于IP地址到物理地址的转换。在以太网中,所有对IP的访问最终都转化为对网卡MAC地址的访问。如果主机A的ARP列表中,到主机B的IP地址与MAC地址对应不正确,由A发往B数据包就会发向错误的MAC地址,当然无法顺利到达B,结 果是A与B根本不能进行通信。
首先我们分析一下在同一个网段的情况。假设有两台电脑分别命名为A和B,A需要相B发送数据的话,A主机首先把目标设备B的IP地址与自己的子网掩码进行“与”操作,以判断目标设备与自己是否位于同一网段内。如果目标设备在同一网段内,并且A没有获得与目标设备B的IP地址相对应的MAC地址信息,则源设备(A)以第二层广播的形式(目标MAC地址为全1)发送ARP请求报文,在ARP请求报文中包含了源设备(A)与目标设备(B)的IP地址。同一网段中的所有其他设备都可以收到并分析这个ARP请求报文,如果某设备发现报文中的目标IP地址与自己的IP地址相同,则它向源设备发回ARP响应报文,通过该报文使源设备获得目标设备的MAC地址信息。为了减少广播量,网络设备通过ARP表在缓存中保存IP与MAC地址的映射信息。在一次 ARP的请求与响应过程中,通信双方都把对方的MAC地址与IP地址的对应关系保存在各自的ARP表中,以在后续的通信中使用。ARP表使用老化机制,删除在一段时间内没有使用过的IP与MAC地址的映射关系。一个最基本的网络拓扑结构:
PC-A并不需要获取远程主机(PC-C)的MAC地址,而是把IP分组发向缺省网关,由网关IP分组的完成转发过程。如果源主机(PC-A)没有缺省网关MAC地址的缓存记录,则它会通过ARP协议获取网关的MAC地址,因此在A的ARP表中只观察到网关的MAC地址记录,而观察不到远程主机的 MAC地址。在以太网(Ethernet)中,一个网络设备要和另一个网络设备进行直接通信,
除了知道目标设备的网络层逻辑地址(如IP地址)外,还要知道目标设备的第二层物理地址(MAC地址)。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 数据包在网络中的发送是一个及其复杂的过程,上图只是一种很简单的情况,中间没有过多的中间节点,其实现实中只会比这个更复杂,但是大致的原理是一致的。
(1)PC-A要发送数据包到PC-C的话,如果PC-A没有PC-C的IP地址,则PC-A首先要发出一个dns的请求,路由器A或者dns解析服务器会给PC-A回应PC-C的ip地址,这样PC-A关于数据包第三层的IP地址信息就全了:源IP地址:PC-A,目的ip地址:PC-C。
(2)接下来PC-A要知道如何到达PC-C,然后,PC-A会发送一个arp的地址解析请求,发送这个地址解析请求,不是为了获得目标主机PC-C的MAC地址,而是把请求发送到了路由器A中,然后路由器A中的MAC地址会发送给源主机PC-A,这样PC-A的数据包的第二层信息也全了,源MAC地址:PC-A的MAC地址,目的MAC地址:路由器A的MAC地址,
(3)然后数据会到达交换机A,交换机A看到数据包的第二层目的MAC地址,是去往路由器A的,就把数据包发送到路由器A,路由器A收到数据包,首先查看数据包的第三层ip目的地址,如果在自己的路由表中有去往PC-C的路由,说明这是一个可路由的数据包。 (4)然后路由器进行IP重组和分组的过程。首先更换此数据包的第二层包头信息,路由器PC-A到达PC—C要经过一个广域网,在这里会封装很多广域网相关的协议。其作用也是为了找下一阶段的信息。同时对第二层和第三层的数据包重校验。把数据经过Internet发送出去。最后经过很多的节点发送到目标主机PC_C中。
现在我们想一个问题,PC-A和PC-C的MAC地址如果是相同的话,会不会影响正常的通讯呢!答案是不会影响的,因为这两个主机所处的局域网被广域网分隔开了,通过对发包过程的分析可以看出来,不会有任何的问题。而如果在同一个局域网中的话,那么就会产生通讯的混乱。当数据发送到交换机是,这是的端口信息会有两个相同的MAC地址,而这时数据会发送到两个主机上,这样信息就会混乱。因此这也是保证MAC地址唯一性的一个理由。
我暂且按我的理解说说吧。
先看一下计算机网络OSI模型的七个层次:
┌—————┐
│ 应用层 │←第七层
├—————┤
│ 表示层 │
├—————┤
│ 会话层 │
├—————┤
│ 传输层 │
├—————┤
│ 网络层 │
├—————┤
│数据链路层│
├—————┤
│ 物理层 │←第一层
└—————┘
而我们现在用的网络通信协议TCP/IP协议者只划分了四成:
┌—————┐
│ 应用层 │ ←包括OSI的上三层
├—————┤
│ 传输层 │
├—————┤
│ 网络层 │
├—————┤
│网络接口层 │←包括OSI模型的下两层,也就是各种不同局域网。
└—————┘
两台计算机通信所必须需要的东西:IP地址(网络层)+端口号(传送层)。
两台计算机通信(TCP/IP协议)的最精简模型大致如下:
主机A---->路由器(零个或多个)---->主机B
举个例子:主机A上的应用程序a想要和主机B上面的应用程序b通信,大致如下
程序a将要通信的数据发到传送层,在传送层上加上与该应用程序对应的通信端口号(主机A上不同的应用程序有不同的端口号),如果是用的TCP的话就加上TCP头部,UDP就加上UDP头部。
在传送成加上头部之后继续向往下传到网络层,然后加上IP头部(标识主机地址以及一些其他的数据,这里就不详细说了)。
然后传给下层到数据链路层封装成帧,最后到物理层变成二进制数据经过编码之后向外传输。
在这个过程中可能会经过许多各种各样的局域网,举个例子:
主机A--->(局域网1--->路由器--->局域网2)--->主机B
这个模型比上面一个稍微详细点,其中括号里面的可以没有也可能有一个或多个,这个取决于你和谁通信,也就是主机B的位置。
主机A的数据已经到了具体的物理介质了,然后经过局域网1到了路由器,路由器接受主机A来的数据先经过解码,还原成数据帧,然后变成网络层数据,这个过程也就是主机A的数据经过网络层、数据链路层、物理层在路由器上面的一个反过程。
然后路由器分析主机A来的数据的IP头部(也就是在主机A的网络层加上的数据),并且修改头部中的一些内容之后继续把数据传送出去。
一直到主机B收到数据为止,主机B就按照主机A处理数据的反过程处理数据,直到把数据交付给主机B的应用程序b。完成主机A到主机B的单方向通信。
这里的主机A、B只是为了书写方便而已,可能通信的双方不一定就是个人PC,服务器与主机,主机与主机,服务器与服务器之间的通信大致都是这样的。
再举个例子,我们开网页上网络:
就是我们的主机浏览器的这个应用程序和网络的服务器之间的通信。应用成所用的协议就是HTTP,而服务器的端口号就是熟知端口号80.
大致过程就是上面所说,其中的细节很复杂,任何一个细节都可以写成一本书,对于非专业人员也没有必要深究。
Ⅶ https如何进行加密传输
HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.浏览器获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256