delphi - 使用的 DCPcrypt 加密和哈希算法

标签 delphi encryption hash cryptography

我正在使用 Delphi 2007 中的 DCPcrypt 库来加密内部应用程序的文本。

我当前正在使用以下代码(不是我的实际 key ):

  Cipher := TDCP_rijndael.Create(nil);
  try
    Cipher.InitStr('5t@ck0v3rf10w', TDCP_md5);
    Result := Cipher.EncryptString('Test string');
  finally
    Cipher.Burn;
    Cipher.Free;
  end;

InitStr 的注释是:

Do key setup based on a hash of the key string

将 MD5 算法替换为 SHA2-256 或 SHA2-512 会对加密强度产生理论上或实际的影响吗?

最佳答案

您的问题的直接答案是“否” - 它不会对加密强度产生任何明显的影响。是的,MD5 被破坏了,但实际上它的弱点在这个特定的应用程序中没有任何区别。 AES 的 key 大小为 128、192 和 256 位。您在这里所做的就是为键创建一个字符串假名(16 字节、24 字节或 32 字节)。当密码学专家说哈希函数是 broken ,他们的意思是,给定一个已知的哈希输出,计算与原始消息不同的消息是可行的,该消息也哈希到相同的输出。换句话说,为了使散列函数的加密强度或弱点具有任何意义,二进制 key 必须已经为恶意方所知,这意味着它仅在您的安全性已被完全破坏时才相关。

哈希算法的强度与非对称密码的强度完全无关。

但是...

但是,更严重的问题是代码中缺乏加盐。除非您计划手动对消息加盐(不太可能),否则您的通信非常容易受到重放攻击。如果您使用 ECB 模式,情况会更糟,但如果不加盐,这对于任何模式来说都是一个主要的安全问题。 “加盐”是指在加密之前在 IV 中或消息的头部注入(inject)足够大的不可预测的非重复值。

这凸显了 DCPCrypt 的一个大问题。 DCPcrypt 的大多数用户对加密技术的了解不够,无法理解适当加盐的重要性,并且会按照您所拥有的方式使用加密组件。当您以这种方式使用 DCPcrypt 时(这是非常自然的),DCPcrypt 加盐。事实上,它将 IV 设置为零。情况会变得更糟......如果您选择了 key 流类型的链接模式(这是非常流行的),并且您的 IV 通常为零,那么如果已知或猜测单个明文消息,您的安全性将完全被破坏,(或者甚至只是猜测消息的一个片段)。 DCPcrypt 确实提供了另一种方法来初始化二进制 key (不是从字符串),同时允许用户设置 IV(您必须自己生成随机 IV)。下一个问题是整个 IV 管理变得有点复杂。

披露

我是 TurboPower LockBox 3 的作者。 Dave Barton 的 DCPcrypt 是一部令人钦佩且全面的工程作品,它是我编写 LockBox 3 的灵感之一。

关于delphi - 使用的 DCPcrypt 加密和哈希算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792380/

相关文章:

security - 安全 token URL - 它有多安全?代理身份验证作为替代方案?

delphi - 在word文档中插入rtf文本

delphi - 我如何让 Delphi 知道我已经处理了异常?

delphi - TTreeView : AlphaSort scrolls to selected node (like MakeVisible)

德尔福XE2 64位: inline asm in GraphicEx

android - 为每个应用程序安装生成唯一的加密 key 或盐

python - 在运行时保护 Python 程序中的数据

javascript - 如何使用 "java script"进行加密并使用 "java"进行解密

ruby - 使用 Hash#dig 或 Lonely operator(&.) 安全地为嵌套哈希赋值

php - 在 Auth 组件 Cakephp 中关闭密码哈希