问题:
我正在尝试加密 32 位消息以生成不超过 40 位的密文。是否有经过审查的分组密码或其他加密非常短消息的好方法?有没有这么小的块大小的知名密码?
背景和动机:
复古平台的视频游戏可能有一个比一次活动更长的活动,但没有用于存储活动状态的非易失性存储器。为了在一个电源周期内继续进行一场战役,游戏会发出一个“密码”并让玩家在下一次输入它。此密码是一个简短的加密消息,其中包含活动的状态以及一些额外的位,用于确保随机输入的密码或翻转了几位的密码不太可能起作用。对于此应用程序,32 位消息包括玩家所在的章节、任务标志、金钱、经验等。一个典型的密码有 8 个字符,每个字符(数字、辅音和连字符)有 32 种可能性(5 位),总共 40 位。较长的密码写下来和输入要麻烦得多。
我不知道任何具有如此短块大小的知名密码。当长度超过一个块但不是密码块大小的精确倍数时,密文窃取起作用。例如,如果有一个 32 位的分组密码,可以先加密前 32 位,然后再加密后 32 位,这样中间的 24 位就接触了两次。但据我所知,它不适用于比块短的消息。所以目前我正在使用一种自制密码(是的,eww),其结构受XXTEA启发,有五个 8 位字而不是几个 32 位字。在将活动的状态打包到前 32 位之后,我在加密之前用一个常量填充剩余的位,并拒绝填充未解密为所需常量的密码。
加密和解密需要在一百万个周期内在 8 位微处理器上运行。我担心无聊的游戏玩家进行的在线攻击和纸笔攻击,正如Nintendo Power杂志的“机密信息”部分所发布的那样。但我不太担心有人从游戏代码中读取算法和对称密钥并使用这些信息将密码生成器放在网站上的自动攻击,因为这需要玩家有意识地努力欺骗游戏。