答案 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)在高端芯片上计算。