非常短(40 位)消息的分组密码是什么?

信息安全 加密
2021-09-01 14:31:16

问题:

我正在尝试加密 32 位消息以生成不超过 40 位的密文。是否有经过审查的分组密码或其他加密非常短消息的好方法?有没有这么小的块大小的知名密码?


背景和动机:

复古平台的视频游戏可能有一个比一次活动更长的活动,但没有用于存储活动状态的非易失性存储器。为了在一个电源周期内继续进行一场战役,游戏会发出一个“密码”并让玩家在下一次输入它。此密码是一个简短的加密消息,其中包含活动的状态以及一些额外的位,用于确保随机输入的密码或翻转了几位的密码不太可能起作用。对于此应用程序,32 位消息包括玩家所在的章节、任务标志、金钱、经验等。一个典型的密码有 8 个字符,每个字符(数字、辅音和连字符)有 32 种可能性(5 位),总共 40 位。较长的密码写下来和输入要麻烦得多。

我不知道任何具有如此短块大小的知名密码。当长度超过一个块但不是密码块大小的精确倍数时,密文窃取起作用。例如,如果有一个 32 位的分组密码,可以先加密前 32 位,然后再加密后 32 位,这样中间的 24 位就接触了两次。但据我所知,它不适用于比块短的消息。所以目前我正在使用一种自制密码(是的,eww),其结构受XXTEA启发,有五个 8 位字而不是几个 32 位字。在将活动的状态打包到前 32 位之后,我在加密之前用一个常量填充剩余的位,并拒绝填充未解密为所需常量的密码。

加密和解密需要在一百万个周期内在 8 位微处理器上运行。我担心无聊的游戏玩家进行的在线攻击和纸笔攻击,正如Nintendo Power杂志的“机密信息”部分所发布的那样。但我不太担心有人从游戏代码中读取算法和对称密钥并使用这些信息将密码生成器放在网站上的自动攻击,因为这需要玩家有意识地努力欺骗游戏。

1个回答

这类东西的通用名称是format-preserving encryptionThorp shuffle是一个不错的候选者,前提是您使用足够的轮函数(例如,加密安全散列函数的截断输出)和足够的轮数,如论文中所述。

话虽如此,在 8 位计算机上运行 100 万个周期,可能很难运行一个 64 轮的 Thorp shuffle,将截断的 SHA-1 作为轮函数。

不幸的是,没有标准的、经过充分研究的分组密码具有短块和在小型架构上的良好性能。另一方面,您的攻击模型表明攻击者不会真正努力尝试,因此您不需要绝对的加密级安全性;一个学术上薄弱的结构可能对你来说仍然足够强大。

我建议你浏览一下这个列出“轻量级分组密码”的页面并进行一些分析。其中一些提供 32 位块大小。您需要的是这样一个分组密码,例如在减少轮数的情况下存在已知攻击,从而表明一些密码学家试图破解它,并且没有成功破解完整密码。粗略一看,至少 KATAN、KTANTAN、SIMECK-32、SIMON-32 和 SPECK-32 符合这些标准;RC5 也可能在足够的轮数下可用。