我正在跟踪一个关于CTR加密模式的文档这里。我有一些观点还没有得到澄清。在第一部分回顾反模式加密。操作。
要使用ctr模式加密,首先使用明文M(任意位字符串)、密钥K和计数器ctr,其中ctr是n位字符串。设C是M的异或(Excusive),以及pad EK(ctr) x- EK(ctr+1) -EK(ctr+2)的第一位。密文是( ctr,C),或者更广泛地说,是C,以及足以恢复ctr的东西。为了解密密文(ctr;C),计算明文M作为C的异或,以及pad EK(ctr)的第一个\ctr(Ctr_R)_x_x(ctr+1)_x_(EK)_x(ctr+2).因此,解密与M和C的加密是一样的
如我所想,伪代码将是:
selectFirst(pad, plainText M){
int n = length(M);
return n first element of pad
return firstElements(pad, n);
}
void ctr(){
string M;
key[16] K;
n-bit-string ctr;
pad = EK(ctr) || EK(ctr+1) || EK(ctr+2)...
firstM = selectFirst(pad, M);
C = xor(M, firstM);
}EK (x)用密钥K加密x(使用一些算法,例如AES),但我不明白:
发布于 2016-11-29 03:05:26
什么是ctr + 1,ctr+2.
ctr是块密码处理的第一个128位输入值,ctr+1是这个数字递增1,依此类推。在实际操作中,ctr通常是96位nonce和32位递增计数器的组合.
.=‘ctr+2 1’>.‘>.“或”行动?其结果是什么?
不,在本例中,\x指的是级联。
CTR模式是否一次执行而不使用循环?
不,CTR模式实现几乎总是使用循环,并以块大小的倍数进行处理。
发布于 2016-11-30 12:33:55
我认为在计数器模式下的n块密码的伪码可能如下所示:
#check if plaintext is multiple of the blocklength, if not pad
padding(plaintext M, blocklength n){
if (M % n != 0) {
pad(M)
}
}
#run encryption on padded plaintext
ctr (Key K, Counter ctr, Paddedplaintext M){
# number of plaintext blocks to encrypt
number_of_blocks = M / n
for i in number_of_blocks {
#read n bits from padded plaintext
block_i = M.read(n)
#encrypt counter value with key K and XOR with n-bits of plaintext
C_i = block_i XOR Encrypt(ctr, K)
#update counter value
ctr = ctr + 1
}
}https://crypto.stackexchange.com/questions/41891
复制相似问题