安全的基础----学习java安全之前的准备

1/5/2008来源:Java教程人气:4557


  安全的基础知识
在高度保证企业应用程序安全的过程中我们不免会考虑到如下的安全需求,然后我们针对这些安全需求提出各种安全技术:
1、 完整性验证(Integrity Verification)。也就是以防止我们需要的内容不被篡改,仍然不吃其真实性。
2、 机密性保持(Confidentiality PReservation)。通俗的说就是防止内容被别人读懂。
3、 认证和访问授权(Authenticity Permission)。通俗的说就是对来访者提供的信息进行分析和判定,从而确定来访者身份。然后根据身份决定该来访者具有什么权限。
4、 不可抵赖的证据(Nonrepudiation Evidence)。据个很简单的例子,假如在网上进行相应的支付操作。假如我已经给他们钱了,但他们仍然说我没给他们怎么办?好了,这里你只要明白我们后面的介绍的技术会解决这个问题的。
5、 审计证据(Auditing Evidence)。对一些安全性十分重要的数据操作进行纪录和观察。

针对上面提到的需求列表对各个技术进行比较粗略地介绍。具体内容请从luopc@edu-edu.com.cn 获取。

加密技术

加密技术是其它安全服务技术的基础,他们的穿插使用相当广泛。所以在学习软件安全技术之前了解各种加密技术是相当重要的。
加密技术的分类

1、消息摘要

消息摘要主要用于保持数据的完整性,我们经常听到的校验和就是消息摘要的一个特例。它的算法是一个单项函数。也就是直接将输入的数据进行消息摘要提取,但绝不能从消息摘要生成原数据。消息摘要的算法分为如下几类(最常用的是md5和SHA-1):
u MD2:是一个速度很慢但相当安全的算法,它产生128位的摘要值。
u MD4:速度很快,但安全性下降。同样产生128位的摘要值。
u MD5:是MD4的一个更安全的版本,同时速度更快。也产生128位的摘要值。
u SHA:安全哈希算法,产生一个160位的摘要值。
u SHA-1:在克服SHA的一些缺陷基础上形成的哈希算法。
u SHA-256、SHA-383 和 SHA-512 提供更长的指纹,大小分别是 256 位、383 位和 512 位。
u MAC:消息认证码,使用秘密密钥和消息摘要算法来创建消息摘要。我们可能经常会疑问,我们有了消息摘要为什么还要认证码呢?听我给你举个例子,前面的提到的消息摘要,只要有明文和算法,谁都可以生成同样的消息摘要,但有时为了非凡的目的我们需要只有特定的人才能生成这个摘要。好了,那怎么办?通过在生成消息摘要的过程中加入相应的密钥,从而使生成的消息摘要在没有密钥的情况下难以生成。

2、对称密钥(私钥加密)

对称密钥应该是相当强壮的信息加密算法。这和我们生活中的钥匙极为相像。例如你家的门锁可以有好几把钥匙,并且这些钥匙都相同。在现实生活中,你可以将做好的钥匙收递手交给你的亲人,但在网络中就变了,你要通过网络来传递这把钥匙。所以对钥匙的保护又需要相应的加密技术。好了,通过这个通俗的例子,你应该知道对称密钥干什么?它的弱点在哪里?等问题的答案了吧。下面是一些最普通的对称密钥算法:
u DES:DES(数据加密标准)是由 IBM 于上世纪 70 年代发明的,美国政府将其采纳为标准,使用56位的密钥。
u 3-DES(TripleDES):该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两个密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度。TripleDES 有时称为 DESede(表示加密、解密和加密这三个阶段)。
u RC2和RC4:可以使用2048位的密钥并且提供了一个十分安全的算法。他们都来自于领先的加密安全性公司 RSA Security。
u RC5:使用了一种可配置的密钥大小。也来自领先的加密安全性公司 RSA Security。
u AES:AES(高级加密标准)取代 DES 成为美国标准。它是由 Joan Daemen 和 Vincent Rijmen 发明的,也被称为 Rinjdael 算法。它是 128 位分组密码,密钥长度为 128 位、192 位或 256 位。
u Blowfish:这种算法是由 BrUCe Schneier 开发的,它是一种具有从 32 位到 448 位(都是 8 的整数倍)可变密钥长度的分组密码,被设计用于在软件中有效实现微处理器。
u PBE。PBE(基于密码的加密)可以与多种消息摘要和私钥算法结合使用。

3、非对称密钥(公共密钥)

我们在介绍对称密钥的时候举了一个例子,提到了密钥传输的安全问题。并且在网络中的传输双方并不是我们现实中的“亲人”关系。那么公钥正好解决了这个问题。我这里举个通俗的例子,例如你有个信箱(物理信箱),开着一个缝隙(公钥),大家都能往里塞东西,但是一旦赛进取,那可不是大家都能取到的,只有拥有信箱钥匙(私钥)才能得到。哈哈!就这样。公钥就这样,不要担心它多难理解。当然当我们反过来理解的时候就有些和信箱不同的地方。也就是用私钥加密的东西只有对应的公钥才能进行解密,这种算法经常被应用在数字签名上。其实在现实中你可以将公钥技术和私钥技术结合起来完成信息保密,因为公钥的计算速度相当慢,比私钥慢大约100-1000倍。下面是一些非对称密钥算法列表:
u RSA:这个算法是最流行的公钥密码算法,使用长度可以变化的密钥。
u Diffie-Hellman:技术上将这种算法称为密钥协定算法。它不能用于加密,但可以用来答应双方通过在公用通道上共享信息来派生出秘钥。然后这个密钥可以用于私钥加密。
需要注重的是私钥和密钥是成对的,并且不能用一个生成另外一个,非凡是不能用公钥生成私钥,否则就麻烦了。

