gpt4 book ai didi

haskell - 加密和 ByteString 边界

转载 作者:行者123 更新时间:2023-12-02 14:35:14 35 4
gpt4 key购买 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 阵列时。

最佳答案

与haskell无关。

阅读http://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

输出

[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
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com