计算机系统开发安全是永远都不能回避的问题,这里我想写一篇关于计算机安全的笔记,便于我以后相关问题和知识的查找,今天的文章不讲如何去写加密解密程序,而是宏观的介绍加密加密的相关知识,从整体把控加密解密所涉猎的方方面面,我后面博客会讲解java里实现这些算法的方式,本文作为其铺垫。
安全技术的目标:
安全技术的目标包括九个方面,它们分别是:
1) 保密性:确保数据仅能被合法的用户访问,数据不能被没有被授权的用户访问。
2) 完整性:指数据只能由授权方或以授权的方式进行修改,即数据在传输的过程中不能被未授权的用户修改。
3) 可用性:确保所有的数据仅在适当的时候可以由授权方访问。
4) 可靠性:主要是确保系统能在规定的条件下、规定的时间内、完成规定的功能时具有稳定的概率。
5) 抗否认性:也称抗抵赖性,主要确保发送方与接收方在执行各自操作后,对所做的操作不可否认。
6) 可控性:主要是对信息及信息系统实施安全监控。
7) 可审查性:主要是通过审计、监控、抗否认性等安全机制,确保数据访问者(包括合法用户、攻击者、破坏者、抵赖者)的行为有证可查,当网络出现安全问题时候,提供调查的依据和手段
8) 认证(鉴别):主要是确保数据访问者和信息服务者的身份真实有效。
9) 访问控制:主要是确保数据不被非授权方或以未授权方式使用。
计算机系统安全服务和安全机制:
计算机系统安全服务和安全机制都是根据OSI安全体系架构里总结出来的,安全服务有5大类,安全机制有8个,安全机制是实现安全服务的手段。
系统安全服务有五大类,它们分别是:
1) 认证(鉴别)服务:在网络交互过程中,对收发双方的身份及数据来源进行验证。
2) 访问控制服务:防止未授权的用户非法访问资源,包括用户身份认证和用户权限确认。
3) 数据保密性服务:防止数据在传输中 被破解、泄露。
4) 数据完整性服务:防止数据在传输中被篡改。
5) 抗否认性服务:也称为抗抵赖服务或确认服务。防止发送方与接收方在执行各自操作后,否认各自的操作。
安全机制包括八类,他们分别是:
1) 加密机制:加密机制就是对数据进行加密,通过对数据加密,可以提供数据的保密性,能够防止数据在传输过程中被窃取。常用的加密算法有:对称加密算法,例如des算法和非对称加密算法例如rsa算法。
2) 数字签名机制:认证(鉴别)服务的一种实现机制,数字签名可以实施用户身份认证和消息认证,它具有解决双方纠纷的能力,在数字签名技术的基础上,为了鉴别软件的有效性又产生了代码签名技术,常用 的签名算法有rsa算法和dsa算法。
3) 访问控制机制:访问控制机制对应访问控制服务,它是通过预先设定好的规则对用户所访问的数据进行限制。通常是通过用户的用户名和密码进行验证,其次是通过用户的角色和用户组等规则进行验证,验证通过后,用户才能访问相应的限制资源。
4) 数据完整性机制:数据完整性机制对应数据完整性服务,它的作用是为了避免数据在传输过程中受到干扰,同时防止数据在传输过程中被篡改,以提高数据传输完整性,通常使用单向的加密算法对数据加密,生成唯一验证码,用以校验数据的完整性,常用的算法有md5算法和sha算法。
5) 认证机制:认证机制是对应认证(鉴别)服务,它的目的是验证接收方所接收到的数据是否来源于所期望的发送方,通常可以使用数字签名来进行认证,常用的算法有rsa算法和dsa算法。
6) 业务流填充机制:也被称为流填充机制,它对应于数据保密服务,业务流填充机制通过在数据传输过程中传输随机数的方式,混淆真实的数据,加大数据破解的难度,提高数据的保密性。
7) 路由控制机制:路由控制机制对应访问控制服务,它为数据发送方选择安全网络通信路径,避免发送方使用不安全路径发送数据,提高数据的安全性。
8) 公证机制:它对应抗否认服务,它的作用在于解决收发方的纠纷问题,确保双方利益不受损坏,这就好比现实中签合同,请第三方机构公证的作用。
安全机制对安全服务做了详尽的补充,针对各种服务选择相应的安全机制可以有效的提高应用的安全性。
下面介绍下密码学的一些术语:
1) 明文:待加密的信息。
2) 密文:经过加密后的明文。
3) 加密:将明文转化为密文的过程。
4) 加密算法:指明文转化为密文的算法。
5) 加密密钥:指明文变为密文的转换算法。
6) 解密、解密算法和解密密钥是加密、加密算法和加密密钥的逆向算法。
7) 柯克霍夫原则:数据的安全性是基于密钥而不是算法本身的保密,也就是说密码学的加密性都是基于对密钥的保密,算法不用保密,这个原则是现在密码学的基本原则。
下面我来介绍下当前流行的几种密码体制,它们分别是:
1) 古典密码:古典密码是以语言学为基础,对文字进行字符转化,最核心的有两种加密技巧:移位和替代,移位和替代也是对称加密算法里常用的算法。移位算法也叫错位算法,就是讲数字重新排序,例如123456变成341265。替代算法也叫置换算法,将明文中的一组字符替代成其他的字符,形成密文,例如:Hello Word变成IFMMP XPSE,每个字母用下一个字母代替。前面两种基本算法又被演变为很多分支,这些分支加入更加复杂的算法,让加密更加可靠,下面我将一一介绍这些分支,第一个是单表替代密码,它会将明文的一个字符用相应密文字符替代,加密过程中从明文字母表到明文字母表一一映射,主要包括移位密码、乘数密码、仿射密码、多项式密码、密钥短语密码,第二种是同音替代密码,它与单表替代密码相似,不同的是单个字符明文可以映射密文的几个字符中的一个,例如a字母可以对应2,5,11,吧、字母对应7,23,67.所以同音替代的密文并不唯一。多表替代密码,它是指明文中的字符映射到密文空间的字符还依赖于它在上下文中的位置,由多个简单的代替密码所构成,例如可能有5个被使用的不同简单替代密码,单独的一个字符用来改变明文的每个字符的位置,弗吉尼亚密码、博福特密码、滚动密钥密码、弗拉姆密码、转子机密码均为多表替代密码,二次大战中的德军用的恩尼格玛密码机正是多表替代密码应用的典范。多字母替代密码:明文中字符被成组加密,例如“ABA”可能对应于“RTQ”,ABB可能对应于SLL等,希尔密码,Playfair密码均为多字母替代密码,在一战中英国人采用了这种密码。
2) 对称加密体制是古典密码学的延续,它使用的技巧任然是替代和移位,对称加密体制要求加密和解密使用同一个共享的密钥,解密和加密时互逆运算,通信的双方共享一个密钥,这就要求双方通信前必须商定好密钥,并且要妥善保存密钥。对称加密体制分为两种:一种是对明文的单个位或字节进行运算,称为流密码,也叫序列密码;另一种将明文信息划分为不同的组或块结构,分别对组或块进行加密和解密。
具体想了解对称加密算法,参见百度百科:
http://baike.baidu.com/link?url=pRyh8Xhdg70XSvkxxdq6ZwkXSC60HPRq0un2i2QqsEcRdl6S0wRcwNmnErqmxmiR
3) 非对称加密体制:非对称加密算法起源于1976年,它和对称加密算法区别是非对称加密体制的加密密钥和解密密钥是不同的,它分为两个密钥:一个叫公钥可以公开的,一个叫密钥它是保密的,非对称加密体制使得发送者和接收者无密钥传输的保密通信成为可能,弥补的对称加密体制的不足。非对称加密如果使用公钥加密,那么就必须用私钥解密,同样的如果信息用私钥加密,那么就得用公钥解密,非对称加密可以用于支持数字签名和验证。非对称加密算法的安全性依赖于计算复杂度的难题,通常来自于数论,例如当前流行的非对称加密算法源自于整数因子分解问题,DSA算法源自于离散对数问题。
详情可以参见百度百科的解释:
4) 哈希函数体制,哈希函数体制也叫离散函数体制或信息摘要体制或者叫单向函数或者叫杂凑函数,它的作用是用于验证数据的完整性的问题,哈希函数可以给数据创建数字指纹,数字指纹也叫哈希值,哈希值通常是一个短的随机字母和数字组成的字符串,哈希函数体制的特点是,不管多长的信息都可以进行哈希,不同信息算出的哈希值是不同的,两个不同的哈希值,那么哈希值的原始数据也不相同,哈希算法不可逆也就是哈希值推不出原始信息,常用的哈希算法有MD信息摘要算法,sha安全散列算法以及mac消息认证码算法。使用过java语言的人都知道Object类是所有类的基类,它里面有个hashCode方法,这就是每个对象的身份证了,它就使用了哈希算法,还有map键值对,如何标记每个对象的唯一性也是使用hash算法完成的,这些都是面试爱问的问题,了解了哈希函数就知道答案了。
哈希函数详情可以参见百度百科:
http://baike.baidu.com/view/549615.htm?fromId=131153
5) 数字签名技术:像一些安全性要求较高的网站常常会使用数字签名技术,数字签名包含对数据完整性、认证性和不可否认性三个特征。数字签名针对数字形式存储的信息进行处理,产生一种带有操作者身份信息的编码,执行数字签名的实体叫做签名者,签名过程中使用的算法叫签名算法,签名过程中生成的编码称为签名者对该信息的数字签名。发送者通过网络将信息连同验证签名一起发送给接收者,接收者收到信息和数字签名后,可以通过一个算法验证签名的真伪以及识别对应的签名者,这个过程叫验证过程,其过程使用的算法叫验证算法。数字签名离不开非对称加密体制,签名算法受私钥控制,并由签名者保密,验证者算法受公钥控制,对外公开。
数字签名的详情可以参见百度百科:
http://baike.baidu.com/view/7626.htm?fromId=297231
加密和解密算法渗透到计算机系统的方方面面,我们都知道它很重要,但是很多人做了多年开发,也不能完整理解整个加密和解密到底要解决那些问题,本文做一下这方面知识的普及。以后我会讲解java里实现上面这些算法的方式,有兴趣的童鞋可以跟踪我的博客哦。