相关疑难解决方法(0)

什么时候使用破坏的哈希函数是安全的?

使用像SHA-256这样的安全散列函数是微不足道的,并且继续使用MD5来实现安全性是鲁莽的行为.但是,我希望更好地理解哈希函数漏洞的一些复杂性.

已经为MD4和MD5生成了碰撞.根据NIST,MD5不是安全散列函数.生成冲突只需要2 39次操作,绝不能用于密码.然而,SHA-1很容易受到类似的碰撞攻击,其中可以在2 69次操作中发现碰撞,而蛮力是2 80.没有人生成SHA-1冲突,NIST仍然将SHA-1列为安全消息摘要功能.

那么什么时候使用破坏的哈希函数是安全的呢?即使功能被破坏,它仍然可以"足够大".根据Schneier说法,易受冲突攻击的哈希函数仍然可以用作HMAC.我相信这是因为HMAC的安全性取决于其密钥,并且在获得此密钥之前无法找到冲突.一旦你在HMAC中使用了密钥,它就已经坏了,所以这是一个没有实际意义的问题.哈希函数漏洞会破坏HMAC的安全性?

让我们进一步了解这个属性.如果密码前面加盐,那么使用像MD4这样的非常弱的消息摘要是否可以安全地使用密码?请记住,MD4和MD5攻击是攻击前缀,如果预先添加了盐,则攻击者无法控制消息的前缀.如果盐真的是一个秘密,并且攻击者不知道,那么它是否附加在密码上是否重要?假设攻击者在获得整个消息之前无法生成冲突,这是否安全?

您是否知道在不引入漏洞的情况下可以在安全上下文中使用损坏的哈希函数的其他情况?

(请发布支持证据,因为它很棒!)

security hash cryptography message-digest

19
推荐指数
1
解决办法
2845
查看次数

HMACSHA256和HMACSHA512之间的差异

我们使用以下代码针对C#中的敏感值生成HMac哈希

public string GenerateHMac(string key, string message)
{
    var decodedKey = Convert.FromBase64String(key);

    var hasher = new HMACSHA256(decodedKey);

    var messageBytes = Encoding.Default.GetBytes(message);

    var hash = hasher.ComputeHash(messageBytes);

    return Convert.ToBase64String(hash);
}
Run Code Online (Sandbox Code Playgroud)

传入的密钥是256位base 64编码字符串.提出了一个问题,我们是否应该使用HMACSHA256,HMACSHA384或HMACSHA512来散列该值.

  • 使用HMACSHA512相对于HMACSHA256有什么好处?
  • 它更安全吗?
  • 使用更长的密钥时是否会产生显着的性能影响?

作为旁注; decodedKey如果我使用HMACSHA512,我传递给构造函数的值是否需要是512位密钥?

c# security cryptography hmac

10
推荐指数
2
解决办法
1万
查看次数

标签 统计

cryptography ×2

security ×2

c# ×1

hash ×1

hmac ×1

message-digest ×1