安全的基础知识
在高度保证企业应用程序安全的过程中我们不免会考虑到如下的安全需求,然后我们针对这些安全需求提出各种安全技术:
1、 完整性验证(Integrity Verification)。也就是以防止我们需要的内容不被篡改,仍然不失其真实性。
2、 机密性保持(Confidentiality Preservation)。通俗的说就是防止内容被别人读懂。
3、 认证和访问授权(Authenticity Permission)。通俗的说就是对来访者提供的信息进行分析和判断,从而确定来访者身份。然后根据身份决定该来访者具有什么权限。
4、 不可抵赖的证据(Nonrepudiation Evidence)。据个很简单的例子,如果在网上进行相应的支付操作。如果我已经给他们钱了,但他们仍然说我没给他们怎么办?好了,这里你只要明白我们后面的介绍的技术会解决这个问题的。
5、 审计证据(Auditing Evidence)。对一些安全性十分重要的数据操作进行纪录和观察。
针对上面提到的需求列表对各个技术进行比较粗略地介绍。
加密技术
加密技术是其它安全服务技术的基础,他们的穿插使用相当广泛。所以在学习软件安全技术之前了解各种加密技术是相当重要的。
加密技术的分类
1、消息摘要
消息摘要主要用于保持数据的完整性,我们经常听到的校验和就是消息摘要的一个特例。它的算法是一个单项函数。也就是直接将输入的数据进行消息摘要提取,但绝不能从消息摘要生成原数据。消息摘要的算法分为如下几类(最常用的是MD5和SHA)。
MD2:是一个速度很慢但相当安全的算法,它产生128位的摘要值。
MD4:速度很快,但安全性下降。同样产生128位的摘要值。
MD5:是MD4的一个更安全的版本,同时速度更快。也产生128位的摘要值。
SHA:安全哈希算法,产生一个160位的摘要值。
SHA-1:在克服SHA的一些缺陷基础上形成的哈希算法。
SHA-256、SHA-383 和 SHA-512 提供更长的指纹,大小分别是 256 位、383 位和 512 位。
MAC:消息认证码,使用秘密密钥和消息摘要算法来创建消息摘要。我们可能经常会疑问,我们有了消息摘要为什么还要认证码呢?听我给你举个例子,前面的提到的消息摘要,只要有明文和算法,谁都可以生成同样的消息摘要,但有时为了特殊的目的我们需要只有特定的人才能生成这个摘要。好了,那怎么办?通过在生成消息摘要的过程中加入相应的密钥,从而使生成的消息摘要在没有密钥的情况下难以生成。
2、对称密钥(私钥加密)
对称密钥应该是相当强壮的信息加密算法。这和我们生活中的钥匙极为相像。例如你家的门锁可以有好几把钥匙,并且这些钥匙都相同。在现实生活中,你可以将做好的钥匙收递手交给你的亲人,但在网络中就变了,你要通过网络来传递这把钥匙。所以对钥匙的保护又需要相应的加密技术。好了,通过这个通俗的例子,你应该知道对称密钥干什么?它的弱点在哪里?等问题的答案了吧。下面是一些最普通的对称密钥算法:
DES:DES(数据加密标准)是由 IBM 于上世纪 70 年代发明的,美国政府将其采纳为标准,使用56位的密钥。
3-DES(TripleDES):该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两个密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度。TripleDES 有时称为 DESede(表示加密、解密和加密这三个阶段)。
RC2和RC4:可以使用2048位的密钥并且提供了一个十分安全的算法。他们都来自于领先的加密安全性公司 RSA Security。
RC5:使用了一种可配置的密钥大小。也来自领先的加密安全性公司 RSA Security。
AES:AES(高级加密标准)取代 DES 成为美国标准。它是由 Joan Daemen 和 Vincent Rijmen 发明的,也被称为 Rinjdael 算法。它是 128 位分组密码,密钥长度为 128 位、192 位或 256 位。
Blowfish:这种算法是由 Bruce Schneier 开发的,它是一种具有从 32 位到 448 位(都是 8 的整数倍)可变密钥长度的分组密码,被设计用于在软件中有效实现微处理器。
PBE。PBE(基于密码的加密)可以与多种消息摘要和私钥算法结合使用。
3、非对称密钥(公共密钥)
我们在介绍对称密钥的时候举了一个例子,提到了密钥传输的安全问题。并且在网络中的传输双方并不是我们现实中的“亲人”关系。那么公钥正好解决了这个问 题。我这里举个通俗的例子,例如你有个信箱(物理信箱),开着一个缝隙(公钥),大家都能往里塞东西,但是一旦赛进取,那可不是大家都能取到的,只有拥有 信箱钥匙(私钥)才能得到。哈哈!就这样。公钥就这样,不要担心它多难理解。当然当我们反过来理解的时候就有些和信箱不同的地方。也就是用私钥加密的东西 只有对应的公钥才能进行解密,这种算法经常被应用在数字签名上。其实在现实中你可以将公钥技术和私钥技术结合起来完成信息保密,因为公钥的计算速度相当慢,比私钥慢大约100-1000倍。下面是一些非对称密钥算法列表:
RSA:这个算法是最流行的公钥密码算法,使用长度可以变化的密钥。
Diffie-Hellman:技术上将这种算法称为密钥协定算法。它不能用于加密,但可以用来允许双方通过在公用通道上共享信息来派生出秘钥。然后这个密钥可以用于私钥加密。
需要注意的是私钥和密钥是成对的,并且不能用一个生成另外一个,特别是不能用公钥生成私钥,否则就麻烦了。
认证和不可抵赖
我们经常在论坛中中见到管理员、斑竹等身份标识,并且我们更明白拥有不同的身份它们的权限也同样有差别。但我们很想拥有管理员的权限,我们的突破口应该在哪里呢?当然是获得一个管理员的账号,这样就可以被系统的认证系统识别。通俗的说就是要让系统的认证识别器确认你是管理员身份就可以了。呵呵,没那么容易,因为各个系统都具有严密的认证体系,不象一些小朋友做的认证逻辑处在sql语句逻辑上那么简单。
认证的实现方法多种多样,真的,我以前做网站的时候总是想当然地进行用户认证。但其基础技术有如下列表:
基于口令的身份认证
基于令牌的物理标识和认证
基于生物测定学的认证
基于证书的认证
下面就分别将这些认证做一介绍:
基于口令的身份认证
太熟悉了,不是吗?这里只很想告诉口令暴露的过程以及保护的过程。我们通常见到的口令认证方式是在传输过程中口令完全暴露,并且在服务器端的口令存储上也完全是明文的形式,造成的后果是口令完全被暴露,很容易被监听。那么如何保护这些过程中的口令呢?暂时的思路是:建立在安全传输层的基础上,内部口令不以明文形式出现。
基于令牌的物理标识和认证
功能我们不用说,当然是非常强大,但代价昂贵。你见过这样的认证吗?呵呵,很少的话,就了解一下就行了,要更多了解劝你先研究一下ATM机和ATM卡。
基于生物测定学的认证
想想就知道了,你的指纹、眼睛视网膜等可真是独一无二啊。呵呵,其复杂性也是很大的。我都不知道^^。
基于证书的认证
近年来相当流行的认证技术应该是基于证书的认证。证书的概念和我们现实中的毕业证书、学位证书等没有多大差别。上面可以记载一些事实信息(特别是某一实体),那当然差别主要体现在数字技术的特殊需要上。其实证书就是一个数据块,主要包括公开密钥、主体相关的信息、证书有效的日期、证书发行者的信息和证书 发行者生成的签名。
不是“亲人”那我们就得搞清楚对方是什么?不然的话,我们怎么能把“她”的东西拿来用呢?或者怎么能把咱们的东西给“她”呢?“她”得拿出个什么凭据吧?呵呵,那当然。这无可非议,可能现在你更急切的就是想知道这个证书的签发和应用过程吧?好了。我们继续。
我们前面已经谈过将公钥技术反过来可以应用于数字签名。但这种前面谁都可以签的,数字签名仅仅能解决消息来源真是你拥有公钥的主人,但并不能说明该主人就是一个多么“可爱”的家伙。哎!完了,没法确定她是否“可爱”了。但我倒有个主意,我们去找一个特别了解此人的人(当然要权威了)问问看此人是否信得过。 哈哈,就是这样,我们经常说的CA机构就是干这事情的。爽!那么整个过程如何呢?
其实整个过程很简单,我就认为是二次数字签名就是了。第一次首先需要证书的实体将自己的信息和公钥提交给CA,CA确认该组织的可信赖之后,就用自己的密钥对该实体的信息和公钥进行签名。最后被签名的信息会就叫证书。站在用户的角度,用户首先接到一个证书,当然会根据CA(可信)提供的公钥进行解密,如果能解密,当然就可以获得可信赖的信息和实体公钥。然后由实体公钥再进行前面我们介绍的数字签名解密步骤。呵呵,就这样,由介绍完了。
安全套接字层
安全套接字层(SSL)和取代它的传输层安全性(TLS)是用于在客户机和服务器之间构建安全的通信通道的协议。它也用来为客户机认证服务器,以及(不太常用的)为服务器认证客户机。该协议在浏览器应用程序中比较常见,浏览器窗口底部的锁表明 SSL/TLS 有效。
TLS 1.0 和 SSL 3.1 一样。
SSL/TLS 使用本教程中已经讨论过的三种密码术构件的混合体,但这一切都是对用户透明的。以下是该协议的简化版本:
当使用 SSL/TLS(通常使用 https:// URL)向站点进行请求时,从服务器向客户机发送一个证书。客户机使用已安装的公共CA 证书通过这个证书验证服务器的身份,然后检查 IP 名称(机器名)与客户机连接的机器是否匹配。
客户机生成一些可以用来生成对话的私钥(称为会话密钥)的随机信息,然后用服务器的公钥对它加密并将它发送到服务器。服务器用自己的私钥解密消息,然后用该随机信息派生出和客户机一样的私有会话密钥。通常在这个阶段使用 RSA 公钥算法。
然后,客户机和服务器使用私有会话密钥和私钥算法(通常是 RC4)进行通信。使用另一个密钥的消息认证码来确保消息的完整性。
分享到:
相关推荐
Java安全涉及多个方面,包括加密和解密、安全认证和授权、安全通信和防护,以及安全漏洞扫描。本文将深入探讨这些关键知识点。 首先,加密和解密是信息安全的基础。对称加密,如DES和AES,使用相同的密钥进行加解密...
Java是一种广泛使用的面向对象的编程...通过深入学习,你不仅可以提升编程技巧,还能培养良好的编程思维,为解决复杂问题做好准备。无论你是打算从事Java开发,还是想要提升现有技能,这份资料都将是一份宝贵的资源。
这份"Java 基础学习PPT"是专为初学者设计的教程,旨在帮助那些准备踏入Java编程领域的学习者建立坚实的基础。以下是PPT中可能包含的主要知识点: 1. **第一章:Java概述** - Java的历史:由James Gosling在Sun ...
5. **实践项目**:理论学习后,通过实际项目应用所学知识,如构建一个小型的Java应用或网站,增强编程技能。 6. **持续学习和跟进技术更新**:Java是一个不断发展的语言,定期阅读官方文档,参与社区讨论,保持技术...
"学习的java代码"这个标题表明这是一个关于Java编程的学习资源集合,涵盖了Java Standard Edition(SE)的大部分核心内容。Java SE是Java的基础平台,包括用于构建桌面应用程序、Web应用程序和分布式系统的关键组件...
在进行Java串口编程之前,需要了解和准备一些基础知识和工具,以便顺利地实现串口通信。 首先,理解串行通信的基本概念是必要的。串口通信(Serial Communication)是指数据以串行方式按位发送和接收,通常通过串行...
总的来说,Java安全性教程是一个为中级Java程序员设计的学习资源,它涵盖了密码学基础,以及如何在Java中实现这些概念,以提高应用程序的安全性。通过学习,开发者不仅可以提升编程技能,还能增强对网络安全和数据...
10. **面试准备**:常见的Java面试问题和答案,帮助求职者在面试中表现出色。 通过深入学习和实践这些资料,无论是初学者还是经验丰富的开发者,都能不断提升自己的Java编程能力,掌握这一强大的编程语言。
此外,由于其稳定性和安全性,Java也是许多嵌入式系统的首选语言。 学习Java通常涉及以下几个步骤: 1. 安装JDK,并配置环境变量,如JAVA_HOME和PATH,确保系统能找到Java命令。 2. 学习Java的基础语法,包括数据...
同时,学习Web开发的基础,如HTML、CSS和JavaScript,以及Linux操作系统和Web性能及安全原则,为搭建和管理Web服务器做准备。 阶段二,深入JavaEE框架技术。在这个阶段,学员将接触更高级的Java应用开发,如使用...
文件"Java安全性编程实例.doc"很可能是包含具体代码示例和详细解释的学习材料,它将帮助初学者将理论知识与实际操作相结合,通过实例深入理解和应用Java安全编程技巧。在阅读和学习这份文档时,务必动手实践,通过...
Java课程学习课堂讲义是为Java初学者和爱好者准备的一份宝贵资料,它涵盖了Java语言的基础到高级概念,旨在帮助读者全面理解并掌握这门强大的编程语言。这份讲义可能是由经验丰富的讲师编撰,结合了理论与实践,旨在...
"Java 入门学习PPT"是一份专为初学者准备的教程资料,旨在帮助学习者快速掌握Java的基础知识。 在学习Java时,首先要了解其基本概念,包括语法结构、变量、数据类型、运算符以及控制流程。Java支持八种基本数据类型...
这份"Java学习文档"是为那些想要深入理解Java编程的人准备的,无论你是初学者还是有一定经验的开发者,都能从中受益。 文档首先可能会介绍Java的基础知识,例如Java的安装和环境配置,以及编写第一个"Hello, World!...
Java编程入门学习资料是针对初学者精心准备的一套教程,旨在帮助零基础的学员快速掌握Java编程语言的基础概念和核心语法。在这个过程中,你将了解Java的历史、特点以及其广泛的应用领域,为后续深入学习打下坚实的...
在IT行业中,Java是一种广泛应用的高级编程语言,尤其在企业级应用、云计算、...同时,像"1.01 第一个Java程序"这样的基础教程是每个Java初学者的必经之路,它将帮助构建坚实的基础,为未来的复杂编程挑战做好准备。
这个"Java基础练习项目合集"是为那些希望深入理解Java基础知识的学习者准备的宝贵资源。以下是一些核心的Java知识点,通过这个项目合集,你可以系统地学习和实践: 1. **Java语法基础**:学习Java的第一步就是熟悉...
通过"SCJP大全.exe"的学习资源,你可以系统地掌握这些Java基础知识,并通过模拟试题进行实战演练,提升编程能力,为通过SCJP认证做好充分准备。同时,这个资源对于任何希望加深对Java理解的人来说,都是一个宝贵的...
《企业级Java安全性-构建安全的J2EE应用》是一本专为Java开发人员和架构师准备的安全指南,旨在帮助他们构建更为坚固、安全的J2EE应用程序。这本书深入探讨了Java安全框架的核心概念和最佳实践,对于那些希望提升...