安全加密技术汇总

开篇
使用密码学可以达到以下目的:
保密性:防止用户的标识或数据被读取。
数据完整性:防止数据被更改。
身份验证:确保数据发自特定的一方。

一 消息摘要
消息摘要主要用于保持数据的完整性,我们经常听到的校验和就是消息摘要的一个特例。它的算法是一个单项函数。也就是直接将输入的数据进行消息摘要提取,但绝不能从消息摘要生成原数据。消息摘要的算法分为如下几类(最常用的是MD5和SHA-1):

MD2:是一个速度很慢但相当安全的算法,它产生128位的摘要值。
MD4:速度很快,但安全性下降。同样产生128位的摘要值。
MD5:是MD4的一个更安全的版本,同时速度更快。也产生128位的摘要值。1992年

SHA (Secure Hash Algorithm,译作安全杂凑算法) 家族是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码杂凑函数。正式名称为 SHA 的家族第一个成员发布于 1993年。然而今日的人们给它取了一个非正式的名称 SHA-0 以避免与它的后继者搞混。两年之后, SHA-1,第一个 SHA 的后继者发布了。另外还有四种变体,曾经发布以提升输出的范围和变更一些细微设计: SHA-224, SHA-256, SHA-384 和 SHA-512 (这些有时候也被称做 SHA-2)。
SHA:安全哈希算法,产生一个160位的摘要值。
SHA-1:在克服SHA的一些缺陷基础上形成的哈希算法。
SHA-256、SHA-383 和 SHA-512 提供更长的指纹,大小分别是 256 位、383 位和 512 位。
MAC:消息认证码,使用秘密密钥和消息摘要算法来创建消息摘要。

Hash算法描述:Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。

Hash算法在信息安全方面的应用主要体现在以下的3个方面:
1) 文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2) 数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3) 鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

二 对称密钥(私钥加密)
对称密钥应该是相当强壮的信息加密算法。简单地说就是:加密与解密都用同一个密钥。

下面是一些最普通的对称密钥算法:

DES:DES(数据加密标准)是由 IBM 于上世纪 70 年代发明的,美国政府将其采纳为标准,使用56位的密钥。
3-DES(TripleDES):该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两个密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度。TripleDES 有时称为 DESede(表示加密、解密和加密这三个阶段)。
RC2和RC4:可以使用2048位的密钥并且提供了一个十分安全的算法。他们都来自于领先的加密安全性公司 RSA Security。
RC5:使用了一种可配置的密钥大小。也来自领先的加密安全性公司 RSA Security。
AES:2000年AES(高级加密标准)取代 DES 成为美国标准。它是由 Joan Daemen 和 Vincent Rijmen 发明的,也被称为 Rinjdael 算法。它是 128 位分组密码,密钥长度为 128 位、192 位或 256 位。
Blowfish:这种算法是由 Bruce Schneier 开发的,它是一种具有从 32 位到 448 位(都是 8 的整数倍)可变密钥长度的分组密码,被设计用于在软件中有效实现微处理器。
PBE。PBE(基于密码的加密)可以与多种消息摘要和私钥算法结合使用。

三 非对称密钥(公共密钥)
例如你有个信箱(物理信箱),开着一个缝隙(公钥),大家都能往里塞东西,但是一旦赛进取,那可不是大家都能取到的,只有拥有信箱钥匙(私钥)才能得到。当然当我们反过来理解的时候就有些和信箱不同的地方。也就是用私钥加密的东西只有对应的公钥才能进行解密,这种算法经常被应用在数字签名上。其实在现实中你可以将公钥技术和私钥技术结合起来完成信息保密,因为公钥的计算速度相当慢,比私钥慢大约100-1000倍。下面是一些非对称密钥算法列表:

RSA:这个算法是最流行的公钥密码算法,使用长度可以变化的密钥。1978年提出。
Diffie-Hellman:技术上将这种算法称为密钥协定算法。它不能用于加密,但可以用来允许双方通过在公用通道上共享信息来派生出秘钥。然后这个密钥可以用于私钥加密。

ECC(Ellipric Curves Cryptography):椭圆曲线密码便码学。


需要注意的是私钥和密钥是成对的,并且不能用一个生成另外一个,特别是不能用公钥生成私钥,否则就麻烦了。

四 认证和不可抵赖
我们经常在论坛中中见到管理员、斑竹等身份标识,并且我们更明白拥有不同的身份它们的权限也同样有差别。

认证的实现方法多种多样。但其基础技术有如下列表:
基于口令的身份认证
基于令牌的物理标识和认证(很前沿的技术,目前实际应用较少)
基于生物测定学的认证(很前沿的技术,目前实际应用较少)
基于证书的认证
下面就分别将这些认证做一介绍:

