首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java加密解决方案后的HMAC

Java加密解决方案后的HMAC
EN

Stack Overflow用户
提问于 2014-05-07 18:32:25
回答 2查看 795关注 0票数 2

我想加密一个cookie,并确保它没有被修改,所以我使用HMAC来加密cookie。

有几种实现方法:

1.加密cookie上的HMAC

代码语言:javascript
运行
复制
String encryptedCookie = AES ( cookie )
String mac = HMAC ( encryptedCookie )

-持久化值为: encryptedCookie + ":“+ mac的cookie

2.加密cookie上的HMAC &HMAC的服务器密钥

代码语言:javascript
运行
复制
String encryptedCookie = AES ( cookie )
String mac = HMAC ( encryptedCookie + ":" + Hmac's secretKey )

-持久化值为: encryptedCookie + ":“+ mac的cookie

3.加密cookie上的HMAC &一些无法猜测的静态数据

代码语言:javascript
运行
复制
String encryptedCookie = AES ( cookie )
String mac = HMAC ( encryptedCookie + ":" + java.sql.ResultSet.class.getName() )

-持久化值为: encryptedCookie + ":“+ mac的cookie

有人有什么想法吗?哪一个更好?或者你的解决方案是什么?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-07 21:07:24

HMAC功能应该已经被键化了。因此,通常HMAC显示为HMAC(K, M),其中K是键,M是消息。因此,候选2在这方面没有意义;这意味着计算中包含了3次密钥K (因为密钥在HMAC本身中使用了两次)。

出于同样的原因,使用带有无法猜测的数据的cookie也是没有意义的。HMAC的部分输入是关键的K,这已经是不可猜测的数据。这样你就不会获得任何安全,你就会使你的协议复杂化。

现在应该在CBC或CTR模式下使用AES。欧洲央行的加密模式不安全。这意味着你需要一个随机IV (CBC)或一个独特的IV (CTR)。此IV应该是HMAC的一部分,否则攻击者仍有可能更改解密后获得的明文。

票数 4
EN

Stack Overflow用户

发布于 2014-05-07 18:36:04

选项2和3实际上是相同的,假设静态数据确实不可猜测(以及相同的长度等)。如果您严重担心有人修改cookie,那么选项2更好,因为(假设密钥不是共享的),它将允许您检测是否对cookie进行了更改,并防止某人更改cookie,然后重新运行哈希以伪造mac。实际上,如果无法访问AES密钥,并且cookie中的数据具有某种语义含义,那么您很可能能够检测到对加密cookie的修改,就像它将解密到一些没有意义的东西一样。但是,从安全的角度来看,备选方案2将提供数据没有被修改的最大保证。

所有这些,我正在对你的设置做一些假设,这些假设可能是真的,也可能不是。

编辑,我显然误解了关于关键数据的问题,并且没有清楚地说明我的假设。@owlstead是一个更好的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23525610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档