2020.04.13-2020.04.19
加密算法
单向散列算法
SHA算法
安全散列算法,包括SHA-1,SHA-256,SHA-384,SHA-512,分别产生160位、256位、384位、512位散列值
SHA-1算法
原始消息长度不能超过2^64
sha-1算法与md4算法原理相同,消息分组和填充方式和md5算法相同(到md5的第二步)
sha-1初始散列值用5个32位双字进行初始化,如图:
运算时使用到的常数:
用以上两组数识别sha-1算法
对称加密算法
加密和解密的密钥完全相同
安全性依赖于:
- 加密算法足够强,无法根据密文直接获得原文
- 密钥的秘密性
在使用时,把用户输入的注册码(或注册码的一部分等)作为算法的密钥。如果在检查注册码时把用户的输入作为算法的输出或输入,解密者都可以找到所用的密钥
常用的对称分组加密算法有:DES、IDEA、AES等
对称密码分为:
- 流密码:对每一个比特都作为基本处理单元进行加密
- 块密码(分组密码):先分块,再对每一块进行加密
RC4流密码
原理
生成一种伪随机流(称为密钥流),与长度相同的明文通过异或(相同为假,不同为真)操作进行加密;解密时也与密文进行异或操作
密钥流分为KSA和PRGA两部分
-
KSA(the key-scheduling algorithm)
- 先对一个256字节的数组S进行初始化,按顺序填入0~255
- 如果输入的密钥长度小于256字节,则按密钥的填充输入的密钥(如输入1,2,3,4,5,填为1,2,3,4,5,1,2,3,… 放入数组T
- 对1中数组元素做如下交换
1
2
3
4
5j = 0;
for (i = 0 ; i < 256 ; i++){
j = (j + S[i] + T[i]) mod 256;
swap(S[i] , S[j]);
} -
PRGA(the pseudo-random gerneration algorithm)
1 | i=0,j=0; |
公开密钥加密算法
亦称非对称加密算法。在加密与解密时用不同的密钥,加密用的密钥叫做公钥,解密用的密钥叫做私钥
公开密钥的设计基于NP完全问题
RSA算法
算法的安全性依赖于大整数因式分解(主要是分解n),密钥位数越长就越安全
原理
- 选取两个较大素数p,q(用算法随机产生两个数,使用概率算法来验证是否质数。假如通过了这个测试的话,那么要使用一个精确的测试来保证的确是质数。)且pq不能太接近
- n=pq,n称为模
- 计算欧拉函数φ(n)=(p-1)(q-1)
- 选取加密密钥e,e常用值为3、7和(2^16+1)
- 使用扩展欧几里得算法,求出d
- 公钥为e和n;私钥为d;p,q必须保密
- 把消息进行分组,每组长度比n小,将每组都根据公式进行加密的计算
- 解密时,取每一个分组按公式进行解密
Base64算法
将二进制数据编码为字母和数字,用于非文本传输。使用ASCII(A~/)第65个字符为“=”),并用6个进制位表示一个可显示字符
编码时:
- 将第一个字节放置于24位缓冲区的高8位,第二个字节放在中间的8位,第三个字节放在低8位(少于3个字节,相应的缓冲区置0)
- 对24位缓冲区以6位为一组作为索引,高位优先,从ASCII表取出对应数值的元素进行输出,置0的位置输出“=”
如:对单词sky:
再根据28->c;54->2;…
得到sky对应的base64编码
在url和cookie里“=”会造成歧义,因此很多base64编码在最后会把"="去掉。
因为base64编码的长度永远是4的倍数,所以可以确定少了几个“=”
加密算法在软件保护的应用
不仅包括软件的注册激活系统、软件的防逆向,还包括软件涉及的数据的安全保护,包括存储数据的加密和数据交换的加密协议,如聊天软件的加密协议、游戏客户端与服务器通信的协议包、智能硬件和app通信的命令协议等
高等难度级别的保护方案可以设计得简单也可以复杂:
简单:例如对用户名处理时把哈希、对称、公钥算法全都用上,或者用难以分析的算法例如ecdsa。流程很简单但破解门槛很高
复杂:可以使用不常见的算法(没有特征)、使用自己的算法,如果用公开的算法库,要去掉一些特征字符串,从而识别不出用了哪个算法库
Windows内核
操作系统一般分为应用层和内核层,应用层通过系统调用进入内核,由系统底层完成相应功能;内核处理某些硬件发来的中断请求,代替硬件完成某些功能
内核理论基础
权限级别
cpu的运行级别依次为R0(最高执行权限)、R1、R2、R3(最低执行权限),r0运行内核,r1、r2运行设备驱动,r3运行应用程序。为了让工作变得简单,现在cpu和操作系统只保留了r0和r3,驱动运行在r0级
内存空间布局
32位寻址支持2^32B(4GB)的虚拟内存空间,其中系统的内存主要分为内核空间和应用层空间,每部分约占2GB,还有64kb的null空间和非法区域
64位理论支持最大2^64kb的寻址空间,但因为太大用不完所以只支持到40多位(…顺便32位和64位cpu地址总线不一定是32/64,32位通过PAE扩展到36位;64位只有4x位)
Windows启动过程
- 自检
从bios载入指令,进行硬件的初始化检查 - 初始化启动
根据cmos的设置,bios加载启动盘,将主引导记录(mbr)[1]中的引导代码载入内存。启动代码搜索mbr中的分区表,找出活动分区,将引导代码载入内存。引导代码查找并启动ntldr文件,bios将控制权转移给ntldr - boot加载
- 设置内存模式
- 启动文件系统,定位boot.ini等启动文件
- 读取boot.ini
- 检测和配置硬件
检查和配置硬件设备如系统固件、适配器、输入设备等 - 内核加载
- 加载系统内核的ntoskrnl.exe[2]和硬件抽象层(HAL,内核与硬件电路之间的接口层)。
- 从注册表读取安装的驱动程序,然后依次加载
- Windows会话管理启动
会话管理器程序:smss.exe,是系统第一个创建的用户模式进程 - 用户登录
由winlogon.exe系统服务提供,完成:- 启动服务子系统,即服务控制管理器
- 启动本地安全授权过程
- 显示登录界面
用bios和mbr的启动方式具有局限性,新的系统引导方式用UEFI和GPT。
UEFI(统一的可扩展固件接口)突破了读取分区容量最高仅为2tb的限制;并且UEFI本身相当于一个微型操作系统,可以直接读取FAT分区中的文件,程序员可以开发出直接在UEFI下运行的程序。因此可以将Windows安装程序做成efi类型的应用程序,从而不需要主引导记录、活动分区等,就可以启动Windows
GPT(全局唯一标识分区表)可以对分区数量没有限制(Windows限制在128个以内),可管理磁盘大小为18eb,只有基于uefi平台的主板才支持gpt分区引导启动
[1]: Master Boot Record,包括启动代码、硬盘分区表、结束标志字,包含MBR引导代码的扇区称为主引导扇区
[2]: Windows NT operating system kernel,为内核空间提供内核和执行层,并负责一些系统服务