当使用 openssl enc -camellia256 时,它使用什么块模式?

当使用 openssl enc -camellia256 时,它使用什么块模式?

openssl使用 Camellia 256 位密码加密文件时,您可以明确指定块模式(例如camellia-256-cfbcamellia-256-ofb等)。但是,如果您只使用-camellia256不带块模式的选项,则假定的隐式模式是什么?

我尝试通过使用固定的虚拟 iv 和密钥以所有不同模式加密同一个文件来弄清楚,如下所示:

#!/usr/bin/env bash

# create 1MB file with random data
openssl rand 1048576 -out random.bin

iv='11111111111111111111111111111111'
key='2222222222222222222222222222222222222222222222222222222222222222'
ciphers=(camellia256 camellia-256-cfb camellia-256-cfb1 camellia-256-cfb8 camellia-256-ecb camellia-256-ofb)

for c in ${ciphers[*]}; do
  # encrypt
  openssl enc -$c -iv $iv -K $key -in random.bin -out random-$c.bin
  # show hash of encrypted result
  openssl dgst -sha256 random-$c.bin
done

输出为:

SHA256(random-camellia256.bin)= 5625222f4bc4dd0e690ebfd24ade853f22d5155584756d9da41b6d8657d01a75
SHA256(random-camellia-256-cfb.bin)= 2b57e9cd8566af072a6162b21dc4e69337d2a9a23443fc7c25c0c1eba7f2d6eb
SHA256(random-camellia-256-cfb1.bin)= ae96dc3bdea49ec1d5c706db7f4e097f8e4e641abf2bb108eb57aa90d00eb84e
SHA256(random-camellia-256-cfb8.bin)= 7266631c9616fbfc00039dd868ba74af09d8829af11b45d83d46cb12925dceb2
SHA256(random-camellia-256-ecb.bin)= f91f4d164d40e7abb2b6a11e051d12ff82d256e4f52437d9f8997670cdb337b8
SHA256(random-camellia-256-ofb.bin)= 79a29d5790a68498ca90acb8b19fcb4e2a0066527a9de2419b9633d9f3cbaa6e

当然,由于输入是随机的,每次运行脚本时结果都会有所不同。

或者,如果我使用一个文件,里面装满(0x00 字节)而不是随机数据,如下所示:

dd bs=1048576 count=1 if=/dev/zero of=zeroes.bin

输出为:

SHA256(zeroes-camellia256.bin)= 22116d07d0c5b43e736f9990ad3f48c7710fe78ba1d6bb993dfa5a6d3a6fb133
SHA256(zeroes-camellia-256-cfb.bin)= cc75fc3257959bcaee12de3da7ef547d2f548a936d9068abde103c158d9540a8
SHA256(zeroes-camellia-256-cfb1.bin)= 912dc60b10bfad7d33fed18c1419f83437fcf84708a9336f3bbcf0a6164cd70d
SHA256(zeroes-camellia-256-cfb8.bin)= 70d340b32f58c9f2169a91c20698893046b76cd560e7a0fe2a1001591990fb8e
SHA256(zeroes-camellia-256-ecb.bin)= b9fdd441312bf9992fdca2fbbdbc165a738359312de53b0ddc71e383880cd43f
SHA256(zeroes-camellia-256-ofb.bin)= cc75fc3257959bcaee12de3da7ef547d2f548a936d9068abde103c158d9540a8

请注意,这里的cfbofb输出是相同的。但这可能是由于这些块模式如何根据输入数据定义密码流。

无论如何,没有明确定义的块模式的模式与其他所有模式都不同。

-camellia256所以我的问题是:当我指定密码算法时,openssl 使用什么块模式?

顺便说一句,当我用 AES 而不是 Camellia 进行相同测试时,结果显示与aes256相同aes-256-cbc

答案1

OpenSSL 通常默认为 CBC 模式和 PKCS#7 兼容填充,因此 Camellia 也会出现这种情况也就不足为奇了。每个加密库的情况都不同,顺便说一句,没有一种模式是所有加密库的默认模式(Java 标准提供商默认为 ECB)。

通常,您始终可以从 ECB 模式创建模式,因为单个 ECB 块加密只是执行块密码。我不会太深入地解释如何做到这一点,但对于前两个块来说,这通常很容易做到。

但是,正如您所指出的,所有这些都不是必需的,因为您也可以直接指定 CBC 模式,然后进行比较。

相关内容