安全的基础知识

在高度保证企业应用程序安全的过程中我们不免会考虑到如下的安全需求,然后我们针对这些安全需求提出各种安全技术

1、完整性验证(IntegrityVerification)。也就是以防止我们需要的内容不被篡改。

2、机密性保持(ConfidentialityPreservation)。通俗的说就是防止内容被别人读懂。

3、认证和访问授权(AuthenticityPermission)。通俗的说就是对来访者提供的信息进行分析和判断,从而确定来访者身份,然后根据身份决定该来访者具有什么权限。

4、不可抵赖的证据(NonrepudiationEvidence)。举个很简单的例子,如果你去银行交费,银行必须该你一个交过费的凭证,不然被别人私通怎么办?题外话:如果我们的银行弄假的话,我们肯定被欺无疑^^。

5、审计证据(AuditingEvidence)。对一些安全性十分重要的数据操作进行纪录和观察,相当于银行的那个摄像头,在需要的时候他们的作用你就知道。

针对上面提到的需求列表对各个技术进行比较粗略地介绍。详细内容请从email:janins@163.com获取。

加密技术(包括防止篡改技术)

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

加密技术的分类

1、消息摘要

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

java的安全管理 java安全技术有哪些_加密

  • 我们可能经常会疑问,我们有了消息摘要为什么还要认证码呢?听我给你举个例子,前面提到的消息摘要的算法可以确保消息摘要和具体的消息之间的一一对应,也就是只要你有相同的消息,采用相同的算法肯定能产生相同的消息摘要,但有时为了特殊的目的我们需要只有特定的人才能生成这个摘要,这时候我们可以通过在生成消息摘要的过程中加入相应的密钥,从而使生成的消息摘要在没有密钥的情况下难以生成。
    鉴于消息摘要的一一对应,经常在一些保护用户密码的地方我们采用了这种算法。例如,在银行系统,为了不让管理数据库的员工把你的密码看到,系统本身在你的密码存入库中之前就做了消息摘要的提取,这样库中别人看到的是一串奇怪的串,他也没法逆向获得你的明文密码。当然,如果银行的安全系统被控制,那什么事情都可以做。
2、对称密钥(私钥加密)

对称密钥应该是相当强壮的信息加密算法。这和我们生活中的钥匙极为相像。例如你家的门锁可以有好几把钥匙,并且这些钥匙都相同。在现实生活中,你可以将做好的钥匙手递手交给你的亲人,指要有了钥匙,你就可以打开你家的门。我们经常登陆网站用的用户名和密码的原理就是这样的。但密码等在网络传输中很容易被窃听和截取,为了确保传输安全我们必须和后面提到的传输相关的加密算法配合进行,例如我们在登陆时使用https。下面是一些最普通的对称密钥算法:

java的安全管理 java安全技术有哪些_加密_02

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

我们在介绍对称密钥的时候举了一个例子,提到了密钥传输的安全问题。并且在网络中的传输双方并不是我们现实中的“亲人”关系,为了达到双方的信任和安全,我们需要寻找一种机制,那么公钥正好解决了这个问题。我这里举个通俗的例子,例如你有个信箱(物理信箱),开着一个缝隙(公钥),大家都能往里塞东西,但是一旦塞进取,那可不是大家都能取到的,只有拥有信箱钥匙(私钥)才能得到。哈哈!就这样。公钥就这样,不要担心它多难理解。当然当我们反过来理解的时候就有些和信箱不同的地方。也就是用私钥加密的东西只有对应的公钥才能进行解密,这种算法经常被应用在数字签名上。其实在现实中你可以将公钥技术和私钥技术结合起来完成信息保密,因为公钥的计算速度相当慢,比私钥慢大约100-1000倍。下面是一些非对称密钥算法列表:


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