基于口令的身份认证
太熟悉了,不是吗?这里只很想告诉口令暴露的过程以及保护的过程。我们通常见到的口令认证方式是在传输过程中口令完全暴露,并且在服务器端的口令存储上也完全是明文的形式,造成的后果是口令完全被暴露,很容易被监听。那么如何保护这些过程中的口令呢?暂时的思路是:建立在安全传输层的基础上,内部口令不以明文形式出现。

基于证书的认证

近年来相当流行的认证技术应该是基于证书的认证。其实证书就是一个数据块,主要包括公开密钥、主体相关的信息、证书有效的日期、证书发行者的信息和证书发行者生成的签名。

其实整个过程很简单,我就认为是二次数字签名就是了。第一次首先需要证书的实体将自己的信息和公钥提交给CA,CA确认该组织的可信赖之后,就用自己的密钥对该实体的信息和公钥进行签名。最后被签名的信息会就叫证书。站在用户的角度,用户首先接到一个证书,当然会根据CA(可信)提供的公钥进行解密,如果能解密,当然就可以获得可信赖的信息和实体公钥。然后由实体公钥再进行前面我们介绍的数字签名解密步骤。呵呵,就这样,由介绍完了。

五 安全套接字层
安全套接字层(SSL)和取代它的传输层安全性(TLS)是用于在客户机和服务器之间构建安全的通信通道的协议。它也用来为客户机认证服务器,以及(不太常用的)为服务器认证客户机。该协议在浏览器应用程序中比较常见,浏览器窗口底部的锁表明 SSL/TLS 有效。
TLS 1.0 和 SSL 3.1 一样。
SSL/TLS 使用本教程中已经讨论过的三种密码术构件的混合体,但这一切都是对用户透明的。以下是该协议的简化版本:

n 当使用 SSL/TLS(通常使用 https:// URL)向站点进行请求时,从服务器向客户机发送一个证书。客户机使用已安装的公共 CA 证书通过这个证书验证服务器的身份,然后检查 IP 名称(机器名)与客户机连接的机器是否匹配。

n 客户机生成一些可以用来生成对话的私钥(称为会话密钥)的随机信息,然后用服务器的公钥对它加密并将它发送到服务器。服务器用自己的私钥解密消息,然后用该随机信息派生出和客户机一样的私有会话密钥。通常在这个阶段使用 RSA 公钥算法。

n 然后,客户机和服务器使用私有会话密钥和私钥算法(通常是 RC4)进行通信。使用另一个密钥的消息认证码来确保消息的完整性。

六 其它加密技术
1 QQ的安全问题

QQ本身数据的加密用的是TEA算法:

算法介绍网址: http://www.ftp.cl.cam.ac.uk/ftp/papers/djw-rmn/djw-rmn-tea.html

***********************************************************************

QQ登陆的流程是这样的:

1.输入用户名密码(应用了键盘加密技术)

2.本地验证通过(本地密码保存在ewh.db文件中,该密码是经过数万次的md5运算后的密码)

3.得到用户界面(企鹅开始闪动)

4.发送登陆包(TEA算法加密)

5.收到登陆包成功响应(tea算法解密)

6.登陆成功。

***********************************************************************

qq聊天信息加密技术(Tea算法):

聊天信息保存在MSGEX.DB这个文件你把这个文件下载后如果把它复制到别的电脑里,在别的电脑里也可以看到你的聊天记录了!

qq密码加密技术(tea与md5相结合):

密码保存在一个叫User.db,ewh.db,auto.db和AutoLogin.db(如果选择自动登陆)的文件里面,是经过数万次的MD5运算后存在本地文件中,

QQ的安全问题

UC的加密方法——兼谈Blowfish算法

2 各种加密算法比较

算法
机密性
验证
完整性
密钥管理

对称加密算法
YES
N O
NO
YES

公钥加密算法
YES
NO
NO
YES

数字签名算法
NO
YES
YES
NO

密钥共识算法
YES
可选
NO
YES

单向Hash函数
NO
NO
YES
NO

消息验证密码
NO
YES
YES
NO


结章
加密算法的选择

由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密的速度。当数据量很小时,我们可以考虑采用非对称加密算法。

对称加密算法不能实现签名,因此签名只能非对称算法。

在实际的操作过程中,我们通常采用的方法是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128位即可。

参考资料:

http://www.freeyy.com/bbs/read.php?tid=14887

http://www.bluejade.cn/cmd.asp?act=tb&id=26


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wqf363/archive/2007/01/22/1490314.aspx

你可能感兴趣的:(设计模式,算法,应用服务器,qq,浏览器)