1
0
Files
cryptopal_rs/cryptopal_book/src/challenge_18.md
2025-09-02 16:43:02 +08:00

1.6 KiB
Raw Blame History

挑战18实现CTR流密码模式

字符串:

L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLXzhPweyyMTJULu/6/kXX0KSvoOLSFQ==

...在CTR模式下解密为近似英语的内容CTR是一种将AES分组密码转换为流密码的AES分组密码模式参数如下

key=YELLOW SUBMARINE
nonce=0
format=64位无符号小端nonce
       64位小端块计数字节计数 / 16

CTR模式非常简单。

CTR模式不是加密明文而是加密运行计数器产生16字节的密钥流块与明文进行XOR。

例如对于具有这些参数的消息的前16字节

keystream = AES("YELLOW SUBMARINE",
                "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

...对于下一个16字节

keystream = AES("YELLOW SUBMARINE",
                "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00")

...然后:

keystream = AES("YELLOW SUBMARINE",
                "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00")

CTR模式不需要填充当你用完明文时你只需停止XOR密钥流并停止生成密钥流。

解密与加密相同。生成相同的密钥流XOR并恢复明文。

解密此函数顶部的字符串然后使用你的CTR函数来加密和解密其他东西。

这是好代码中唯一重要的分组密码模式

大多数现代密码学依靠CTR模式将分组密码适配为流密码因为我们想要加密的大部分内容更好地描述为流而不是块序列。Daniel Bernstein曾经对Phil Rogaway开玩笑说好的密码系统不需要"解密"变换。像CTR这样的构造就是他所说的。