认证和不可抵赖

我们经常在论坛中中见到治理员、斑竹等身份标识,并且我们更明白拥有不同的身份它们的权限也同样有差别。但我们很想拥有治理员的权限,我们的突破口应该在哪里呢?当然是获得一个治理员的账号,这样就可以被系统的认证系统识别。通俗的说就是要让系统的认证识别器确认你是治理员身份就可以了。呵呵,没那么轻易,因为各个系统都具有严密的认证体系,不象一些小朋友做的认证逻辑处在sql语句逻辑上那么简单。
认证的实现方法多种多样,真的,我以前做网站的时候总是想当然地进行用户认证。但其基础技术有如下列表:
u 基于口令的身份认证
u 基于令牌的物理标识和认证
u 基于生物测定学的认证
u 基于证书的认证
下面就分别将这些认证做一介绍:

基于口令的身份认证

太熟悉了,不是吗?这里只很想告诉口令暴露的过程以及保护的过程。我们通常见到的口令认证方式是在传输过程中口令完全暴露,并且在服务器端的口令存储上也完全是明文的形式,造成的后果是口令完全被暴露,很轻易被监听。那么如何保护这些过程中的口令呢?暂时的思路是:建立在安全传输层的基础上,内部口令不以明文形式出现。好了,不多说了,需要了解更具体的内容请发邮件到:luopc@edu-edu.com.cn。

基于令牌的物理标识和认证

功能我们不用说,当然是非常强大,但代价昂贵。你见过这样的认证吗?呵呵,很少的话,就了解一下就行了,要更多了解劝你先研究一下ATM机和ATM卡或者给我发邮件:luopc@edu-edu.com.cn。

基于生物测定学的认证

想想就知道了,你的指纹、眼睛视网膜等可真是独一无二啊。呵呵,其复杂性也是很大的。我都部知道^^,当然你可以知道,别忘了告诉我luopc@edu-edu.com.cn。

基于证书的认证

近年来相当流行的认证技术应该是基于证书的认证。证书的概念和我们现实中的毕业证书、学位证书等没有多大差别。上面可以记载一些事实信息(非凡是某一实体),那当然差别主要体现在数字技术的非凡需要上。其实证书就是一个数据块,主要包括公开密钥、主体相关的信息、证书有效的日期、证书发行者的信息和证书发行者生成的签名。
不是“亲人”那我们就得搞清楚对方是什么?不然的话,我们怎么能把“她”的东西拿来用呢?或者怎么能把咱们的东西给“她”呢?“她”得拿出个什么凭据吧?呵呵,那当然。这无可非议,可能现在你更急切的就是想知道这个证书的签发和应用过程吧?好了。我们继续。
我们前面已经谈过将公钥技术反过来可以应用于数字签名。但这种前面谁都可以签的,数字签名仅仅能解决消息来源真是你拥有公钥的主人,但并不能说明该主人就是一个多么“可爱”的家伙。哎!完了,没法确定她是否“可爱”了。但我倒有个主意,我们去找一个非凡了解此人的人(当然要权威了)问问看此人是否信得过。哈哈,就是这样,我们经常说的CA机构就是干这事情的。爽!那么整个过程如何呢?
其实整个过程很简单,我就认为是二次数字签名就是了。第一次首先需要证书的实体将自己的信息和公钥提交给CA,CA确认该组织的可信赖之后,就用自己的密钥对该实体的信息和公钥进行签名。最后被签名的信息会就叫证书。站在用户的角度,用户首先接到一个证书,当然会根据CA(可信)提供的公钥进行解密,假如能解密,当然就可以获得可信赖的信息和实体公钥。然后由实体公钥再进行前面我们介绍的数字签名解密步骤。呵呵,就这样,由介绍完了。

安全套接字层

安全套接字层(SSL)和取代它的传输层安全性(TLS)是用于在客户机和服务器之间构建安全的通信通道的协议。它也用来为客户机认证服务器,以及(不太常用的)为服务器认证客户机。该协议在浏览器应用程序中比较常见,浏览器窗口底部的锁表明 SSL/TLS 有效。
TLS 1.0 和 SSL 3.1 一样。
SSL/TLS 使用本教程中已经讨论过的三种密码术构件的混合体,但这一切都是对用户透明的。以下是该协议的简化版本:
? 当使用 SSL/TLS(通常使用 https:// URL)向站点进行请求时,从服务器向客户机发送一个证书。客户机使用已安装的公共 CA 证书通过这个证书验证服务器的身份,然后检查 IP 名称(机器名)与客户机连接的机器是否匹配。
? 客户机生成一些可以用来生成对话的私钥(称为会话密钥)的随机信息,然后用服务器的公钥对它加密并将它发送到服务器。服务器用自己的私钥解密消息,然后用该随机信息派生出和客户机一样的私有会话密钥。通常在这个阶段使用 RSA 公钥算法。
? 然后,客户机和服务器使用私有会话密钥和私钥算法(通常是 RC4)进行通信。使用另一个密钥的消息认证码来确保消息的完整性。

from-javaresearch.org