安全性包含以下基本概念。
19.1.1 安全威胁、策略和机制
计算机系统中的安全性与可靠性密切相关。非正式地说,一个可靠的计算机系统是一个我们可以有理由信任其所提供的服务的系统。可靠性包括可用性、可信赖性、安全性和可维护性。但是,如果我们要信任一个计算机系统,还应该考虑机密性和完整性。考虑计算机系统中安全的另一种角度是我们试图保护该系统所提供的服务和数据不受到安全威胁,安全威胁包括以下4种。
- ·窃听:指一个未经授权的用户获得了对一项服务或数据的访问权限。窃听的一个典型事例是两人之间的通信被其他人偷听。窃听还发生在非法复制数据时。
- ·中断:指服务或数据变得难以获得、不能使用、被破坏等情况。从这个意义上说,服务拒绝攻击是一种安全威胁,它归为中断类,一些人正是通过它恶意地试图使其他人不能访问服务。中断的一个实例是文件被损坏或丢失时所出现的情况。
- ·修改:包括对数据未经授权的改变或篡改一项服务以使其不再遵循其原始规范。修改的实例包括窃听后改变传输的数据、篡改数据库条目以及改变一个程序使其秘密记录其用户的活动。
- ·伪造:指产生通常不存在的附加数据或活动的情况。例如,一个入侵者可能尝试向密码文件或数据库中添加数据,同样,有时可能通过重放先前发送过的消息来侵入一个系统。
仅仅声明系统应该能够保护其自身免受任何可能的安全威胁并不是实际建立一个安全系统的方式。首先需要的是安全需求的一个描述,也就是一个策略。安全策略准确地描述了系统中的实体能够采取的行为以及禁止采取的行动。实体包括用户、服务、数据、机器等。制订了安全策略之后,就可能集中考虑安全机制,策略通过该机制来实施。重要的机制如下。
- ·加密。
- ·身份验证。
- ·授权。
- ·审计。
加密是计算机的基础。加密将数据转换为一些攻击者不能理解的形式。身份验证用于检验用户、客户、服务器等所声明的身份。对一个客户进行身份验证之后,有必要检查是否授予客户执行该请求操作的权限。审计工具用于追踪各个客户的访问内容以及访问方式。
19.1.2 密码与数字签名
加密包括使用密钥对数据进行编码,从而使偷听者无法方便地阅读这些数据。经过加密的数据称为密文,原始的数据称为明文。从密文到明文的转换过程称为解密。
恺撒密码又叫循环移位密码,它的加密方法就是将明文中的每个字母用字母表中该字母后的第R个字母来替换,从而达到加密的目的。它的加密过程可以表示为下面的函数。
E(m)=(m+k)mod n (1)
其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,则按照式(1)计算出来的密文为L,计算过程如下。
E(8)=(8+4)mod 26=12 (2)
上面例子中,每个字母用其后面的第3个字母代替。
下面是一个C实现的恺撒密码程序。
#include <stdio.h> #include <stdlib.h> #include <string.h> char *caesar(const char *str,int offset) { char *start,*ret_str; start = ret_str = (char *) malloc(strlen(str) + 1); for(;*str!='\0';str++,ret_str++) { if(*str>='A' && *str<='Z') *ret_str = 'A' + (*str - 'A' + offset) % 26; else if(*str>='a' && *str<='z') *ret_str = 'a' + (*str - 'a' + offset) % 26; else *ret_str = *str; } *ret_str = '\0'; return (char *) start; } int main(void) { printf("%s\n","ABCDEFGHIJKLMNOPQRSTUVWXYZ"); printf("%s\n",caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ",3)); return 0; } 本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。