密码学进阶

前面说到密码学的一些基础,和DES、AES的一些算法,接下来说深入一点:
SM4
分组密码的安全性主要来自S盒,但是大部分加密算法的S盒的设计原理没有公开,因此存在各种隐患。出于安全性和确定性的考虑,2006年我国国家密码管理局公布了无线局域网产品使用的SM4密码算法,可以抵御差分攻击、线性攻击等。这是我国第一次官方公布的商用密码算法。
SM4加密算法特点如下:
1. SM4分组长度和密钥长度都是128位。SM4的数据处理单位:字节(8位)、字(32位)。
2. SM4属于对合运算,所以解密算法与加密算法相同,只有轮密钥的使用顺序相反。
3. SM4加密算法基本运算:

		1. 模2加: 运算符号“⊕”,32位的异或运算;
		2. 循环位移:运算符号“<<<i”,循环左移i位。

分组密码工作模式

1980年NIST公布了DES的4种工作模式:电码本模式(Electronic Code Bool, ECB)、密码分组链接模式(Ciper Block Chaining, CBC)、输出反馈模式(Output Feedback, OFB)、密码反馈模式(Ciper Feedback,CFB),以及AES征集中的CTR模式。
工作模式又分:
错误传播有界:出现明文或者密文错误只产生有限几个数据错误;
错误传播无界:出现明文或者密文错误会引发后续数据全部错误。
1. ECB
电码本模式是最简单的运行模式,各分组使用同一加密密钥。当密钥取定时,明文的各分组,对应的唯一的密文。设明文M=(M1,M2,…,Mn ),相应的密文C=(C1,C2,…,Cn),其中Ci=E(Mi,k), i=1,2,…,n。
ECB非常合适处理短数据加密,发送少量数据。同一明文分组在消息中重复出现时,对应的密文分组耶也相同。ECB要求处理数据是分组长度的整数倍,否则最后一个数据块要填充0或者随机数。
2.CBC
1. CBC的密文链接方式中,输入是当前明文组与前一密文组的异或。
2. CBC加密过程可表示位:Ci=Ek(mi⊕Ci-1), i=1,2,…,n
3. CBC的解密过程可表示为:mi=Ek-1(Ci)⊕Ci-1, i=1,2,…n
CBC的密文链接方式如下:加密会引发错误传播无界,解密错误传播有界。CBC不利于并行计算。

CBC的明密文链接方式:
明密文链接方式中输入是前一组密文和前一组明文异或之后,再与当前明文组异或。
CBC的明密文链接方式下,加密和解密均会引发错误传播无界。
在这里插入图片描述
3.OFB
OFB模式中,如果加密时某一明文出错,不影响其他明文。同样解密时,某一密文出错,不影响其他密文。所以没有错误传播。

在这里插入图片描述

4.CFB
密码反馈模式和OFB很相似。不同的是填充移位寄存器R的不是加密算法E输出的最右S位,而是E输出与明文异或之后的密文,i = 1,2,…,n的S位。
在这里插入图片描述
密码反馈模式的特点:
解密时R和E按加密同样的方式工作,产生同样的密钥流,与密文异或便可以完成解密。
CFB模式中,如果加密时某一明文出错,则会影响后面的所有明文。同样解密时,某一密文出错,则会影响后面所有密文。所以CFB模式具有传播无界的特性。CFB不利于并行计算。

5. CTR
计数器模式(CTR)与OFB、CFB一样,把分组密码化为序列密码。在本质上利用分组密码产生密钥序列,按序列密码的方式加密。
设一组给定的计数器序列Counter = (Counter1,Counter2,…,Countern-1, Countern),明文M=(M1,M2,…,Mn),相应的密文C=(C1,C2,…,Cn),其中i = 1,2…,n, E为加密算法。Mn的长度u小于等于分组长度。
在这里插入图片描述

序列密码

理论上来说“一次一密”的方式是不可破解的,但这种方式的密钥量巨大所以真正实现随机是不可行的。因此人们采用序列密码模仿“一次一密”方式,获得了安全性较高的密码。
**周期:**序列就存在一定的循环周期,如果周期足够长,就会有比较好的保密性。一般而言,很少采用周期小于1010 的序列;周期为1050 的序列也很常见。

伪随机数生成器(PRNG): 真正的随机数是随机产生的,其结果是不可预测的。而计算机中的随机函数是按照一定的算法模拟产生的,其结果是确定的。所以是伪随机数。序列密码又称流密码,原理是明文流与密钥流按顺序逐比特进行异或运算,从而产生密文流。序列密码属于对合运算,序列密码的加密和解密运算只是简单的模二加运算,所以序列密码的强度依靠密钥序列的随机性和不可预测性。

线性反馈移位寄存器: 序列密码方式可以仿效“一次一密”密码,而产生密钥序列的最重要部件是反馈移位寄存器。一个n级反馈移位寄存器由n个二元存储器和一个反馈函数F(S0,S1,…,Sn-2,Sn-1)组成,移位寄存器工作模式如下图所示。移位寄存器进行左移,然后反馈函数F(S0,S1,…,Sn-2,Sn-1)的结果赋值给Sn-1
在这里插入图片描述

RC4

RC4是Ron Rivest 为RSA设计的序列密码,RC4算法简单、速度快、容易用软硬件实现,因此应用广泛。比如WEP、WPA、SSL/TLS应用了RC4;Windows、Lotus notes、 Apple AOCE等软件系统也应用了RC4。
RC4其安全表有256个字节,可排列的可能性有256!≈种,所以穷举法破解RC4是几乎不可能的。

