对称算法:对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算
出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密。
非对称算法:是指一个加密算法的加密密钥和解密密钥是不一样的,或者说不能由其
中一个密钥推导出另一个密钥。非对称密钥也叫公开密钥加密,它是用两个数学相关的密钥对信息进行编码。在此系统中,其中一个密钥叫公开密钥,可随意发给期望同密钥持有者进行安全通信的人。公开密钥用于对信息加密。第二个密钥是私有密钥,属于密钥持有者,此人要仔细保存私有密钥。密钥持有者用私有密钥对收到的信息进行解密。
单表密码算法:替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过
查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文,替代密码的密钥就是其替换表 。单表替代密码的密码算法加解密时使用一个固定的替换表。单表替代密码又可分为一般单表替代密码、移位密码、仿射密码、密钥短语密码。
ENIGMA:在密码学史中,恩尼格玛密码机。键盘一共有
26个键,键盘排列和广为使
用的计算机键盘基本一样,只不过为了使通讯尽量地短和难以破译,空格、数字和标点符号都被取消,而只有字母键。键盘上方就是显示器,这可不是意义上的屏幕显示器,只不过是标示了同样字母的26个小灯泡,当键盘上的某个键被按下时,和这个字母被加密后的密文字母所对应的小灯泡就亮了起来,就是这样一种近乎原始的“显示”。在显示器的上方是三个直径6厘米的转子,它们的主要部分隐藏在面板下,转子才是“恩尼格玛”密码机最核心关键的部分。
DES:Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。
DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES是第一代加密算法,起初需要3个月的时间破解,到后来只需22小时。
AES:高级加密标准(英语:Advanced Encryption Standard)。算法是基于置换和代
替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。这个标准是第二代加密算法,用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
RC4:加密算法是由
RSA算法代码逆向观察得来,是一种流算法。RSA算法由Ronald
Rivest在1987年设计,是密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。算法是现阶段较为适用的加密算法。
MD5:MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
MD5算法具有压缩性、易计算、抗修改性、强抗碰撞等特点。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被\"压缩\"成一种保密的格式,即将一个任意长度的字节串变换成一定长的十六进制数字串。MD5长度为128bit。
SHA1:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(DSS)
里面定义的数字签名算法(DSA)。对于长度小于2^位的消息,SHA1会产生一个160bit的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA2/256:是美国国家标准技术研究所发布的国家标准
FIPS PUB 180。其中规定了
SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种单向散列算法。SHA-256适用于长度不超过2^二进制位的消息。SHA-256和SHA-512是很新的杂凑函数,它们分别使用了不同的偏移量,或用不同的常数,然而,实际上二者结构是相同的,只在循环执行的次数上有所差异。SHA-256多运用于大文件共享。
SSL:(Secure Sockets Layer 安全套接层),是为网络通信提供安全及数据完整性的一种
安全协议,在传输层对网络连接进行加密,保护通讯内容。SSL为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议和SSL握手协议
提供服务:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器 2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变。
HTTPS:(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安
全为目标的HTTP通道。在HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。网站
diffie-hellmankey agreemant:一种确保共享KEY安全穿越不安全网络的方
法,它是OAKLEY的一个组成部分。Whitefield与Martin Hellman在1976年提出这个一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。
PKCS#5:填充模式:PKCS#5。在分组加密算法中(例如DES),我们首先要将原文进
行分组,然后每个分组进行加密,然后组装密文。假设我们现在的数据长度是24字节,BlockSize是8字节,那么很容易分成3组,一组8字节。如果现有的待加密数据不是BlockSize的整数倍,我们可以对原文进行填充(padding),将其填充到8字节的整数倍。PKCS#5只是对于8字节(BlockSize=8)进行填充,填充内容为0x01-0x08。
PGP:(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件。可以用
它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。它可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。它采用了一种RSA和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。
字典攻击:在破解密码或密钥时,逐一尝试用户自定义词典中的可能密码(单词或短语)
的攻击方式。与暴力破解的区别是,暴力破解会逐一尝试所有可能的组合密码,而字典式攻击会使用一个预先定义好的单词列表(可能的密码)。当黑客试图进入目标系统时被告知需要提供
口令,而他对此并不知晓(正如上面那位小偷并不确定钥匙是哪一把),他可以采用这样的方法:将收藏的备选口令集(这个口令集可能包含着成千上万个备选口令)输入到他的程序中,依次向目标系统发起认证请求,直到某一个口令可以通过认证——或者所有这些口令均无效,宣告此方法失败并结束本次入侵行为(或者继续查找系统有无别的弱点)。
欧拉定理:在数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。欧拉
定理表明,若n,a为正整数,且n,a互质,则:
S-box:指DES加密算法中的S盒,现在仍未公开。DES有8个S盒,每个盒有4行
16列。对应的将16bit数据转换为4bit。
ECB:(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在
该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组进行加密或解密处理。由于所有分组的加密方式一致,明文中的重复内容会在密文中有所体现,因此难以抵抗统计分析攻击。因此,ECB模式一般只适用于小数据量的字符信息的安全性保护,例如密钥保护。
CBC:IBM发明了密码分组链接(CBC,Cipher-block chaining)模式。在CBC模式
中,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
CBC是最为常用的工作模式。它的主要缺点在于加密过程是串行的,无法被并行化,而且消息必须被填充到块大小的整数倍。解决后一个问题的一种方法是利用密文窃取。注意在加密时,明文中的微小改变会导致其后的全部密文块发生改变,而在解密时,从两个邻接的密文块中即可得到一个明文块。因此,解密过程可以被并行化,而解密时,密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其它明文的内容。
LFSR:线性反馈移位寄存器(LFSR)是内测试电路中最基本的标准模块结构,既用作伪随
机测试码产生器,也作为压缩测试结果数据的特征分析器。
二、问答
1.apk逆向的方法、过程;
方法
利用反汇编工具
静态分析工具有IDA Pro、c32asm、Win32Dasm和VB Decompiler pro; 动态分析工具有Ollydbg、Windbg 过程:
(1)用逆向软件打开apk查看代码,并进行反编译;
(2)classes.dex文件还原(smali文件),xml等资源还原; (3)理解代码内容,
(4)修改相应的汇编代码,修改资源或配置; (5)重新编译生成修改后的apk。
2.文件加密的基本工作原理和步骤;对称、非对称、校验、压缩一起上
写步骤的时候加上压缩和校验。 先签名-》压缩-》加密-》传送前再编码
对称加密算法提供加密算法本身并要求用户提供密钥以后,能够结合算法和密钥将明文转换为密文,反之,之所以称它为对称加密,是因为加密和解密使用的密钥是相同的。对称加密算法:加密算法和解密算法,只不过使用的是相同密钥。
对称密码使用相同的加密密钥和解密密钥,其安全性主要依赖于密钥的保密性。分组密码是对称密码的重要组成部分,其基本原理为:将明文消息编码后的序列m0,m1,m2,„,mi划分为长度为L(通常为或128)位的组m=(m0,m1,m2,„,mL-1),每组分别在密钥k=(k0,k1,k2,„,kt-1)(密钥长度为t)的控制下变换成等长的一组密文输出序列c=(c0,c1,c2,„,cL-1),分组密码的模型如图
校验:
常见的对称加密算法有: DES: 3DES: AES:
非对称加密
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
如下图所示,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。
1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。
2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。
3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。
在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。
校验
3.散列函数的定义、用途
散列函数又称哈希函数,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
若结构中存在和关键字K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个事先建立的表为散列表。可以通过直接寻址法、数字分析法、平方取中法、折叠法、随机数法、以及除留取余法等构造哈希表。
对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称碰撞或冲突。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。处理冲突的方法有开放寻址法、再散列法、链地址法等。
若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。
查找过程中,关键码的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:
1.散列函数是否均匀;2. 处理冲突的方法;3.散列表的装填因子。
散列表的装填因子定义为:α= 填入表中的元素个数/散列表的长度。α是散列表装满程度的标志因子。由于表长是定值,α与“填入表中的元素个数”成正比,所以,α越大,填入表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素较少,产生冲突的可能性就越小。
常用hash算法的介绍: (1)MD4
MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年设计的,MD 是 Message Digest(消息摘要)的缩写。它适用在32位字长的处理器上用高速软件实现——它是基于 32位操作数的位操作来实现的。
(2)MD5
MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
(3)SHA-1及其他
SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于2的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
散列函数应用
由于散列函数的应用的多样性,它们经常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码有可能因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的安全性。
错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,可以用相对较短的散列值来验证任意长度的数据是否被更改过。
错误校正
使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。
对于错误校正,假设相似扰动的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。对于一个信息串的微扰可以被分为两类,大的(不可能的)错误和小的(可能的)错误。我们对于第二类错误重新定义如下,假如给定 H(x) 和 x+s,那么只要s足够小,我们就能有效的计算出x。那样的散列函数被称作错误校正编码。这些错误校正编码有两个重要的分类:循环冗余校验和里德所罗门码。
语音识别
对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。
那些并不紧随IT工业潮流的人往往能反其道而行之,对于那些微小差异足够鲁棒的散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,但是有少数散列算法能够达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam[1]服务。用户可以用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就能够收到被识别的音乐的曲名(需要收取一定的费用)
信息安全
Hash算法在信息安全方面的应用主要体现在以下的3个方面: (1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的\"数字指纹\"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
(2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称\"数字摘要\"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
(3) 鉴权协议
如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
4.随机数的用途、质量要求、产生方法;
(1)什么是随机数?
随机数指随机试验的结果。其主要特征是,所生成的后一个数与前一个数毫无关系。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会生成一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。未来的量子计算机有可能生成基于自然规律的不可重现的“真随机数”。
(2)随机数有什么用?
在统计学的不同技术中需要使用随机数。比如: 1、在从统计总体中抽取有代表性的样本的时候 2、在将实验动物分配到不同的试验组的过程中 3、在进行蒙特卡罗模拟法计算的时候等等。
实际生活中,这些随机数起着很大的作用,所以很多人会专门去寻找随机数生成器。比如:
1、对银行来说,银行的ID和密码非常脆弱。如果有随机数表,就可以防备此类事件。随机数表是指为每个客户指定各不相同的数字列表,申请时将该随机数表分配给客户,而不是按照一定的规律给出,这就安全很多。
2、要考察某公司的牛奶产品质量,想从800袋牛奶中抽取60袋,就可以在随机数表中选中一数,并用向上、下、左、右不同的读法组成60个数,并按牛奶的标号进行检测,虽然麻烦,但很常用。
3、企业要调查消费者对某产品的需求量,要从很多消费者中抽选一定数量的样本调查。 (3)随机数的质量要求
高质量的随机数序列必须通过一系列的统计检验,常用的检验方法如下:
(4)怎样生成随机数?
生成随机数有多种不同的方法。这些方法被称为随机数发生器。 物理性随机数发生器。
真正的随机数是使用物理现象生成的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。
这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。 伪随机数发生器
在实际应用中往往使用伪随机数就足够了。这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法生成的。
计算机或计算器生成的随机数有很长的周期性。
它们不是真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。
在真正关键性的应用中,比如在密码学中,人们一般使用真正的随机数。
计算机如何生成伪随机数?
有人可能会说,随机数是由“随机种子”产生的。
没错,随机种子是用来产生随机数的一个数,在计算机中,这样的一个“随机种子”是一个无符号整形数。
那么随机种子是从哪里获得的呢?
随机种子来自系统时钟,确切地说,是来自计算机主板上的定时器在内存中的记数值。 (注:计算机的主机板上都会有这样一个定时器用来计算当前系统时间,每过一个时钟信号周期都会使记数器+1)
5.RSA从原理到计算
原理:
RSA加密是非对称密钥,公开密钥算法。利用了单向函数正向求解很简单,反向求解很复杂的特性。 具体是利用了:
1.对两个质数相乘容易,而将其合数分解很难的这个特点进行的加密算法。 n=p1*p2,已知p1、p2求n简单,已知n求p1、p2困难。
2.(m^e) mod n=c,已知m、e、n求c简单,已知e、n、c求m很难。
RSA加密,实现了公开密钥,就是A可以给所有人发送锁,其他人把要加密的信息用这把锁加密后发送给A,A用自己的钥匙开锁就可以获得加密的信息了。反过来,A要发送加密信息给B,只要知道B的锁就可以了,而这个锁是公开的。
A 和 B 要通信,他需要生成公钥和私钥,过程如下: 1.随机选择两个不相等的质数p和q:
假设A选择了61和53。(实际应用中,这两个质数越大,就越难破解。) 2.计算p和q的乘积n: n = 61×53 = 3233
n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。 3.计算n的欧拉函数φ(n): 根据公式:
φ(n) = (p-1)(q-1)
算出φ(3233)等于60×52,即3120。
4.随机选择一个整数e,条件是1< e <φ(n),且e与φ(n) 互质:
我们在1到3120之间,随机选择了17。(实际应用中,常常选择65537。) 5.计算e对于φ(n)的模逆元d。 即需要d满足
ed ≡ 1 (mod φ(n)) 这个式子等价于 ed - 1 = kφ(n)
于是,求解d,实质上就是对下面这个二元一次方程求解。 ex + φ(n)y = 1
已知 e=17, φ(n)=3120, 17x + 3120y = 1 这个方程可以用”扩展欧几里得算法”求解。我们可以算出一组整数解为 (x,y)=(2753,-15),即 d=2753。
6.将n和e封装成公钥,n和d封装成私钥:
在本例中,n=3233,e=17,d=2753,所以公钥就是 (3233,17),私钥就是(3233, 2753)。 7.加密和解密
有了公钥和密钥,就能进行加密和解密了。 (1)加密要用公钥 (n,e)
假设B要向A发送加密信息m,他就要用A的公钥 (n,e) 对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。 所谓”加密”,就是算出下式的c: me ≡ c (mod n)
A的公钥是 (3233, 17),B的m假设是65,那么可以算出下面的等式: 6517 ≡ 2790 (mod 3233)
于是,c等于2790,B就把2790发给了A。 (2)解密要用私钥(n,d)
A拿到B发来的2790以后,就用自己的私钥(3233, 2753) 进行解密。可以证明,下面的等式一定成立:
cd ≡ m (mod n)
也就是说,c的d次方除以n的余数为m。现在,c等于2790,私钥是(3233, 2753),那么,A算出
27902753 ≡ 65 (mod 3233)
因此,A知道了B加密前的原文就是65。 至此,”加密–解密”的整个过程全部完成。
6.buffer over flow,原理机制 危害形式 防范方法
(1)原理机制
缓存溢出(Buffer overflow),是指在存在缓存溢出安全漏洞的计算机中,攻击者可以用超出常规长度的字符数来填满一个域,通常是内存区地址。在某些情况下,这些过量的字符能够作为“可执行”代码来运行。从而使得攻击者可以不受安全措施的约束来控制被攻击的计算机。缓存溢出指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。 造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
(2)缓存溢出攻击方式 破坏活动记录
函数调用发生时,调用者会在栈中留下函数的活动记录,包含当前被调函数的参数、返回地址、前栈指针、变量缓存区等值,由它们在栈中的存放顺序可知,返回地址、栈指针与变量缓存区紧邻,且返回地址指向函数结束后要执行的下一条指令。栈指针指向上一个函数的活动记录,这样攻击者可以利用变量缓存区溢出来修改返回地址值和栈指针,从而改变程序的执行流。 破坏堆数据
程序运行时,用户用C、C++内存操作库函数如malloc、free等在堆内存空间分配存储和释放删除用户数据,对内存的使用情况如内存块的大小、它前后指向的内存块用一个链接类的数据结构予以记录管理,管理数据同样存放于堆中,且管理数据与用户数据是相邻的。这样,攻击者可以像破坏活动记录一样来溢出堆内存中分配的用户数据空间,从而破坏管理数据。因为堆内存数据中没有指针信息,所以即使破坏了管理数据也不会改变程序的执行流,但它还是会使正常的堆操作出错,导致不可预知的结果。 更改函数指针
指针在C、C++等程序语言中使用得非常频繁,空指针可以指向任何对象的特性使得指针的使用更加灵活,但同时也需要人们对指针的使用更加谨慎小心,特别是空的函数指针,它可以使程序执行转移到任何地方。攻击者充分利用了指针的这些特性,千方百计地溢出与指针相邻的变量、缓存区,从而修改函数指针指向达到转移程序执行流的目的。溢出的具体方法可以参考文献,本文不再详述。 溢出固定缓存区
C标准库函数中提供了一对长跳转函数setjmp/longjmp来进行程序执行流的非局部跳转,意思是在某一个检查点设置setjmp(buffer),在程序执行过程中用longjmp(buffer)使程序执行流跳到先前设置的检查点。它们跟函数指针有些相似,在给用户提供了方便性的同时也带来了安全隐患,攻击者同样只需找一个与longjmp(buffer)相邻的缓存区并使它溢出,这样就能跳转到攻击者要运行的代码空间。典型的例子有Perl5.003的缓冲区溢出漏洞,攻击者首先进入用来恢复缓冲区溢出的longjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。 (3)防范方法
缓冲区溢出是代码中固有的漏洞,除了在开发阶段要注意编写正确的代码之外,对于用户而言,一般的防范为
关闭端口或服务。管理员应该知道自己的系统上安装了什么,并且哪些服务正在运行 安装软件厂商的补丁,漏洞一公布,大的厂商就会及时提供补丁 在防火墙上过滤特殊的流量,无法阻止内部人员的溢出攻击 自己检查关键的服务程序,看看是否有可怕的漏洞 以所需要的最小权限运行软件
7.74/75Crack原理
该原理主要用于修改软件的破解过程。74在机器码中对应指令jz,意为如果判断数值为0则跳转;75在机器码中对应指令为jnz,意为如果判断数值不为0则跳转。由此可见,
74和75在机器码中表示的意义是相反的,因此可以直接改变原程序的部分判断。例如
原本如果用户输入的sn是无效的就无法运行abort(),但将机器码中的75改为74后,用户只要输入错误的sn就可以运行abort()。
8.对备份的理解
(1)定义:如果系统的硬件或存储媒体发生故障,“备份”工具可以帮助您保护数据免受意外的损失。例如,可以使用“备份”创建硬盘中数据的副本,然后将数据存储到其他存储设备。备份存储媒体既可以是逻辑驱动器(如硬盘)、的存储设备(如可移动磁盘),也可以是由自动转换器组织和控制的整个磁盘库或磁带库。如果硬盘上的原始数据被意外删除或覆盖,或因为硬盘故障而不能访问该数据,那么您可以十分方便的从存档副本中还原该数据。
(2)为什么要备份:
随着服务器海量数据的不断增长,数据的体积变得越来越庞大。同时,各种数据的安全性和重要程度也越来越被人们所重视,所以备份操作越来越必不可少。但是,很多人对于数据备份存在着错误的理解,导致对数据备份并不是很认可,认为做数据备份时多此一举的事情。实际上完整的备份包括自动化的数据管理与系统的全面恢复,因此,从这个意义上说,备份=拷贝+管理。
数据备份是为了以后能够顺利地将被破坏了或丢失了的数据库安全地恢复的基础性工作,可以这么说,没有数据库的备份,就没有数据库的恢复,企业应当把数据备份和恢复的工作列为一项不可忽视的系统工作,为其网站选择相应的备份设备和技术,进行经济可靠的数据备份,从而避免可能发生的重大损失。
备份的目的是为了防止自然灾害、病毒侵入、人为破坏等,因此备份数据的频率并不是很高,备份数据的存取速度虽然值得考虑,但是并不是一个十分重要的指标,我们并不需要追求备份的高速度,例如选择硬盘作为备份介质,而使备份的投资成倍地增加。相反,存储介质的容量在备份中应该是首要考虑的。
(3)备份方式
(4)备份技术
系统灾难恢复,就是在系统出现崩溃的时候,能够用非常少的步骤,将系统重建,包括上面的系统补丁、应用软件和数据。这样可以提高恢复的准确性、缩短恢复时间、缩短业务中断时间。
主要灾备技术,在恢复的时候有这么几种方式:
采用公用的一张光盘,所有的系统都采用这一张光盘。这个光盘可以启动系统,同时可以启动网络,然后备份服务器将备份在磁带库(或者虚拟带库)中的整个硬盘内容或者第一主分区内容恢复到灾难机。这样不论灾难机原来有多大容量数据,都可以存放在整个备份系统的备份设备中,统一进行管理,而且不需要经常刻光盘,也就是说光盘不需要经常更新。比较典型的代表是BakBone NetVault VaultDR。右图是BakBoneNetVault VaultDR灾难备份和恢复的数据流,所有系统采用统一的光盘进行。
需要针对每台计算机单独刻光盘,恢复的时候需要利用针对性的光盘来恢复,每台机器都需要自己的光盘,而且需要定期不断更新。这种方式的最大不足是经常要刻光盘,否则灾难出现的时候如果没有光盘或者光盘太久了,都会影响恢复的速度和恢复后的状态。这种技术的典型代表是EMC NetWork Recovery Manager模块。
恢复时需要借助网络启动,也就是需要具备一台相同操作系统的主机作为引导机器,然后利用备份的内容进行恢复。这种技术的典型代表是Symantec NetBackup的Bare Metal Restore(裸金属恢复)模块。
操作系统自己提供的灾备工具。对于大多数Unix小型机,都提供系统备份工具。借助于系统自身提供的磁带机,利用一个简单的命令,HP-UX采用make_recovery就可以把整个root卷备份到服务器自带的4mm磁带上。在恢复的时候,这盘磁带可以自启动系统,采用一个命令就可以将整个root卷恢复到硬盘上。这种方式的好处是简单和经济,尤其对于Unix系统,这样的方式远比备份软件提供的BMR模块方便、安全和经济,因为备份软件提供的BMR模块往往需要相同平台的其他服务器来启动。
数据远程复制
将数据在另外的地方实时产生一份可用的副本,此副本的使用不需要做数据恢复,可以将副本立即投入使用。数据复制的最大好处是副本数据立即可用,没有数据恢复时间,RTO
非常好,同时因为是实时复制,RPO也非常好,几乎不会丢失数据。缺点是费用远比数据备份要高,不仅仅是数据复制系统价格高,还需要另外的硬盘存储空间和主机系统,甚至建立另外的远程机房,考虑网络布线,这些都将带来成本大大增加,所以数据复制的建设和维护费用远远大于数据备份。
数据复制目前有如下实现方式:
基于主机。基于主机的数据复制技术,可以不考虑存储系统的同构问题,只要保持主机是相同的操作系统即可,存在支持异构主机之间的数据复制软件,如BakBone NetVault Replicator就可以支持异构服务器之间的数据复制,可以支持跨越广域网的远程实时复制。缺点是需要占用一点主机资源。
基于存储系统。利用存储系统提供的数据复制软件,复制的数据流通过存储系统之间传递,和主机无关。这种方式的优势是数据复制不占用主机资源,不足之处是需要灾备中心的存储系统和生产中心的存储系统有严格的兼容性要求,一般需要来自同一个厂家的存储系统,这样对用户的灾备中心的存储系统的选型带来了。
基于光纤交换机。这项技术正在发展中,利用光纤交换机的新功能,或者利用管理软件控制光纤交换机,对存储系统进行虚拟化,然后管理软件对管理的虚拟存储池进行卷管理、卷复制、卷镜像等技术,来实现数据的远程复制。比较典型的有Storag-age,Falcon等。
基于应用的数据复制。这项技术有一定局限性,都是针对具体的应用。主要利用数据库自身提供的复制模块来完成,比如OracleDataGuard,Sybase Replication 等。
数据保护技术CDP(Continuous Data Protection) CDP 技术是目前最热门的数据保护技术,它可以捕捉到一切文件级或数据块级别的数据写改动,可以对备份对象进行更加细化的粒度的恢复,可以恢复到任意时间点。
CDP技术是一个新兴的技术,在很多传统的备份软件中都逐渐融入了CDP的技术。比如BakBone NetVault Backup 8.0 追加了TrueCDP模块,Symantec Backup Exec12.5等。其他公司包括EMC,Symantec都并购了一些CDP的软件,正在和传统地备份软件进行整合,还都在整合中。
CDP技术包括两种:
Near CDP,就是我们说的准CDP,它的最大特点是只能恢复部分指定时间点的数据(FPIT,Fixed Point In Time),有点类似于存储系统的逻辑快照,它无法恢复任意一个时间点。如Symantec 、CommVault、凯备份的CDP都属于这种类型。
TrueCDP,我们称之为真正的CDP,它可以恢复指定时间段内的任何一个时间点(APIT,Any Point In Time),而BakBone TrueCDP属于TrueCDP类型。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务