4

我正在设计一种加密算法。该算法是对称的(单密钥)。

你如何衡量算法的强度?密钥长度是算法的强度吗?

编辑:

第 1 课:不要设计加密算法,AES 和其他算法由学术界设计和标准化是有原因的

第 2 课:加密算法的强度不是用比特来衡量的,而是用密钥大小来衡量的。算法的强度由其设计决定。一般来说,使用较大密钥大小的算法更难暴力破解,因此更强大。

4

6 回答 6

16

首先,这是严重的事情吗?如果是,请立即停止。不要这样做。设计算法是世界上最难的事情之一。除非你有多年破解密码的经验,否则你不会设计任何远程安全的东西。

AES 和 RSA 服务于两个非常不同的目的。不同之处不仅仅是签名。RSA 是一种公钥算法。我们将其用于加密、密钥交换、数字签名。AES 是一种对称分组密码。我们将其用于批量加密。RSA 非常慢。AES 非常快。大多数现代密码系统使用混合方法,使用 RSA 进行密钥交换,然后使用 AES 进行批量加密。

通常,当我们说“128 位强度”时,我们指的是密钥的大小。但是,这具有难以置信的欺骗性,因为算法的强度远不止其密钥的大小。换句话说,仅仅因为您拥有一百万位密钥,就没有任何意义。

算法的强度是根据它的密钥大小以及它对密码分析攻击的抵抗力来定义的。如果存在比蛮力更好的攻击,我们说算法被破坏。

因此,使用 AES 和 128 位密钥,如果没有小于 2^128 的攻击,则 AES 被认为是“安全的”。如果有,我们认为它“坏了”(在学术意义上)。其中一些攻击(供您搜索)包括差分密码分析、线性密码分析和相关的密钥攻击。

我们如何暴力破解算法也取决于它的类型。像 AES 这样的对称分组密码是通过尝试所有可能的密钥来强制执行的。但是对于 RSA,密钥的大小是模数的大小。我们不会通过尝试所有可能的密钥来打破这一点,而是通过分解。因此,RSA 的强度取决于数论的当前状态。因此,密钥的大小并不总是告诉您它的实际强度。RSA-128 非常不安全。通常 RSA 密钥大小为 1024 位以上。

具有 56 位密钥的 DES 比几乎所有设计的业余密码都要强大。

如果你对设计算法感兴趣,你应该从打破其他人开始。Bruce Schenier 有一个密码分析自学课程,可以帮助您入门:http ://www.schneier.com/paper-self-study.html

FEAL 是有史以来最破烂的密码之一。它为学习分组密码密码分析提供了一个很好的起点。源代码可用,上面发表的论文数不胜数,遇到卡顿可以随时“查找答案”。

于 2011-03-18T06:23:19.503 回答
5

您可以比较相同算法的密钥长度。在算法之间没有太大意义。

如果该算法有任何好处(而且对于本土的东西来说很难证明这一点),那么它会通过更长的密钥大小变得更安全。添加一位应该(再次,如果算法很好)将暴力破解所需的努力加倍(因为现在可能的密钥数量是原来的两倍)。

不过,更重要的一点是,这只适用于“好”算法。如果您的算法被破坏(即,由于其中的一些设计缺陷,它可以在不尝试所有密钥的情况下解密),那么延长密钥可能无济于事。

如果您告诉我您已经发明了一种具有 1024 位密钥的算法,我无法判断它是否比已发布的 256 位算法更好或更差(我会在安全方面犯错并假设更糟)。

如果你的比赛中有两种算法,告诉裁判密钥大小并不能帮助他们决定哪个更好。

于 2011-03-18T06:00:46.943 回答
2

哦,伙计,这是一个非常困难的问题。一个是肯定的 - 密钥长度与加密算法强度无关。

我只能想到两种衡量加密算法强度的方法:

  • 向专业密码分析员展示您的算法。算法强度将与密码分析员破解您的加密所花费的时间成正比。
  • 强大的加密算法使加密数据看起来非常随机。所以 -测量加密数据的随机性。算法强度应与加密数据的随机性程度成正比。
    Warning - this criteria is just for playing arround, doesn't shows real encryption scheme strength !

所以真正的措施是第一,但第二你可以玩得很开心。

于 2011-03-18T09:23:54.100 回答
1

假设该算法是合理的并且它使用了整个关键范围......

将每个关键字节的唯一字节值的数量提高到字节数的幂。

因此,如果您仅使用 ASCII 字符 AZ、az、0-9,则有 62 个唯一值 - 使用这些值的 10 字节密钥是 62^10。如果您使用所有 256 个值,0x00 - 0xFF,则 10 字节密钥为 256^10(或 10 * 8 位/字节 = 2 ^ 80)。

于 2011-03-18T06:04:29.527 回答
1

“安全位”由 NIST(美国国家标准与技术研究院)在:NIST SP 800-57 第 1 部分,第 5.6.1 节“可比较算法优势”中定义。

NIST 对 SP 800-57 第 1 部分的各种修订:http: //csrc.nist.gov/publications/PubsSPs.html#800-57-part1

当前版本: http ://csrc.nist.gov/publications/nistpubs/800-57/sp800-57_part1_rev3_general.pdf

“强度”被定义为“打破算法所需的工作量”,5.6.1 继续详细描述了该标准。表 2 在同一部分中列出了通过各种算法(包括 AES、RSA 和 ECC)的不同密钥大小实现的“安全位”。

严格确定新算法的相对强度将需要认真的工作。

于 2013-09-05T18:57:47.210 回答
0

我快速而肮脏的定义是“AES 需要具有相同平均破解时间的位数”。您可以使用任何您喜欢的时间度量,例如操作、挂壁时间等。如果您的破解时间与理论上的 40 位 AES 消息一样长(比 128 位 AES 少 2^88 时间),那么无论您是否使用 64,000 位密钥,它都是 40 位强的。

这是诚实的,当然,在加密世界中很难找到诚实的东西。为了搞笑,请将其与普通的 RSA 密钥进行比较。

显然,它绝不是一成不变的,每次有人找到更好的裂缝时它都会下降,但这是任意“以位为单位的强度”度量的本质。运营实力是一个更具体的衡量标准。

于 2011-03-19T02:57:10.450 回答