一·链路层安全应用802.1X
802.1X属于链路层认证机制,它是一种基于端口的接入控制协议,目的在于确定连接终端的端口是否有效。
参与者分为三个不同小组:请求方、认证方和授权服务器。
端口未授权时,只有EAP报文和广播报文可以通过端口转发,只有授权后,认证方才会对请求方的数据提供正常服务。
二·网络层安全应用IPSec
IPSec是IETF设计的一种端到端的确保IP层通信安全的机制,是一组协议集,其中三个最重要的协议是:
认证头 AH
封装安全载荷协议 ESP
密钥交换 IKE
分别对应IP安全的三个方面:认证、保密和密钥管理。
三·传输层安全应用SSL
安全套接层SSL协议,指定了一种在应用层协议和TCP/IP之间提供数据安全性的机制,为TCP/IP连接提供保密性、完整性、服务器认证和可选的客户机认证,主要用于实现Web服务器和浏览器之间的安全通信。
SSL使用TCP提供一种可靠的端到端的安全服务。它独立于应用层,从而使绝大多数应用层协议都可以直接建立在SSL之上。它的目标是在通信双方之间利用加密的SSL信道建立安全连接,由两层协议组成
记录协议和握手协议是SSL主要的两个协议
(1)SSL记录协议为应用层协议提供基本的安全服务,用于封装更高层的协议,执行数据的安全传输,HTTP一般在SSL的记录协议的上层实现。
(2)握手协议用于客户机和服务器之间建立安全连接前,预先建立一个连接双方的安全通道,通过特定的机密算法互相鉴别。
在握手时,必须进行服务器认证,但是不需要CA实时参与,也无须查询证书。而客户机认证是可选的,因为可以在建立起SSL信道后,再用协商好的会话密钥加密传输口令来实现客户机认证。
SSL结合对称加密和公钥加密技术。
四·虚拟专用网络
建立在公网上,由某个组织或某些用户专用的通信网络。
虚拟性表现在任意一对VPN用户之间没有专用物理连接,而是通过公用网络进行通信,它在公用网络中建立自己的专用隧道,通过这条隧道传输报文。
专用性表现在VPN之外的用户无法访问VPN内部的网络资源,VPN内部用户之间可以实现安全通信。
VPN在TCP/IP体系的不同层次上实现,可以有多种应用方案。
实现VPN的关键技术:
(1)隧道技术
(2)加/解密技术
(3)密钥管理技术
(4)身份认证技术
VPN的解决方案:
(1)内联网VPN
(2)外联网VPN
(3)远程接入VPN
五·无限局域网安全协议802.11i
802.11i协议细化了IEEE802.11无线局域网的安全标准,包括认证、数据完整性、数据保密性和密钥管理。
服务:
(1)认证
(2)访问控制
(3)完整性加密
使用算法:
(1)加密算法:RC4、AES。
(2)完整性算法:HMAC-SHA-1、HMAC-MD5、Michael MIC、AES-CBS-MAC。
(3)密钥生成算法:HMAC-SHA-1.
在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。
原理
RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。假设S-box的长度为256,密钥长度为Len。先来看看算法的初始化部分(用C代码表示)
具体代码如下:
//程序开始
#include
#include
typedef unsigned longULONG;
//初始化函数
//参数1是一个256长度的char型数组,定义为: unsigned char sBox[256];
//参数2是密钥,其内容可以随便定义:char key[256];
//参数3是密钥的长度,Len = strlen(key);
void rc4_init(unsigned char *s,unsigned char *key,unsigned long Len)
{
int i = 0, j = 0;
char k[256] = {0};
unsigned char tmp = 0;
for(i=0;i<256;i++)
{
s[i] = i;
k[i] = key[i%Len];
}
for(i=0;i<256;i++)
{
j = (j+s[i]+k[i])%256;
tmp = s[i];
printf("copy for dongdeng");
s[i] = s[j];//交换s[i]和s[j]
s[j] = tmp;
}
}
/*
在初始化的过程中,密钥的主要功能是将S-box搅乱,
i确保S-box的每个元素都得到处理,
j保证S-box的搅乱是随机的。
而不同的S-box在经过伪随机子密码生成算法的处理后可以得到
不同的子密钥序列,
将S-box和明文进行xor运算,得到密文,解密过程也完全相同。
*/
//-----------------------------------------------------------
//加解密
//参数1是上边rc4_init函数中,被搅乱的S-box;
//参数2是需要加密的数据data;
//参数3是data的长度.
void rc4_crypt(unsigned char *s,unsigned char *Data,unsigned long Len)
{
int i=0,j=0,t=0;
unsigned long k = 0;
unsigned char tmp;
for(k=0;k<Len;k++)
{
i = (i+1)%256;
j = (j+s[i])%256;
tmp = s[i];
s[i] = s[j];//交换s[x]和s[y]
s[j] = tmp;
t = (s[i]+s[j])%256;
Data[k]^=s[t];//^位异或
}
}
//---------------------------------------------
//最后,在main函数中,调用顺序如下:
int main(void)
{
unsigned char s[256]={0},s2[256]={0};//S-box
char key[256]={"justfortext"};//justfortext
char pData[512]="这是一个用来加密地数据Data";
unsigned long len = strlen(pData);
int i;
printf("pData = %s\n",pData);
printf("key = %s,length = %d\n\n",key,strlen(key));
rc4_init(s,(unsigned char *)key,strlen(key));//已经完成了初始化
printf("完成对S[i]的初始化,如下:\n\n");
for(i=0;i<256;i++)
{
printf("%02X",s[i]);
if(i&&(i+1)%16==0)
putchar('\n');
}
printf("\n\n");
for(i=0;i<256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!
{
s2[i] = s[i];
}
printf("已经初始化,现在加密:\n\n");
rc4_crypt(s,(unsigned char *)pData,len);//加密
printf("pData = %s\n\n",pData);
printf("已经加密,现在解密:\n\n");
//rc4_init(s,(unsigned char *)pData,len);初始化密钥
rc4_crypt(s2,(unsigned char*)pData,len);//解密
printf("pData = %s\n\n",pData);
return 0;
}
//程序完
六·Web安全应用SET
安全电子交易SET,目前唯一实用的保证信用卡数据安全的应用层安全协议。
SET协议使用对称加密、公钥加密、数字信封、数字签名、保温摘要和双重签名技术,保证在Web环境中数据传输和处理的安全性。
它是PKI架构下的典型实现,提供了消费者·、商家和银行之间的认证,确保交易数据的完整性、完整性和不可否认性,不会将消费者卡号等信息泄露给商家。
**安全性独立于传输层:**无须传输层提供类似TLS或SSL之类的安全传输协议就可实现安全性。
**独立于传输网络的操作系统:**SET协议和报文格式独立于传输消息的网络,独立于处理消息的硬件平台和操作系统。