首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >普通AES CTR与CCM型CTR的区别

普通AES CTR与CCM型CTR的区别
EN

Cryptography用户
提问于 2014-04-10 18:37:35
回答 1查看 1.6K关注 0票数 3

我试图调整SJCL的以下功能,它做"AES-CCM“风格的CTR加密,做”纯CTR“加密。我正在玩SIV,我宁愿使用这个经过仔细审查的实现,而不是从头开始构建我自己的CTR密码。然而,我很难准确理解CCM部件做什么,以及如何修改这个例程以“删除”CCM功能(处理标记和L参数的部分)。我的问题是:这两种CTR“样式”到底有什么区别,在下面的片段中是如何翻译的?任何帮助都是非常感谢的。

代码语言:javascript
复制
_ctrMode: function(prf, data, iv, tag, tlen, L) {
  var enc, i, w=sjcl.bitArray, xor = w._xor4, ctr, b, l = data.length, bl=w.bitLength(data);

  // start the ctr
  ctr = w.concat([w.partial(8,L-1)],iv).concat([0,0,0]).slice(0,4);

  // en/decrypt the tag
  tag = w.bitSlice(xor(tag,prf.encrypt(ctr)), 0, tlen);

  // en/decrypt the data
  if (!l) { return {tag:tag, data:[]}; }

  for (i=0; i<l; i+=4) {
    ctr[3]++;
    enc = prf.encrypt(ctr);
    data[i]   ^= enc[0];
    data[i+1] ^= enc[1];
    data[i+2] ^= enc[2];
    data[i+3] ^= enc[3];
  }
  return { tag:tag, data:w.clamp(data,bl) };
}
EN

回答 1

Cryptography用户

回答已采纳

发布于 2014-04-10 23:28:24

CCM的CTR部分基本上是_ctrMode函数中最后一个for循环:

代码语言:javascript
复制
  for (i=0; i<l; i+=4) {
    ctr[3]++;
    enc = prf.encrypt(ctr);
    data[i]   ^= enc[0];
    data[i+1] ^= enc[1];
    data[i+2] ^= enc[2];
    data[i+3] ^= enc[3];
  }

即CTR简单地说是:用块密码加密计数器块,将加密的块加密到数据中,增加计数器,重复.

(对于那些不习惯SJCL API的人,他们倾向于对32位字而不是字节进行操作)。

正如CodesInChaos所提到的,虽然CTR模式已经标准化(在NIST SP800-38A中),但“CTR”被用作许多其他模式(例如CCM、GCM、SIV、EAX)的组成部分,并且它们在初始计数器的构造方式上有很大的不同(尽管大多数模式在完成后将遵循相同的基本方法)。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/15516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档