密码学的那些事儿

密码html

密码学中的密码和咱们平常生活中所说的密码不太同样,计算机术语『密码』是一种用于加密或者解密的算法,而咱们平常所使用的『密码』是一种口令,它是用于认证用途的一组文本字符串。这里咱们要讨论的是前者:cipherlinux

密码学的那些事儿密码学的那些事儿

密钥算法

密钥是一种参数,它是在使用密码算法过程当中输入的参数。同一个明文在相同的密码算法和不一样的密钥计算下会产生不一样的密文。不少知名的密码算法都是公开的,密钥才是决定密文是否安全的重要参数,一般密钥越长,破解的难度越大,好比一个 8 位的密钥最多有 256 种状况,使用穷举法,能很是轻易的破解。知名的 DES 算法使用 56 位的密钥,目前已经不是一种安全的加密算法了,主要仍是由于 56 位的密钥过短,在数小时内就能够被破解。密钥分为对称密钥与非对称密钥。浏览器

明文/密文安全

明文是加密以前的原始数据,密文是经过密码运算后获得的结果成为密文。服务器

密码学的那些事儿密码学的那些事儿

对称密钥app

对称密钥,又称为共享密钥加密,对称密钥在加密和解密的过程当中使用的密钥是相同的,常见的对称加密算法有DES、3DES、AES、RC五、RC6。对称密钥的优势是计算速度快,可是它也有缺点,密钥须要在通信的两端共享,让彼此知道密钥是什么对方才能正确解密,若是全部客户端都共享同一个密钥,那么这个密钥就像万能钥匙同样,能够凭借一个密钥破解全部人的密文了,若是每一个客户端与服务端单独维护一个密钥,那么服务端须要管理的密钥将是成千上万,这会给服务端带来噩梦。下面就是一个简单的对称加密,将明文加密成 ASCII。网站

# 加密的方式:在ASCII的基础上 + 密钥的值

def encipher(plain_text, key):
    # 加密
    cipher_text = []
    for c in plain_text:
        cipher_text.append(str(ord(c) + key))

    return ' '.join(cipher_text)

def decipher(cipher_text, key):
    # 解密
    plain_text = []
    for c in cipher_text.split(" "):
        plain_text.append(chr(int(c)+key))
    return "".join(plain_text)


if __name__ == '__main__':
    print "cipher_text:", encipher("abcdef", 0)
    print "plain_text:", decipher("97 98 99 100 101 102", 0)

非对称密钥加密

非对称密钥,又称为公开密钥加密。服务端会生成一对密钥,一个私钥保存在服务端,仅本身知道,另外一个是公钥,公钥能够自由发布供任何人使用。客户端的明文经过公钥加密后的密文须要用私钥解密。非对称密钥在加密和解密的过程的使用的密钥是不一样的密钥,加密和解密是不对称的,因此称之为非对称加密。与对称密钥加密相比,非对称加密无需在客户端和服务端之间共享密钥,只要私钥不发给任何用户,即便公钥在网上被截获,也没法被解密,仅有被窃取的公钥是没有任何用处的。常见的非对称加密有 RSA,非对称加解密的过程:htm

  1. 服务端生成配对的公钥和私钥
  2. 私钥保存在服务端,公钥发送给客户端
  3. 客户端使用公钥加密明文传输给服务端
  4. 服务端使用私钥解密密文获得明文

数字签名

数据在浏览器和服务器之间传输时,有可能在传输过程当中被冒充的盗贼把内容替换了,那么如何保证数据是真实服务器发送的而不被调包呢,同时如何保证传输的数据没有被人篡改呢?要解决这两个问题就必须用到数字签名,数字签名就如同平常生活的中的签名同样,一旦在合同书上落下了你的大名,从法律意义上就肯定是你本人签的字儿,这是任何人都无法仿造的,由于这是你专有的手迹,任何人是造不出来的。那么在计算机中的数字签名怎么回事呢?数字签名就是用于验证传输的内容是否是真实服务器发送的数据,发送的数据有没有被篡改过,它就干这两件事,是非对称加密的一种应用场景。不过他是反过来用私钥来加密,经过与之配对的公钥来解密。

第一步:

服务端把报文通过 Hash 处理后生成摘要信息,摘要信息使用私钥加密以后就生成签名,服务器把签名连同报文一块儿发送给客户端。

密码学的那些事儿密码学的那些事儿

可第二步:

客户端接收到数据后,把签名提取出来用公钥(public-key)解密,若是能正常的解密出来 Digest2,那么就能确认是对方发的。

第三步:

客户端把报文 Tex t提取出来作一样的 Hash 处理,获得的摘要信息 Digest1,再与以前解密出来的 Digist2 对比,若是二者相等,就表示内容没有被篡改,不然内容就是被人改过了。由于只要文本内容哪怕有任何一点点改动都会 Hash 出一个彻底不同的摘要信息出来。

密码学的那些事儿密码学的那些事儿

数字证书

数字证书简称 CA,它由权威机构给某网站颁发的一种承认凭证,这个凭证是被你们(浏览器)所承认的。为何须要用数字证书呢,难道有了数字签名还不够安全吗?有这样一种状况,就是浏览器没法肯定全部的真实服务器是否是真的是真实的,举一个简单的例子:

A 厂家给大家家安装锁,同时把钥匙也交给你,只要钥匙能打开锁,你就能够肯定钥匙和锁是配对的,若是有人把钥匙换了或者把锁换了,你是打不开门的,你就知道确定被窃取了,可是若是有人把锁和钥匙替换成另外一套表面看起来差很少的,但质量差不少的,虽然钥匙和锁配套,可是你却不能肯定这是否真的是 A 厂家给你的,那么这时候,你能够找质检部门来检验一下,这套锁是否是真的来自于 A 厂家,质检部门是权威机构,他说的话是能够被公众承认的(呵呵)。

 

一样的, 由于若是有人(张三)用本身的公钥把真实服务器发送给浏览器的公钥替换了,因而张三用本身的私钥执行相同的步骤对文本 Hash、数字签名,最后获得的结果都没什么问题,但事实上浏览器看到的东西却不是真实服务器给的,而是被张三从里到外(公钥到私钥)换了一通。

那么如何保证你如今使用的公钥就是真实服务器发给你的呢?咱们就用数字证书来解决这个问题。数字证书通常由数字证书认证机颁发,证书里面包含了真实服务器的公钥和网站的一些其余信息,数字证书机构用本身的私钥加密后发给浏览器,浏览器使用数字证书机构的公钥解密后获得真实服务器的公钥。这个过程是创建在被你们所承认的证书机构之上获得的公钥,因此这是一种安全的方式。

原文来自:https://linux.cn/article-7957-1.html

本文地址:http://www.linuxprobe.com/cipher-key-cryptography.html

相关文章
相关标签/搜索