一. 密码学原理
1.加密的简单概念:将明文,即原始信息或文件,通过某种手段转化为密文,以达到信息安全的目的,这个手段就是加密。
上述过程用公式可以总结如下:
其中P为明文,Q为密文,K为加密参数(密钥),E为加密算法。
在现代加密技术中,机密算法本身是公开的,加密的安全性,完全由密钥来决定,这也叫Kerckhoffs准则。
2.加密算法的大致分类:
私钥加密技术:通信双方根据自己所持的私钥对信息进行加密解密。比如单字母替换就是一种私钥加密技术。单字母替换指26个字母间存在的一种替换规则,如A->E,B->K等。这个替换规则即是密钥。需要注意的是,这类私钥加密技术通过加密密钥可以容易的推出解密密钥,因此应用不甚广泛。
公钥加密技术:即公开加密密钥,用于解密的密钥被私密保存。这个体系之所以能被广泛采用,基于加密算法简单,而解密算法繁琐这一特点。比如经典的RSA加密算法,由加密密钥推出解密密钥是极其困难的。它基于这么一个数学知识:获取两个大质数的乘积很简单,但从乘积获取这两个大质数却十分困难。公钥加密技术的问题在于其运算速度较慢。
单向函数机制:基于如此事实:对于,由x,f 获得y十分简单,而由y,f 获得x往往十分困难。
3.数字签名:
数字签名本质上用于信息发送者告知对方当前信息由其本人发送。
数字签名的基本原理:1)发送者将信息(或文档)通过单向散列运算(如MD5)压缩为一个16字节(或32,64)的值。
2)发送者将散列值与其私钥加密,得到的签名块附加到文档最后发送。
3)接受方收到信息,用同样的散列运算(事先约定好)计算文档的散列值p。
4)接收方用发送方的公钥对签名块进行解密,得到散列值q。
5)比较p和q,若相等,则证明信息未被篡改,且发送者无误。
为了防止公钥被篡改,发送者往往在文档后附加数字证书,其包括了公钥,发送者姓名,可信第三方的数字签名。而后通过上述过程进行识别。
4.可信平台模块:
对于加密算法来说,密钥的安全保存至关重要。为了在不安全的系统中保存密钥,设计了一种称为可信平台模块(TPM)的芯片。该芯片是一种加密处理器,使用内部的非易失性存储介质来保存密钥。所有的加密解密操作都在其上进行。由于其是硬件,因此即使软件系统不安全,也能保证密钥安全存放。
二. 操作系统中的保护机制
1.保护域:域是(对象,权限)的集合,它规定了一个对象可以进行操作的集合。权限即使某种操作的执行许可。保护欲的作用即是禁止某些进程(或用户)对未授权对象进行访问。
2.最低权限原则:为了使系统安全性越高越好,域的设定十分关键,保证域中每个对象的权限最小且对象数量尽可能小的原则,即使最低权限原则。
3.为了便于进程跟踪域及域中对象,构造了一个矩阵模型。该模型如下:
file1 file2 file3
READ | READ/WRITE | |
EXEC | WRITE | |
WRITE | ||
READ/EXEC/WRITE |
每行表示域1,域2,域3,域4,每列表示对象,方块给出了权限集合。比如域1表示其中的进程可以对文件1读,对文件读/写
4.从上述矩阵模型可以看出,其中存在大量空隙,如果存储将十分浪费空间,为此提出了两种优化策略:
1) 访问控制列表:按列存放矩阵。对于上述矩阵,按列存放结果如下:
file1--------->[ A:R; C:W ]
file2--------->[ A:RW; B:E ]
file3--------->[ B:W; D:RWE ]
其中域1,2,3,4被简单视为用户A,B,C,D。上述表即被称为访问控制列表,其给出了所有可访问对象以及域如何访问它们。
2)权能字列表:按行存储矩阵。对于上述矩阵,按列存放结果如下:
A------>[ file1: R; file2: RW ]
B------->[ file2: E; file3: W ]
C------->[file1: W ]
D------->[ file3: RWE ]
每一行称为一个权能字,其给出了域中进程(用户)对特定对象的权限。
5.多级安全:
可自由支配的访问控制和强制性的访问控制:前者允许用户来决定谁可以读取他们的文件;后者由机构定义谁可以看到什么文件,不能被其他人更改。
常见的多级安全模型:
1)Bell-La Padula模型:(以军队为例)
遵循的规定: 简易安全规则:在密级k上的进程只能读同一密级或更低级的对象。如将军可以读中尉的文档,反过来不行。
*规则:在密级k上运行的进程仅能写同一密级或更高密级的对象。如中文只能在将军的信箱添加自己已知的信息,反过来不行。
通俗的讲------------------->该模型可高读低写,但不能颠倒。
2)Biba模型:(公司为例)
Bell模型可以保守机密,但不能保证数据完整性(因为低级别用户可以写高级别用户文档),为此提出了Biba模型,该模型遵循两个基本原则:
简单完整性原则:在密级k上的进程只能写同一级别或更低级别的对象。(总裁的文档不能被员工篡改)
完整性*原则:在密级k上的进程只能读同一级别或更高级别的对象。(经理不能读下发给员工的任务)