我正在寻找一种生成ID(字节序列)的方法,可以(以某种方式)验证该ID由我的应用程序生成。
我目前正在为此目的使用AES-GCM,它会对一些随机输入进行加密。收到这些AES-GCM ID时,我正在尝试对其解密,如果失败,我知道它不是我生成的。但是,拥有一个将来可能永远不会改变的静态加密密钥(因为我必须重新分配所有生成的ID)是(据我了解)GCM的问题,因为每当重复使用现成的随机数时,它的安全性就会降低发生在某个时候。
我想到的另一种方法是生成一对(plain_text_id,hmac(plain_text_id, secret))
,因为plain_text_id
是一些随机生成的ID,我在内部将其映射到真实的用户ID(因此对攻击者没有用) 。这与签署一些纯文本相同。
我不想对数据库进行检查,因为我明确地希望在访问数据库之前采用这种完整性检查(例如,随机攻击者无法使用随机ID对我进行DDoS攻击)
是否存在另一种生成可验证ID的方法?使用AES-XXX或HMAC方法(如上所述)是否足够?如果是这样:哪个和为什么?