软件设计师笔记之信息安全知识

本章要求考生掌握以下几个方面的知识点。

(1)信息系统安全基础知识

(2)信息系统安全管理

(3)保障完整性与可用性的措施

(4)加密与解密机制基础知识

(5)风险管理(风险分析、风险类型、抗风险措施和内部控制)

(6)计算机安全相关的法律、法规基础知识

本章的考点主要集中于加密解密技术、网络安全、计算机病毒等方面。


目录

一、安全基础技术

1. 对称加密

2. 非对称加密

3. Hash函数和信息摘要

4. 数字签名

5. 数字证书

二、网络安全知识

1. 网络安全协议

2. 网络攻击

3. 入侵检测

4. 防火墙

5. VPN

6. 漏洞扫描

三、计算机病毒与木马

1. 病毒与木马的概念

2. 病毒的分类

3. 病毒种类命名


一、安全基础技术

在软件设计师的考试中,经常会考到与安全相关的一些基础概念及技术原理,如:区分对称与非对称算法,什么情况下用哪种密钥加密解密、信息摘要的用途等。下面将详细介绍这些相关技术。

1. 对称加密

对称加密是指加密系统的加密密钥和解密密钥相同,或者虽然不同,但从其中的任意一个可以  很容易地推导出另一个。

对称加密算法的优点是:使用简单、加密解密快捷高效,其致命弱点是:加密强度不高、密钥  分发困难

常见对称密钥加密算法包括:DES、3DES、RC-5、IDEA

2. 非对称加密

前面提到了对称加密技术中的对称意思是加密与解密使用了同样的密钥。顾名思义,非对称加密技术中所使用的加密与解密密钥是不同的。并且不可能从任何一个推导出另一个。它的优点       在于可以适应开放性的使用环境,可以实现数字签名与验证。最常见的非对称密钥技术就是RSA。它的理论基础是数论中大素数分解,但如果使用RSA来加密大量的数据则速度太慢了,因此RSA广泛用于密钥的分发。

在非对称加密体系中,密钥是成对出现的,一对密钥包括一个公钥和一个私钥。如果用公开密   钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有   用对应的公开密钥才能解密。

非对称加密算法的优点在于:解决了对称密钥加密强度不高及密钥分发困难的问题,其缺点  是:加密速度极慢。所以非对称加密算法通常只对极小的数据量进行加密,如对信息摘要进行加   密,或用于加密对称密钥。

常见非对称密钥加密算法:RSA、ECC

3. Hash函数和信息摘要

Hash函数又称为杂凑函数、散列函数,它提供了这样的一种计算过程:输入一个长度不固定的字符串,返回一串定长的字符串(又称为Hash值),单向Hash函数用于产生信息摘要

信息摘要简要地描述了一份较长的信息或文件,它可以被看做是一份长文件的“数字指纹信息摘要可以用于创建数字签名。对于特定的文件而言,信息摘要是唯一的,而且不同的文件必将产生不同的信息摘要。常见的信息摘要算法包括MD5(产生一个128位的输出,输入是以512位的分     组进行处理的)和SHA(安全散列算法,也是按512位的分组进行处理,产生一个160位的输出)。它们可以用来保护数据的完整性。

4. 数字签名

数字签名是通过一个单向函数对要传送的报文进行处理,得到用以认证报文来源并核实报文是   否发生变化的一个字母数字串。它与数据加密技术一起构建起了安全的商业加密体系:传统的数据   加密是保护数据的最基本方法,它只能够防止第三者获得真实的数据(数据的机密性),而数字签   名则可以解决否认、伪造、篡改和冒充的问题(数据的完整性和不可抵赖性)。

数字签名可以使用对称加密技术实现,也可以使用非对称加密技术(公钥算法)实现。但如果  使用对称加密技术实现,需要第三方认证,比较麻烦。因此现在通常使用的是公钥算法

整个数字签名应用过程很简单:

(1)信息发送者使用一单向散列函数对信息生成信息摘要。

(2)信息发送者使用自己的私钥签名信息摘要。

(3)信息发送者把信息本身和已签名的信息摘要一起发送出去。

(4)信息接收者通过使用与信息发送者使用的同一个单向散列函数对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息摘要进行验证,以确认信息发送者的身份是否被修改过。

如果接收者收到的信息是P(用E代表公钥、D代表私钥),那么要保留的证据就应该是:E发送者(P),这也就证明了信息的确是“发送者”发出的。

5. 数字证书

非对称加密技术的提出,解决了密钥传输的问题,但在实际应用过程中,我们遇到了一个新的   问题:密钥只是一串数字或字符,并不能通过密钥得知它的主人是谁。这样就产生了安全隐患,所

以提出了数字证书的概念。数字证书简单一点理解,就是密钥与身份信息的结合体。

数字证书的格式一般使用X.509国际标准。X.509是广泛使用的证书格式之一,X.509用户公钥证书是由可信赖的证书权威机构(CA——证书授权中心)创建的,并且由CA或用户

