当需要转换密钥时,密钥如何对称?

时间:2014-01-17 08:31:26

标签: algorithm cryptography encryption-symmetric symmetric-key

我正在学习密码学,我在Wikipedia上发表了以下声明:

  

键可以相同,也可以在两个键之间进行简单的转换。

当需要转换密钥时,密钥如何对称?更确切地说,“对称”不是指“相同”吗?

2 个答案:

答案 0 :(得分:3)

在对称密钥密码术中,通常在两个方向上使用相同的密钥(加密和解密)。它是对称,因为通过反转加密操作的内部顺序来执行解密。您提供的密钥的不同部分可能由算法在内部生成和使用(如AES中的情况) - 但显然这不是完全随机的,因为加密和解密过程将不得不逆转另一方面,因为这仍然是对称密钥加密。您可能知道,许多加密方法在内部都有多轮 - 通常对于每个轮次,从您提供的密钥生成子密钥或圆密钥。生成轮/子密钥的过程称为密码学中的密钥调度算法,标准AES使用the Rijndael key scheduling algorithm

因此,在那里描述的转换将发生在您为加密和解密例程提供的密钥上。但是,您提供的密钥仍然是相同的(这就是重点),操作将全部“相同”但反之。

有一个关于crypto.stackoverflow.com的问题,询问AES-128(带128位密钥的AES),AES-196(196位密钥)和AES-256(256位密钥)的区别。您会发现PaŭloEbermann的答案对于进一步理解原始密钥如何转换为圆/子密钥非常有用。引自他的回答:

   k_0    k_1    k_2    k_3 ─→┃f_1┃─╮
    │      │      │      │    ┗━━━┛ │
 ╭──│──────│──────│──────│──────────╯
 │  ↓      ↓      ↓      ↓
 ╰─→⊕   ╭─→⊕   ╭─→⊕   ╭─→⊕
    │   │  │   │  │   │  │
    ↓   │  ↓   │  ↓   │  ↓    ┏━━━┓
   k_4 ─╯ k_5 ─╯ k_6 ─╯ k_7 ─→┃f_2┃─╮
    │      │      │      │    ┗━━━┛ │
 ╭──│──────│──────│──────│──────────╯
 │  ↓      ↓      ↓      ↓
 ╰─→⊕   ╭─→⊕   ╭─→⊕   ╭─→⊕
    │   │  │   │  │   │  │
    ↓   │  ↓   │  ↓   │  ↓     ┏━━━┓
   k_8 ─╯ k_9 ─╯ k_10 ╯ k_11 ─→┃f_3┃─╮
    │      │      │      │     ┗━━━┛ │
 ╭──│──────│──────│──────│───────────╯
 │  ↓      ↓      ↓      ↓
.......................................
 │  ↓      ↓      ↓      ↓
 ╰─→⊕   ╭─→⊕   ╭─→⊕   ╭─→⊕
    │   │  │   │  │   │  │
    ↓   │  ↓   │  ↓   │  ↓
   k_40 ╯ k_41 ╯ k_42 ╯ k_43
  

密钥扩展以ki仅直接依赖于ki-1的方式工作   和ki-Nk(其中Nk是密钥中的列数,即4   AES-128)。在大多数情况下,它是一个简单的⊕,但在每个Nk键之后   列,应用非线性函数fi ....函数fi   非线性函数由AES S-box构建(应用于每个字节   另外),旋转一个字节,和一个圆形常数的XOR   取决于i(这是对应于xi-1的GF(28)的元素,   但是标准中还有一个表格。 然后是键选择   算法简单地将k0 ... k3作为第一轮密钥,k4 ... k7作为   第二个,直到k40 ... k43为最后一个。

答案 1 :(得分:0)

Martin Dinov对使用密钥计划派生子密钥的方法有一个很好的解释。但是某些算法甚至可能不存在子键。即便如此,子密钥对于加密和解密都是对称的,那么不对称性在哪里呢?

更有可能的是维基百科暗示关键的推导。这在许多加密协议中使用,例如用于许多旅行卡。目前大多数旅行卡都是存储卡,每张卡包含一组(一组)对称密钥。这些密钥是通过使用唯一标识符(通常是非接触式芯片的UID,如MIFARE或DESFire)和主密钥执行密钥派生机制得出的。因此,卡终端具有主密钥,读取UID并计算卡特定密钥以获得读或写访问权。

因此,即使卡和终端在开始安全通信之前具有不同的密钥,卡密钥 - 然后可能是会话密钥 - 由终端的密钥导出机制导出。会话密钥 - 用于保护传输协议的密钥 - 有时使用某种认证的密钥协议协议(如Diffie Hellman)在高端芯片上计算。