【问题标题】:which of these modes : cbc,cfb,ctr,ecb,ncfb,nofb,ofb,stream are secure and which are absolute no-no以下哪些模式:cbc、cfb、ctr、ecb、ncfb、nofb、ofb、stream 是安全的,哪些是绝对禁止的
【发布时间】:2011-06-02 05:24:47
【问题描述】:

通过安全性,我的意思是编码字符串与随机噪声无法区分,并且在同一文本的每次加密中都不同,因此无法猜测所使用的加密算法或对编码文本进行任何字典攻击。

第二:输出字符串长度与输入字符串长度不一一对应,因此无法猜测。

第三:可以验证提供的密码是否不正确,因此解码函数可以返回 false 而不是假定解码的随机字符串。

--- 编辑:这是给定算法和模式对的编码速度:

0.554 : cast-128 : ctr : 8
0.556 : gost : ncfb : 8
0.5562 : cast-128 : ecb : 8
0.5566 : cast-128 : ncfb : 8
0.5579 : gost : cbc : 8
0.5596 : gost : cfb : 8
0.5596 : gost : ofb : 8
0.5601 : gost : ctr : 8
0.5613 : cast-256 : cfb : 16
0.5621 : twofish : cbc : 16
0.5622 : rijndael-128 : ctr : 16
0.5632 : twofish : cfb : 16
0.5646 : rijndael-128 : cfb : 16
0.5656 : rijndael-128 : ofb : 16
0.5657 : rijndael-128 : ncfb : 16
0.5658 : loki97 : cbc : 16
0.5663 : gost : ecb : 8
0.5667 : cast-128 : cfb : 8
0.5674 : cast-128 : ofb : 8
0.5675 : rijndael-128 : ecb : 16
0.5684 : loki97 : ctr : 16
0.5684 : rijndael-128 : nofb : 16
0.5686 : loki97 : ecb : 16
0.5688 : loki97 : cfb : 16
0.5692 : gost : nofb : 8
0.57 : saferplus : ecb : 16
0.5701 : cast-256 : nofb : 16
0.5704 : loki97 : ncfb : 16
0.571 : twofish : ncfb : 16
0.5719 : cast-256 : ecb : 16
0.5728 : cast-256 : cbc : 16
0.573 : twofish : ofb : 16
0.5731 : cast-256 : ofb : 16
0.5737 : loki97 : nofb : 16
0.5741 : saferplus : ctr : 16
0.5748 : twofish : ecb : 16
0.575 : rijndael-192 : cfb : 24
0.5759 : cast-256 : ctr : 16
0.5769 : cast-128 : nofb : 8
0.5776 : saferplus : ofb : 16
0.5778 : saferplus : ncfb : 16
0.5778 : twofish : nofb : 16
0.5783 : rijndael-128 : cbc : 16
0.5795 : rijndael-192 : ecb : 24
0.5801 : rijndael-192 : cbc : 24
0.5808 : rijndael-192 : nofb : 24
0.5809 : saferplus : cbc : 16
0.581 : saferplus : nofb : 16
0.5829 : rijndael-192 : ctr : 24
0.5837 : serpent : ctr : 16
0.5845 : cast-256 : ncfb : 16
0.5856 : xtea : ecb : 8
0.5857 : serpent : cbc : 16
0.5859 : xtea : ctr : 8
0.5863 : saferplus : cfb : 16
0.5877 : twofish : ctr : 16
0.5881 : xtea : nofb : 8
0.5887 : xtea : ofb : 8
0.5891 : cast-128 : cbc : 8
0.5892 : xtea : ncfb : 8
0.5895 : rijndael-192 : ncfb : 24
0.5913 : serpent : cfb : 16
0.5918 : serpent : ofb : 16
0.5934 : rijndael-256 : ecb : 32
0.5935 : rijndael-256 : cbc : 32
0.5936 : serpent : nofb : 16
0.5943 : loki97 : ofb : 16
0.595 : rijndael-192 : ofb : 24
0.5958 : rijndael-256 : ctr : 32
0.596 : blowfish-compat : cbc : 8
0.5962 : serpent : ecb : 16
0.5972 : rijndael-256 : cfb : 32
0.5976 : rijndael-256 : ncfb : 32
0.5977 : xtea : cbc : 8
0.5982 : rc2 : ctr : 8
0.5989 : blowfish-compat : cfb : 8
0.599 : rc2 : cfb : 8
0.6 : des : cfb : 8
0.6002 : rc2 : nofb : 8
0.6009 : blowfish-compat : ctr : 8
0.6013 : rc2 : cbc : 8
0.6021 : rc2 : ncfb : 8
0.604 : rijndael-256 : nofb : 32
0.6043 : blowfish-compat : ncfb : 8
0.6043 : des : nofb : 8
0.6055 : des : ecb : 8
0.607 : blowfish : cbc : 8
0.6078 : rc2 : ecb : 8
0.6081 : blowfish-compat : nofb : 8
0.6081 : des : cbc : 8
0.6093 : blowfish : ecb : 8
0.6098 : des : ofb : 8
0.6105 : blowfish : cfb : 8
0.6113 : blowfish-compat : ofb : 8
0.6137 : rc2 : ofb : 8
0.6139 : xtea : cfb : 8
0.6141 : serpent : ncfb : 16
0.6144 : des : ctr : 8
0.6174 : blowfish : ofb : 8
0.6184 : blowfish : ncfb : 8
0.6218 : des : ncfb : 8
0.6228 : blowfish-compat : ecb : 8
0.6228 : rijndael-256 : ofb : 32
0.6253 : blowfish : nofb : 8
0.628 : blowfish : ctr : 8
0.6343 : tripledes : ctr : 8
0.6356 : tripledes : cfb : 8
0.6365 : tripledes : cbc : 8
0.6367 : tripledes : ncfb : 8
0.6368 : tripledes : ecb : 8
0.647 : tripledes : ofb : 8
0.6582 : tripledes : nofb : 8