Hash函数

Hash函数用于构建数据的“指纹”,而“指纹”用于标识数据。Hash函数主要用于数据完整性、数字签名、消息认证等。Hash函数又称哈希函数、散列函数,是将任意长度的消息输出为定长消息(又称报文摘要)。形式为x = h(m)
哈希函数的特性:
(1). 单向性: 已知x,求x=h(m)的m在计算上不可行的。
(2).弱抗碰撞性:对于任意给定的消息m,如果找到另一不同消息m ,使得h(m)=h(m)在计算上不可行的。
(3).强抗碰撞性: 寻找两个不同消息m和m’,使得h(m)=h(m’)在计算上不可行的。

哈希函数的安全性:
(1).穷举攻击:典型方式有“生日攻击”,即产生若干明文消息,并计算出消息摘要,然后进行对比找到碰撞。
(2).利用散列函数的代数结构:攻击其函数的弱性质。通常的有中间相遇攻击、修正分组攻击和差分分析攻击等。

MD5和SHA-1算法

1. MD5算法
MD5算法经过了MD2、MD3、MD4发展而来,消息分组长度为512比特,产生128比特的摘要。2004年,王小云教授找到了MD5碰撞,并有专家据此伪造了标准的X.509证书,实现了真实的攻击。
2. SHA-1算法
SHA-1算法的输入是长度小于264 比特的任意消息,并输出160比特的摘要。同样,王小云教授也找到了SHA-1算法的碰撞,所以SHA-1退出也只是时间问题。

SM3算法
SM3算法是对长度为/(/ < 264)比特的消息m,SM3算法经过填充和迭代压缩,生成长度为256比特的消息摘要。
SM3算法可以用于数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。

HMAC

  1. 消息认证码
    消息认证码(Message Authentication Code, MAC)是基于消息和秘密钥的公开函数,输出为定长数据:
    MAC= C(M,K)
    假定通信双方发共享秘密钥为K,发送方A向接受方B发送报文M 并附上MAC,记为:
    A ->B : M|| MAC
    当B收到后,使用同样的秘密钥K和M计算出MAC’。如果MAC = MAC’,则说明:
    接受的报文M没有被修改。
    接受的报文M是A所发送。

  2. HMAC算法
    Hash函数不使用密钥,不能直接用于MAC。因为,直接发送的消息M和hash结果h(M),一旦被截获,就能直接被攻击者伪造,变成M‘和h(M’)发送出去.Hash消息认证码(Hash-based Message Authentication Code, HMAC)是一种基于密钥和散列函数进行消息认证的方法。它要求通信双方共享密钥、约定算法、约定报文Hash运算(如MD5、SHA,SM3等)

公钥密钥体制

在公钥密钥体制中,加密和解密采用两把不同的钥匙,分别为公钥和私钥。公钥可以公开,而私钥需要严格保密。这种密码系统需要使用单向陷门函数来构造。
单向函数y=f(x)满足下面两个条件:
(1).已知x,要计算y很容易;
(2).已知y,要计算出x很难。
常见的单向函数有SM3、SHA-1、MD5。单向函数,加密效率高、但加密后不能还原。

RSA密码
RSA(Rivest Shamir Adleman)是典型的非对称加密算法,该算法基于大素数分解。核心是模幂运算。对于RSA密码,
D(E(M))= (Me)d = (Md)e = E(D(M)) mod n
因此利用RSA密码可以同时实现数字签名和数据加密。

RSA加解密与数字签名过程如图所示:
在这里插入图片描述
以下为RSA算法的一些题,方便我们掌握该算法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在表单进阶第四关中,我们将学习如何使用 PHP 处理表单数据并将其存储到数据库中。 首先,我们需要在 HTML 中创建一个表单,该表单将包含用户输入的数据。例如,我们可以创建一个注册表单,要求用户提供他们的姓名、电子邮件地址和密码。我们可以使用以下代码来创建这个表单: ``` <form method="post" action="process_form.php"> <label for="name">Name:</label> <input type="text" id="name" name="name" required><br> <label for="email">Email:</label> <input type="email" id="email" name="email" required><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required><br> <input type="submit" value="Submit"> </form> ``` 在这个表单中,我们定义了三个输入字段:姓名、电子邮件地址和密码。我们还指定了表单提交后要调用的处理脚本的名称为 `process_form.php`。 接下来,我们需要创建一个 PHP 脚本来处理这个表单提交。在这个脚本中,我们将获取表单数据并将其存储到数据库中。以下是一个处理脚本的示例: ``` <?php // 获取表单数据 $name = $_POST['name']; $email = $_POST['email']; $password = $_POST['password']; // 连接到数据库 $host = 'localhost'; $user = 'username'; $pass = 'password'; $dbname = 'database_name'; $conn = mysqli_connect($host, $user, $pass, $dbname); // 将数据插入到数据库中 $sql = "INSERT INTO users (name, email, password) VALUES ('$name', '$email', '$password')"; mysqli_query($conn, $sql); // 关闭数据库连接 mysqli_close($conn); ?> ``` 在这个脚本中,我们首先获取了表单数据,然后连接到数据库。我们使用 `mysqli_connect()` 函数连接到数据库,并将连接信息存储在变量 `$conn` 中。 接下来,我们将表单数据插入到数据库中。我们使用 SQL 插入语句将数据插入到名为 `users` 的表中。最后,我们关闭数据库连接,以确保安全性。 这就是在 PHP 中使用表单处理和数据库存储数据的基本方法。通过使用这些技术,我们可以轻松地创建强大的 Web 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值