我正在开发一个应用程序,它一方面生成一个代码,其中包含有关购买的某些信息,其中包含一个信用信息。例如,您可以购买一个给定的分钟数来在公共PC上花费在网吧上,并且您会收到一张带有数分钟/分钟的票证,然后通过PC封锁软件对其进行解码和处理。公共电脑。
该信息的全长(包括购买日期,ID等)大约为12个字节。显然,我需要保护这些数据,因为我需要使其不可更改。
我没有密码学方面的经验,但最近几天已经阅读了很多,所以我提出了一个方案,我在CFB模式下使用Twofish加密数据(保持密文很小),并添加4个字节长IV,随机生成。我意识到这是一个短暂的IV,但背后的原因是攻击者应该抓住一张显然荒谬的票数,成为一个具有65535变化的IV的线程。
我看到的问题(更不用说我想念的那个)是我还需要验证代码,因为在CFB模式下,密文的一个小变化只会对明文产生一点变化,所以任何人都可以改变,例如,只需更改A的B即可获得票证
所以,第一个问题是:使用明文的CRC16作为IV有没有明显的问题,并将它(未加密)添加到加密代码中以用于身份验证和IV?我再说一遍,我不是在密码学中,但是将未加密的明文信息与密文一起提供一些信息感觉很奇怪。但这只是直觉
或者,相反,我应该使用流密码?哪一个可以通过密文的小变化对明文做出重大改变(/搞乱)。这是否与密码操作模式中的错误传播属性有关?
请问一些指南?
非常感谢。
顺便说一句,如果这很重要,我在PHP上使用mcrypt。
我必须补充说,应用程序的另一端,即读取票证的那一端,不是(也不可能)在线。对不起,请注意这个问题。
答案 0 :(得分:1)
听起来你要找的是HMAC,或者,如果你无法保护客户端PC,那么就是数字签名,而不是加密。
答案 1 :(得分:0)
我会添加一些盐并生成一个MD5哈希,用明文
发送