密码学基础知识

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/07/mi-ma-xue-ji-chu.html

古代密码

加密手段:平移和置换

凯撒密码

c = p + k

如果key=3,则将明文的各个字母都向后平移3可得到密文。

跟根据字频统计进行破解:

在一般的英文文章文献的统计中中,有些字母出现的频率比较高,例如e、t、a等。所以可将密文进行统计,根据高频字母猜测密钥key,再带入进行验证,反复几次,一般可以得到明文。

多字码加密

选定一个密钥key,可以为一个单词或短语,将密文循环使用这个key进行平移加密。

避免了字频统计进行破解。

伪随机数生成器

生成看似随机的数字串作为密码,就不用循环使用密钥,增加破解的难度。

也避免了字频统计进行破解。

现代密码

现代密码学中的安全是基于密钥的保密,而不是算法的保密。所以,加密算法一般都是公开的。

对称加密

加密解密使用同一个密钥,加解密互为逆操作。

aes就是将明文分组后,每一组排列成矩阵,进行字节代换、行位移、裂混合、 轮密钥加变换等操作进行加密。解密时使用密钥按照逆序对密文进行逆操作即可。

非对称加密

加密、解密使用不同的密钥(一般加密使用的叫公钥,解密使用的私钥),加密、解密的方法也不是互逆的过程。但是由于公钥和私钥具有一定的关系,使用其中一个加密后,另一个就可以解密出来;而且公钥和私钥的生成基于数学难题,具备公钥、密文和私钥时,很难得到私钥或明文。

公钥密码体制一般基于以下两个数学难题:

  1. 大素数乘积分解难题就是两个比较大的质数相乘,可以很容易得到乘积;但是,如果只知道乘积,我们却很难将它分解质数因子。
  2. 椭圆曲线离散对数难解性依靠定义在椭圆曲线点群上的离散对数问题的难解性,形成椭圆曲线密码。有限域GF(p)的乘法群中的离散对数问题是难解的,在此基础上发现有限域GF(p)上的椭圆曲线上的一些点构成交换群,而且对离散对数问题难解。

RSA算法就是基于大素数乘积分解难题。

非对称加密解密一般都比较慢,但是有其独特的使用场景,例如消息签名, ssh免密登陆等。

消息数字签名

使用私钥进行加密即签名,如果使用公钥可以解密,就算完成了签名的验证

密钥进行ssh免密登录

ssh使用私钥登录大致步骤就是:主机A(客户端)创建公钥私钥,并将公钥复制到主机B(被登陆机)的指定用户下,然后主机A使用保存私钥的用户登录到主机B对应保存公钥的用户。

在登陆的时候,A发起登陆请求后,B会使用A的公钥加密一段信息发送给A,A解密后发给B,B校验通过就建立连接。

RSA 算法

密钥生成:选择尽量大的质数p、q,则n=p*q;寻找正整数e,满足1< e < φ(n),且e与φ(n) 互质。φ(n) =(p-1)*(q-1)叫做n的欧拉函数φ(n) ;寻找正整数d,满足e*d % φ(n) = 1。则公钥为{e,n},私钥为{d,n}。

加密:依次取8位记作整数m,使用公钥{e,n}计算密文c,其中c = m^e % n

解密:依次取8位记作整数c,使用私钥{d,n}计算m,其中m = c^d % n

消息摘要算法

散列算法就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值h(m)

这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

eg:md5、sha-1、sha256

常用于消息完整性的校验。

哈希碰撞

因为散列值的长度一定,散列值是有限域上的值,但是消息的组合方式是无限的。所以,总有不同的消息对应相同的散列值(hash值),这就是哈希碰撞。

加盐:计算散列值的过程中,为了尽量避免哈希碰撞,可以在明文后面加上一定的值(字符串),这就是加盐。

发表评论