sách gpt4 ai đã đi

haskell - 加密和 ByteString 边界

In lại 作者:行者123 更新时间:2023-12-02 14:35:14 35 4
mua khóa gpt4 Nike

我有以下测试应用程序:

import Codec.Crypto.AES
import qualified Data.ByteString.Char8 as B

key = B.pack "Thisismykey....."

iv = B.pack "0000000000000001"

main = do
let myenc = crypt' CTR key iv Encrypt (B.pack "1234567812345678")
print (B.unpack myenc)

打印以下结果:“\250\DC4\DC4\255\223\221C\ETBx\239sF\nuZu”

如果我将明文“1234567812345678”更改为“1234567812345688”我得到“\250\DC4\DC4\255\223\221C\ETBx\239sF\nuUu”

如果我将明文更改为“1134567812345678”我得到输出“\250\ETB\DC4\255\223\221C\ETBx\239sF\nuZu”

我现在非常惊讶,因为输入和输出之间显然存在可预测的相关性,恕我直言,这是不应该发生的。如果我更改明文前面的某些内容,那么只有输出的前面受到影响等等。是否可能与字节字符串的 8 或 16 字节边界有关,我该如何解决这个问题?这里有什么东西误导了我吗?

独立于 CTR 模式,应该注意的是 AES 适用于 4x4 字节数组,问题是关于单个数组的加密。据我了解,AES 应执行四轮混合,并且单个字节(共 16 个)的更改应导致至少 50% 的位不同。因此,在我看来,16 字节明文末尾的更改不会恰好更改密文的末尾,前面的更改不会更改前面等。据我了解,IV 仅作为计数器发挥作用当涉及多个 4x4 阵列时。

1 Câu trả lời

与haskell无关。

đọchttp://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Initialization_vector_.28IV.29

由于您在 CTR 模式下使用相同的 IV 对消息进行两次加密,因此不安全。阅读有关加密算法的信息,并尽量避免编写自己的加密代码,因为它更有可能存在安全漏洞。

CTR模式的要求是(key,IV)对必须是唯一的。最简单的解决方案是为您加密的每条新消息生成一个新的 IV。

【CTR模式安全漏洞说明】 https://crypto.stackexchange.com/questions/2991/why-must-iv-key-pairs-not-be-reused-in-ctr-mode

在 CTR 模式下 F(IV+counter,key) XOR Plaintext = CIPHER .. 因此,如果随机数和 key 保持相同,则 F 对于纯文本而言是相同的 .. 所以如果 $C_1$ 是 $P_1$ 的密码并且$C_2$ 是 $P_2$ 的密码

xor($C_1$,$C_2$) = xor($P_1$,$P_2$) for same (key,IV) pair

支持代码:

import Codec.Crypto.AES
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString as BS
import Data.Bits (xor)

key = B.pack "Thisismykey....."

iv = B.pack "1234567891012131"
p1 = (B.pack "1234567812345678")
p2 = (B.pack "1234567812345688")
x = crypt' CTR key iv Encrypt p1
y = crypt' CTR key iv Encrypt p2

main = do
print $ BS.zipWith xor x y
print $ BS.zipWith xor p1 p2

Đầu ra

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0]
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0]

关于haskell - 加密和 ByteString 边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352282/

35 4 0
Bài viết được đề xuất: Haskell:Turtle:命令行解析器
Bài viết được đề xuất: 升级后 Jenkins 缺少构建触发器部分
Bài viết được đề xuất: parsing - 如何使用 REBOL 解析 HTML 标签内部?
Bài viết được đề xuất: verilog - 请解释一下这个 SystemVerilog 语法 {>>byte{...}}
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com