从上到下哪个最安全?

【问题讨论】:

标签: php cryptography mcrypt


【解决方案1】:

看看这里:http://en.wikipedia.org/wiki/Block_cipher_modes_of_operatio 了解一些背景信息。

这一切都取决于。有些有众所周知的缺点,您必须真正查看组合密码/连接以及如何使用它的细节。

对于“临时使用”,您可以争辩说分组密码模式不是密码系统中最敏感的部分。

有些只有在你想将分组密码转换为流密码时才有用,例如:

  • 点击率
  • CFB
  • OFB

因此,除非您需要这样做,否则这些对您没有用处。

ECB 是最简单的一种,主要缺点是相同的明文块将导致相同的密文。现在几乎没有理由使用它。

解决你的观点:

  1. 实际上并不依赖于分组密码模式。您可能想使用salt 或将密码加密 N 次以避免预先计算的表攻击。

  2. 这不会发生。输入在加密之前被填充

  3. 不确定你的意思...

编辑:我同意尤金的观点,如果不需要就不要重新发明轮子!

【讨论】:

  • 如何在 PHP 中使用 PGP?那是两种不同的东西。在 php 中,我必须为此使用 mcrypt,查看标签。
  • @user393087 在您的情况下,什么是“必须”?这是给您的要求还是您决定“必须”使用 mcrypt? mcrypt 是一个库,OpenPGP 是一种技术,使用多个库实现(但这应该是另一个问题)。这里描述了一个选项:devzone.zend.com/article/1265
【解决方案2】:

第二:这毫无意义。您意识到加密 4 字节的结果与加密 4 兆字节的结果不同,不是吗?通常使用填充来掩盖真实长度(在加密密码等时) - 要加密的数据附加一定数量的字节,然后对整个内容进行加密。但话又说回来,加密 4 字节长的密码和 48 字节长的密码短语是有区别的(除非你使用填充到 64 字节,但你明白了)。

第三:哈希用于此。 IE。您在加密数据中包含原始数据(或一些附加数据)的哈希值。解密后,重新计算哈希值并与存储的哈希值进行比较。请注意,比较时可能会发生定时攻击,因此必须正确执行比较。

一般来说 - 您正在尝试重新发明轮子。如果您只需要使用安全密钥(甚至密码)加密数据,请使用 OpenPGP。它解决了您提出的所有问题,并且在重新发明强加密时会提出。 OpenPGP 允许您使用普通密码短语进行加密。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2011-08-28
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多