术语
- 明文(plaintext):没有进行加密,能够直接代表原文含义的信息
- 密文(ciphertext):经过加密处理后,隐藏原文含义的信息
- 加密(encryption):将明文转换成密文的实施过程
- 解密(decryption):将密文转换成明文的实施过程
- 密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。
- 密钥 :分为加密密钥和解密密钥,用于加解密算法的秘密参数,通常只有通讯者拥有,仅收发双方知道的信息。
- 加解密的具体运作由两部分决定:算法和密钥。
数据加密
数据加密的基本过程即对原来明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。逆过程称为数据的解密,即将该编码信息转化为其原来数据的过程。在密码系统中,除合法用户外,还有非法的截收者,试图通过各种方法窃取机密(又称为被动攻击)或篡改消息(又称为主动攻击)。
密码通信系统的组成:对于给定的明文m和密钥k,加密变换Ek将明文变为密文c=f(m,k)=Ek(m),在接收端,利用脱密密钥k1,(有时k=k1,)完成脱密操作,将密文c恢复成原来的明文m=Dk1©。一个安全的密码体制应该满足:①非法截收者很难从密文C中推断出明文m;②加密和脱密算法应该相当简便,而且适用于所有密钥空间;③密码的保密强度只依赖于密钥;④合法接收者能够检验和证实消息的完整性和真实性;⑤消息的发送者无法否认其所发出的消息,同时也不能伪造别人的合法消息;⑥必要时可由仲裁机构进行公断。
加密算法宏观三大类
对称加密(私钥加密)算法
加密和解密使用相同的密钥的加密算法。传统的密码算法,即加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。大多数对称算法中,加密密钥和解密密钥是相同的,要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄露密钥意味着任何人都可以对他们发送或接受的消息解密。
特点:
- 算法公开、计算量小、加密速度快、加密效率高。
- 收发双方使用相同密钥,密钥协商过程中密钥泄露风险。此外多对用户每队都需要沟通密钥,造成密钥数量庞大,管理困难。
- 适用户大量数据的加密和解密过程,不适用于一些需要签名的场景,且需要提前分发好密钥。
- 只有一种非公开的密钥,加解密必须双方知道密钥,所以保证安全性就是保证密钥的安全。
常用的对称加密算法:
DES,3DES,AES等
- DES TripleDES算法
DES算法把64位的明文输入块变为数据长度为64位的密文输出块,其中8位为奇偶校验位,另外56位作为密码的长度。首先,DES把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,并进行前后置换,最终由L0输出左32位,R0输出右32位,根据这个法则经过16次迭代运算后,得到L16、R16,将此作为输入,进行与初始置换相反的逆置换,即得到密文输出。
DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法,而56位长密钥的穷举空间为2^56,这意味着如果一台计算机的速度是每秒种检测100万个密钥,那么它搜索完全部密钥就需要将近2285年的时间,因此DES算法是一种很可靠的加密方法。
非对称加密算法
需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。
特点:
- 保密性较好,消除了用户交换密钥的需要。
- 算法强度复杂、安全性依赖于算法与密钥,不过由于算法复杂,使得加解密速度没有对称加解密快,慢数千倍。
- 有两种密钥,其中一种是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
- 非对称加密体系不要求通信双方事先传递密钥或有任何约定就能完成保密通信,并且密钥管理方便,可实现防止假冒和抵赖,因此,更适合网络通信中的保密通信要求。
注意:
非对称加密有个问题,内容在发送千可能被篡改(上文的主动攻击),即公钥是公开的,有可能被窃取,窃取者完全可以改为发送别的内容。
解决的办法就是使用数字签名。数字签名和非对称加密是反过来的,也是有公私钥对,但是是用私钥签名,用公钥去验证签名。比如发送方除了发送用公钥加密后的密文,还要发送签名,签名内容通常是密文哈希后的字符串,接收方首先验证签名是否正确,如果正确那么密文解密后就是真正需要并且没有被篡改过的内容。注意,签名和非对称用的是两对不同的公私钥。
常用的非对称加密算法:
RSA、Elgamal、背包算法、Rabin、D-H、ECC
公钥
公钥
公钥基础设施PKI(public key infrastructure)
是由公开密钥密码技术、数字证书、证书认证中心和公钥安全策略等共同组成,管理密钥和证书的系统或平台,是建立安全网络环境的基础设施
公钥证书
从字面理解,公钥加密的意思就是公钥是公开的。所以,如果有某种广泛接受的公钥算法(如RSA),任何参与者都可以给其他参与者发送他的密钥,或向群体广播自己的密钥。虽然这种方法非常方便,但是它也有个很大的缺点:任何人都可以伪造公共通告,即某用户可以伪装成用户A向其他参与者发送公钥或广播公钥。直到一段时间后用户A发觉了伪造并且警告其他参与者,伪造者在此之前都可以读到试图发送给A的加密消息,并且使用假的公钥进行认证 [4] 。
解决这个问题的方法就是使用公钥证书。实际上,公钥证书由公钥加上公钥所有者的用户ID以及可信的第三方签名的整个数据块组成。通常,第三方就是用户团体所信任的认证中心。用户可通过安全渠道把他的公钥提交给这个CA,获取证书。然后用户就可以发布这个证书。任何需要该用户公钥的人都可以获取这个证书,并且通过所附的可信签名验证其有效性
哈希算法
是将任意数据都转换成一个固定长度的字符串。通过哈希后的值几乎无法推导出原文。而且两个不同的原文哈希后结果一定不同。常用算法有MD5,SHA256等等。
!!!以上主要是简单了解学习下加密算法并做个归纳整理,记录下来~来源参考链接