我正在使用Delphi2007中的DCPcrypt库来加密内部应用程序的文本。
我目前正在使用以下代码(不是我的实际键):
Cipher := TDCP_rijndael.Create(nil);
try
Cipher.InitStr('5t@ck0v3rf10w', TDCP_md5);
Result := Cipher.EncryptString('Test string');
finally
Cipher.Burn;
Cipher.Free;
end;InitStr的评论是:
根据键字符串的散列执行密钥设置。
将MD5算法交换为SHA2-256或SHA2-512会对加密的强度产生任何理论上或实际上的影响吗?
发布于 2012-12-10 06:56:14
对你的问题的直接回答是“否”--它不会对密码的强度产生任何明显的影响。是的,MD5坏了,但实际上它的弱点在这个特定的应用程序中没有任何区别。AES的密钥大小为128、192和256位。您在这里所做的就是为一个键创建一个字符串化名( 16字节、24字节或32字节)。当密码专家说哈希函数是坏的时,他们的意思是,给定已知的哈希输出,计算不同于原始消息的消息是可行的,而原始消息也会散列到相同的输出。换句话说,为了使哈希函数的密码优势或弱点具有任何意义,二进制密钥必须已为恶意方所知,这意味着只有当您的安全性已经完全失败时,它才是相关的。
哈希算法的强度与非对称密码的强度完全无关。
然而..。
然而,更严重的问题是代码中缺少盐渍。除非您计划手动存储您的消息(不太可能),否则您的通信很容易受到重放攻击。如果你使用欧洲央行模式,这将是非常糟糕的,但不加腌制,这对任何模式都是一个重大的安全问题。“盐析”是指在加密之前,在IV或消息的开头注入足够大的、不可预测的、不可重复的值。
这突出了DCPCrypt的一个巨大问题。DCPcrypt的大多数用户对密码学的了解还不足以理解正确的盐碱化的重要性,因此将以正确的方式使用密码组件。当您以这种方式使用DCPcrypt (这是非常自然的)时,DCPcrypt做的是而不是盐分。事实上,它将IV设置为零。更糟的是..。如果您选择了密钥流类型的链接模式(这是非常流行的),并且您的IV通常为零,那么如果知道或猜测一条明文消息(或消息的一部分甚至是猜测的),您的安全性将完全被完全破坏。DCPcrypt确实提供了另一种方法来初始化二进制密钥(而不是从字符串),同时允许用户设置IV (您必须自己生成一个随机IV )。下一个问题是整个IV管理变得有点复杂。
披露
我是TurboPower LockBox 3的作者。戴夫巴顿的DCPcrypt,一个令人钦佩和全面的工程工作,是我写LockBox 3的灵感之一。
发布于 2012-12-10 02:26:57
您应该指定加密的攻击类型;假设使用了已知-明文攻击,而入侵者使用预先计算的哈希值查找密钥字符串--那么所使用的哈希算法之间应该没有区别,任何哈希算法都需要几乎相同的时间来查找密钥字符串。
https://stackoverflow.com/questions/13792380
复制相似问题