对称加密和非对称加密
首先引入两个术语:明文和密文。明文是指未加密前的原始数据,密文是指加密后的数据。根据加密和解密时的密码不同,可以分为两种类型的加密解密算法。
(1)对称加密/解密。
加密和解密使用相同的密码,有代表性的有DES、Blowfish、TEA、Base64。对称加密解密的特点是运算相对非对称加密解密简单、速度块,主要应用于需要加密大量数据的场合,例如游戏的资源文件加密。
(2)非对称加密/解密。
加密和解密使用不同的密码,有代表性的有RSA、DSA、ElGamal和ECDSA。非对称加密/解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢,主要应用于金融、军事等重大机密的系统。
为什么需要非对称加密和解密呢?假设你要发送一份非常机密的文件给你的朋友,而你的朋友的电脑跟外界通信的线路包括无线信号都被监听了,那怎么办?
方案A:提前给你的朋友协商一个密码,然后使用对称加密算法加密文件,转送给你的朋友,你的朋友根据之前协商的密码解密文件。
使用方案A传输加密后的机密文件,即使监听者获得了文件,仍然无法解密。初步肯定方案A有效。但当情况变成你要给多个陌生人传输机密文件,而之前根本无法和每个陌生人协商密码,那怎么办呢?这个时候非对称加密就有用武之地了。
如果使用非对称加密算法来加密/解密机密文件,那么陌生人先要确定一个加密的密码,然后将加密密码传输给你同时告诉你他使用哪种非对称加密算法,你用加密密码按照指定的非对称加密算法加密机密文件,将加密后的文件传输给陌生人,陌生人收到文件后使用另外一个密码解密文件。
这样即使监听者获得了加密密码和加密后的文件,也解不开机密文件,因为使用非对称加密算法加密的文件必须使用解密密码来解密,使用原来加密密码来解密是无效的。
加密密码和解密密码是相对的,如果用加密密码加密那么只有解密密码才能解密,如果用解密密码加密则只有加密密码能解密,所以它们被称为密码对,其中的一个可以在网络上发送、公布,叫做公钥,而另一个则只有密钥对的所有人才持有,叫做私钥,私钥不以任何形式传播
不对称加密算法的基本原理是,如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。广泛应用的不对称加密算法有RSA算法和美国国家标准局提出的DSA。
非对称加密系统使用对方的公开密钥进行加密,只有对应的私密密钥才能够破解加密后的密文。
非对称加密算法进行数字签名的过程:
1、发送方首先用公开的散列函数对报文进行一次变换,得到数字签名,然后利用私有密钥对数字签名进行加密,最后附在报文后面进行发送。
2、接收方用发送方的公钥对数字签名进行解密,得到一个数字签名的明文。
3、接收方将得到的明文进行散列函数的计算,也得到一个数字签名,若两个数字签名相同,则说明签名有效,否则则无效。
由于这个方法是对整个报文进行数字签名,是一个报文特征的定长代码,同一个人会对不同的报文产生不同的数字签名;又因为发送方的私有密钥是保密的,使得接收方既可以根据验证结果来拒绝接收报文,也可以使其无法伪造报文签名或对报文进行修改。这样就可以使任何拥有发送方公开密钥的人都可以进行验证数字签名的正确性了。
值得一提的是发送方的公钥是由一个可信赖的第三方机构,也就是认证中心(Certification Authority,CA)所发布。
RSA:
公钥和私钥的产生
- 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:
随意选择两个大的质数p和q,p不等于q,计算N=pq。
根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)
选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))
将p和q的记录销毁。
(N,e)是公钥,(N,d)是私钥。(N,d)是秘密的。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。
进程与线程区别
1、相同点:
(a) 二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略。
(b) 每个进程都有一个进程控制块,线程也拥有一个线程控制块。
(c) 线程和子进程共享父进程中的资源;线程和子进程独立于它们的父进程,竞争使用处理器资源;线程和子进程的创建者可以在线程和子进程上实行某些控制,比如,创建者可以取消、挂起、继续和修改线程和子进程的优先级;线程和子进程可以改变其属性并创建新的资源。
2、不同点:
(a) 线程是进程的一部分, 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
(b) 启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
(c) 系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。对不同进程来 说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。而一个线程的数据可以直接为其他线程所用,这不 仅快捷,而且方便。
(d) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。
(e) 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
(f) 创建子进程时会复制父进程的地址空间,但不立刻复制内存,而是写时拷贝