CFB模式解读

一 什么是CFB模式

CFB模式全称Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个密文分组会被送回到密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。

在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。

明文分组和密文分组之间并没有经过“加密”这一步骤。在CFB模式中,明文分组和密文分组之间只有一个XOR。

CBC模式和CFB模式比较

二 初始化向量

在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量(IV)来代替。一般来说,我们需要在每次加密时生成一个不同的随机比特序列用作初始化向量。

三 CFB模式与流密码

CFB模式的结构和一次性密码本非常相似。一次性密码本是通过“明文”与“随机比特序列”进行XOR运算来生成“密文”的。而CFB模式则是通过将“明文分组”与“密码算法的输出”进行XOR运算来生成“密文分组”的。在通过 XOR来进行加密这一点上,两者是非常相似的。

在CFB模式中,密码算法的输出相对于一次性密码本中的随机比特序列。由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不可能像一次性密码本那样具备理论上不可破译的性质。

CFB模式中由密码算法所生成的比特序列称为密钥流。在CFB模式中,密码算法相对于用来生成密钥流的伪随机数生成器,而初始化向量相当于伪随机数生成器的“种子”。

在CFB模式中,明文数据可以被逐比特加密,因此可以将CFB模式看作是一种使用分组密码来实现流密码的方式。

四 CFB模式的解密

CFB模式解密时,需要注意的是分组密码算法依然执行加密操作,密钥流是通过加密操作来生成的。

五 对CFB的攻击

对CFB模式可以实施重放攻击。 

Alice向Bob发送一条消息,这条消息由4个密文分组组成。主动攻击者将该消息中的后3个密文分组保存了下来。第二天,Alice又向Bob发送了内容不同的4个密文分组(假设Alice使用了相同的密钥)。攻击者用昨天保存下来的3个密文分别将今天发送的后3个密文分组进行了替换。

于是,Bob解密时,4个分组中只有第1个可以解密成正确的明文分组,第2个会出错,而第3个和第4个则变成了被攻击者替换的内容(也就是昨天发送的明文内容)。攻击者没有破解密码,就成功地将以前的电文混入了新电文中。而第2个分组出错到底是通信错误呢,还是被人攻击所造成的呢?Bob是无法做出判断的。

  • 26
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进科学技术的应用,已成为一门综合性的技术科学。它与语言学、数学、电子学、声学、信息论、计算机科学等有着广泛而密切的联系。它的现实研究成果,特别是各国政府现用的密码编制及破译手段都具有高度的机密性。 进行明密变换的法则,称为密码的体制。指示这种变换的参数,称为密钥。它们是密码编制的重要组成部分。密码体制的基本类型可以分为四种:错乱--按照规定的图形和线路,改变明文字母或数码等的位置成为密文;代替--用一个或多个代替表将明文字母或数码等代替为密文;密本--用预先编定的字母或数字密码组,代替一定的词组单词等变明文为密文;加乱--用有限元素组成的一串序列作为乱数,按规定的算法,同明文序列相结合变成密文。以上四种密码体制,既可单独使用,也可混合使用 ,以编制出各种复杂度很高的实用密码。20世纪70年代以来,一些学者提出了公开密钥体制,即运用单向函数的数学原理,以实现加、脱密密钥的分离。加密密钥是公开的,脱密密钥是保密的。这种新的密码体制,引起了密码学界的广泛注意和探讨。利用文字和密码的规律,在一定条件下,采取各种技术手段,通过对截取密文的分析,以求得明文,还原密码编制,即破译密码。破译不同强度的密码,对条件的要求也不相同,甚至很不相同。 密码技术的目的很明确,就是为了解决信息安全问题。信息安全可分为四类特性:1、机密性:为了防止信息被窃,对应的密码技术有对称密码和公钥密码。2、完整性:为了防止信息被篡改,对应的密码技术有单向散列函数、消息认证码、数字签名。3、认证:为了防止攻击者伪装成真正的发送者,对应的密码技术有消息认证码和数字签名。4、不可否认性:为了防止发送者事后否认自己没有做过,对应的密码技术为数字签名。
CFB(Cipher Feedback)模式是一种对称密码算法中的工作模式,用于实现数据的加密和解密。 在C语言中实现AES(Advanced Encryption Standard)的CFB模式,可以通过以下步骤: 1. 引入所需的头文件,并定义相应的常数和结构体。 ```c #include <stdint.h> #include <stdlib.h> #include <string.h> #define BLOCK_SIZE 16 // 每个分组的大小(字节数) #define KEY_SIZE 16 // 密钥的大小(字节数) #define IV_SIZE 16 // 初始化向量的大小(字节数) typedef uint8_t byte; // 字节类型 ``` 2. 定义AES加密和解密函数,这里使用现有的AES实现库。 ```c #include "aes.h" void aes_encrypt(const byte *key, const byte *input, byte *output) { // 使用AES库进行加密操作 // ... } void aes_decrypt(const byte *key, const byte *input, byte *output) { // 使用AES库进行解密操作 // ... } ``` 3. 定义CFB加密和解密函数。 ```c void cfb_encrypt(const byte *key, const byte *iv, const byte *input, size_t size, byte *output) { // 分组加密的初始化向量 byte feedback[BLOCK_SIZE]; memcpy(feedback, iv, BLOCK_SIZE); // 加密每个分组 for (size_t i = 0; i < size; i += BLOCK_SIZE) { byte encrypted[BLOCK_SIZE]; aes_encrypt(key, feedback, encrypted); // 加密结果与输入数据异或,得到输出数据 for (size_t j = 0; j < BLOCK_SIZE; j++) { output[i + j] = encrypted[j] ^ input[i + j]; } // 更新反馈 memcpy(feedback, output + i, BLOCK_SIZE); } } void cfb_decrypt(const byte *key, const byte *iv, const byte *input, size_t size, byte *output) { // 分组解密的初始化向量 byte feedback[BLOCK_SIZE]; memcpy(feedback, iv, BLOCK_SIZE); // 解密每个分组 for (size_t i = 0; i < size; i += BLOCK_SIZE) { byte decrypted[BLOCK_SIZE]; aes_encrypt(key, feedback, decrypted); // 解密结果与输入数据异或,得到输出数据 for (size_t j = 0; j < BLOCK_SIZE; j++) { output[i + j] = decrypted[j] ^ input[i + j]; } // 更新反馈 memcpy(feedback, input + i, BLOCK_SIZE); } } ``` 以上是一个简单的用C语言实现AES的CFB模式的示例。请注意,在实际使用时,还需要进行合适的错误检查和输入验证,以确保安全性和正确性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值