{************************************************************** 浅谈软件安全设计(一) code by 黑夜彩虹 & vxin with almost pure delphi 网站:http://soft.eastrise.net 2007-03-07 --- 转载时请保留作者信息。 **************************************************************} 此CM的设计模式: 1、插入一些花指令 2、写了一些代码迷惑Cracker 3、有简单的Anti_DEDE 和检测调试器 话不多说,请看以下代码: unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,strutils; Const C1= 17856; C2= 23589; type TForm1 = class(TForm) Image1: TImage; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} Procedure Anti_DeDe();//检测DEDE反编译器 var DeDeHandle:THandle; i:integer; begin DeDeHandle:=FindWindow(nil,chr($64)+chr($65)+chr($64)+chr($65)); if DeDeHandle0 then begin For i:=1 to 4500 do SendMessage(DeDeHandle,WM_CLOSE,0,0); end; end; Function ABC42():Boolean; //检测调试器; var YInt,NInt:Integer; begin asm mov eax,fs:[30h] movzx eax,byte ptr[eax+2h] or al,al jz @No jnz @Yes @No: mov NInt,1 @Yes: Mov YInt,1 end; if YInt=1 then Result:=True; if NInt=1 then Result:=False; end; function EncryptModule(SourceStr:String;Key:Word;N:Integer):String; var //加密函数 I:Integer; begin SetLength(Result,Length(SourceStr));//利用SetLength函数指定密文长度 //对每一个索引元素进行变换 for I:=1 to Length(SourceStr) do begin Result[I]:=Char(byte(SourceStr[I]) xor (Key Shr N)); Key:= (byte(Result[I]) + Key)*C1+C2; end; end; //==========以下是549的函数,据说没有暴破点,顺便试一试 //========函数作用:动态改变程序运行罗辑 function GetEIP: Integer;//自动生成address的方法 asm mov eax, [esp]; sub eax, 5; //call GetEIP占用5字节 end; function PatchOneItem(PatchItem: String): Boolean; var PatchAddress: Integer; PatchLength: DWord; PatchData: Pointer; PatchDataStr: String; i: Integer; PatchByte: Byte; PID, PHandle: THandle; WriteCount: DWord; begin Result := False; if Length(PatchItem) < 11 then Exit; PatchAddress := StrToInt(\'0x\' + LeftStr(PatchItem, 8)); for i := 1 to Length(PatchItem) do begin if PatchItem[i] \' \' then PatchDataStr := PatchDataStr + PatchItem[i]; end; PatchLength := (Length(PatchDataStr) - 9) div 2; GetMem(PatchData, PatchLength); try for i := 0 to PatchLength - 1 do begin PatchByte := StrToInt(\'0x\'+PatchDataStr[10 + i * 2] + PatchDataStr[10 + i * 2 + 1]); Byte(Pointer(Integer(PatchData) + i)^) := PatchByte; end; GetWindowThreadProcessId(Application.Handle, PID); PHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID); WriteProcessMemory(PHandle, Pointer(PatchAddress), PatchData, PatchLength, WriteCount); CloseHandle(PHandle); finally FreeMem(PatchData, PatchLength); end; Result := PatchLength = WriteCount; end; procedure Patch(PatchFile: String); var PatchItems: TStrings; PatchIndex: Integer; begin if not FileExists(PatchFile) then Exit; PatchItems := TStringList.Create; try PatchItems.LoadFromFile(PatchFile); for PatchIndex := 0 to PatchItems.Count - 1 do begin PatchOneItem(PatchItems[PatchIndex]); end; finally PatchItems.Free; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Anti_DeDe; //检测DEDE,检测到关闭它。 if ABC42 then ExitProcess(0); //检测调试器,终止。 end; procedure TForm1.Button1Click(Sender: TObject); //注册按纽,开始检测 begin //========在这里插入一些花指令 asm jz @Start jnz @Start db 0E8h, 24h, 0, 0 ; db 0, 8Bh, 44h, 24h db 4, 8Bh, 0, 3Dh db 4, 0, 0, 80h db 75h, 8, 8Bh, 64h db 24h, 8, 0EBh, 4 db 58h, 0EBh, 0Ch, 0E9h db 64h, 8Fh, 5, 0 db 0, 0, 0, 74h db 0F3h, 75h, 0F1h, 0EBh db 24h, 64h, 0FFh, 35h db 0, 0, 0, 0 db 0EBh, 12h, 0FFh, 9Ch db 74h, 3, 75h, 1 db 0E9h, 81h, 0Ch, 24h db 0, 1, 0, 0 db 9Dh, 90h, 0EBh, 0F4h db 64h, 89h, 25h, 0 db 0, 0, 0, 0EBh db 0E6h db 0EBh, 1, 0Fh, 31h ; db 0F0h, 0EBh, 0Ch, 33h db 0C8h, 0EBh, 3, 0EBh db 9, 0Fh, 59h, 74h db 5, 75h, 0F8h, 51h db 0EBh, 0F1h db 0B9h, 4, 0, 0 ; @Start: end; if length(edit2.Text)>3 then //比较大于3位 begin //============再写一些骗Cracker if edit2.Text=EncryptModule(Edit1.Text,12345,10) then begin showmessage(\'请重启本软件。\'); //=======还可以再写一些记号,这里我就不写了 end; PatchOneItem(edit2.Text); //真正的比较 showmessage(\'ok\'); //弹出OK对话框 end; end; end.  //====附件为CM,会破解的兄弟可以试试其强度....
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zcoder`Blog

嘻嘻~谢谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值