如何计算安全算法的密钥大小?
How to calculate key size of a security algorithm?
有很多安全算法。衡量密码算法安全性的方法之一是找出其密钥大小。单个算法的密钥大小有很多种。
ECC (Elliptic Curve Cryptography) has 163, 256, 384, 512 etc.
RSA has 1024, 3072, 7680, 15360. I found this from here
但是如何计算算法的密钥大小?单个算法如何具有不同的密钥大小?
我正在构建一个简单的加密算法,但我不知道如何计算我的算法的密钥大小。
我的算法是把明文的一个字母改成一个代码假设
a=2H, b=3C, c=8S ......, z=6D
如果明文是“cb”,那么密文就是“8S3C”。那么这个算法的密钥大小是多少?我该如何计算?
正如你所说,键的大小是一方面。您提到的算法(以及许多其他算法)通常在块上运行,或者具有一些内部状态,该状态是密钥大小的函数,并且由于它是输入参数(您指定块的大小或内部状态),因此自然会对其进行解释。
对于您的算法,您可以争辩说密钥大小是存储编码所需的位数(在您的示例中为 27*2)。但是,如果有人想争论安全性,他们很可能会针对您重复编码文本中的序列这一事实。因此,如果我得到足够大的英文编码文本(适用于任何语言,但作为示例),我可以轻松找到字符(查找重复序列),然后使用统计方法找出映射(查找字符频率)。因此,您的密钥长度与最可能的攻击方法无关,因此不会影响它的安全性。也就是说,如果我可以在你使用 1 byte/character 时破解它,那么当你使用 1024 字节/字符时我也可以轻松破解它。
例如,破解 RSA 的最佳方法似乎是尝试所有密钥。因此,通过延长密钥,您会成倍增加尝试所有密钥所需的时间,因此您可以认为它更安全,因为密钥更长。
密钥大小对应于安全强度。安全强度是攻击者需要多少努力才能破解算法,它取决于已知的针对算法的最佳攻击。
例如,典型的安全强度是 128 位。如果你阅读了一些关于椭圆曲线密码学 (ECC) 的知识,你将了解到在一般情况下攻击 ECC 的最佳算法具有平方根 运行 时间。因此,如果我们使用具有 256 位素数阶子群的椭圆曲线,则曲线上的点数为 2^256 阶,这意味着攻击它需要 sqrt(2^256) = 2^128 运行时间。所以 256 位 ECC(子组大小为 256 位,密钥大小为 256 位)为您提供 128 位安全强度。
对于 RSA,数学更难,因为破解它的 运行 时间取决于 number field sieve,它有 运行 时间看起来像 e^[(1.92 + o (1)) (log n)^(1/3) * (log log n)^(2/3)],其中 n 是要因式分解的数,log 是自然对数。因此,要计算对应于 128 位安全性的密钥大小,我们需要求解 2^128 = e^[(1.92 + o(1)) (log n)^(1/3) * (log log n)^( 2/3)]。我想你会喜欢自己解决这个问题:-)
注意:当我在谈论安全强度时,我只是在谈论破解它的计算能力。有些人认为我们应该在计算中也包括内存。
如果想要更透彻详细的讨论,欢迎阅读Selecting Cryptographic Key Sizes。
为了select一个密钥大小,你需要了解破解算法的努力,这意味着你应该是密码学家。很遗憾地告诉您这一点,但是您的算法无法通过较大的密钥大小来保存:替换密码可以通过频率分析轻松破解。
有很多安全算法。衡量密码算法安全性的方法之一是找出其密钥大小。单个算法的密钥大小有很多种。
ECC (Elliptic Curve Cryptography) has 163, 256, 384, 512 etc.
RSA has 1024, 3072, 7680, 15360. I found this from here
但是如何计算算法的密钥大小?单个算法如何具有不同的密钥大小?
我正在构建一个简单的加密算法,但我不知道如何计算我的算法的密钥大小。
我的算法是把明文的一个字母改成一个代码假设
a=2H, b=3C, c=8S ......, z=6D
如果明文是“cb”,那么密文就是“8S3C”。那么这个算法的密钥大小是多少?我该如何计算?
正如你所说,键的大小是一方面。您提到的算法(以及许多其他算法)通常在块上运行,或者具有一些内部状态,该状态是密钥大小的函数,并且由于它是输入参数(您指定块的大小或内部状态),因此自然会对其进行解释。
对于您的算法,您可以争辩说密钥大小是存储编码所需的位数(在您的示例中为 27*2)。但是,如果有人想争论安全性,他们很可能会针对您重复编码文本中的序列这一事实。因此,如果我得到足够大的英文编码文本(适用于任何语言,但作为示例),我可以轻松找到字符(查找重复序列),然后使用统计方法找出映射(查找字符频率)。因此,您的密钥长度与最可能的攻击方法无关,因此不会影响它的安全性。也就是说,如果我可以在你使用 1 byte/character 时破解它,那么当你使用 1024 字节/字符时我也可以轻松破解它。
例如,破解 RSA 的最佳方法似乎是尝试所有密钥。因此,通过延长密钥,您会成倍增加尝试所有密钥所需的时间,因此您可以认为它更安全,因为密钥更长。
密钥大小对应于安全强度。安全强度是攻击者需要多少努力才能破解算法,它取决于已知的针对算法的最佳攻击。
例如,典型的安全强度是 128 位。如果你阅读了一些关于椭圆曲线密码学 (ECC) 的知识,你将了解到在一般情况下攻击 ECC 的最佳算法具有平方根 运行 时间。因此,如果我们使用具有 256 位素数阶子群的椭圆曲线,则曲线上的点数为 2^256 阶,这意味着攻击它需要 sqrt(2^256) = 2^128 运行时间。所以 256 位 ECC(子组大小为 256 位,密钥大小为 256 位)为您提供 128 位安全强度。
对于 RSA,数学更难,因为破解它的 运行 时间取决于 number field sieve,它有 运行 时间看起来像 e^[(1.92 + o (1)) (log n)^(1/3) * (log log n)^(2/3)],其中 n 是要因式分解的数,log 是自然对数。因此,要计算对应于 128 位安全性的密钥大小,我们需要求解 2^128 = e^[(1.92 + o(1)) (log n)^(1/3) * (log log n)^( 2/3)]。我想你会喜欢自己解决这个问题:-)
注意:当我在谈论安全强度时,我只是在谈论破解它的计算能力。有些人认为我们应该在计算中也包括内存。
如果想要更透彻详细的讨论,欢迎阅读Selecting Cryptographic Key Sizes。
为了select一个密钥大小,你需要了解破解算法的努力,这意味着你应该是密码学家。很遗憾地告诉您这一点,但是您的算法无法通过较大的密钥大小来保存:替换密码可以通过频率分析轻松破解。