当一个密钥以比特为单位具有特定长度时,这意味着什么



我正在学习一些与密码学相关的基本编程,现在我正在学习艰难的hellman-merkle密钥交换。我在看电脑爱好者的一段视频,他们在视频中解释了它的数学原理

在视频中,他们说你应该使用长度为2000或4000位的n。我已经看到这个密钥长度在其他一些地方被作为比特来讨论,比如AES。但我不明白";以位为单位的长度";方法拥有一个2000位长的密钥意味着什么,所以如果我需要编写一个程序来创建或使用一定长度的密钥,我需要做什么?

如果您需要编写一个创建特定长度键的程序,请将所需的键长度传递给该程序。您需要知道长度是用哪个单位表示的(例如,有些接口可能需要字节而不是位),但通常不需要知道密钥长度在后台意味着什么。

密钥长度的具体含义取决于加密方案,对于某些方案,"密钥长度"可能存在歧义。它通常是三件事之一:

  • 与算法相关联的字符串的长度,例如键
  • 一个数n,使得算法的整数参数在2^(n-1)和(2^n)-1之间选取
  • 一个数n,使得算法的整数参数在1(或其他小范围)和(2^n)-1之间选取

最后两种情况都称为"n位数字"。在密码学中,"n比特数"有时意味着可以用2进制的n位数字书写的数字,有时也意味着需要2进制的正好n位数字的数字。换言之,"n比特数"有时意味着比特大小正好为n的数字,有时意味着最大为n的数量。你必须在每个密码方案的描述中检查确切的要求。

根据加密方案的不同,通常会选择不同的数字作为"密钥长度"。对于任何特定的方案,较大的密钥长度都很难打破,但无法比较不同方案之间的密钥长度。

对于大多数对称方案,密钥是随机生成的字符串(字符串的每个比特都有独立的½次机会为0或1),长度是字符串的比特数。例如,AES-128是使用128位(16字节)密钥的AES。只有一个例外值得一提:DES密钥表示为64位字符串,但其中只有56位是随机的(其他8位是根据随机数56计算得出的),因此DES有时被认为具有"56位"密钥长度,有时则具有"64位"密钥长度。

对于Diffie-Hellman,密钥长度n是组的确切大小(通常写为p)。私钥和公钥都是介于1和p之间的数字,所以它们最多是n位数字。就非对称密码学的密钥长度而言,这是非常简单的。

对于RSA,密钥长度n是模数的确切大小,模数是公钥的一部分(公钥是一对数字:模数和公共指数)。例如,4096位RSA表示模数介于2^4095和2^4096-1之间。私钥也是一个n位的数字,但在大多数意义上是这样。

对于DSA,有两个数字可以称为密钥长度,因为私钥和公钥的选择间隔大小不同。公共密钥长度是较大素数p的大小;公钥是一个介于2和p-2之间的数字。私有密钥长度是较小素数q的大小;私钥是一个介于1和q-1之间的数字。

对于椭圆曲线密码学,算法的域参数被称为曲线:一组点,以及这组点的参数化。私钥是指定曲线上一点的参数值,公钥是一对整数,它们是曲线上一个点的坐标。一般来说,由于私钥和公钥位于不同的数学空间中,因此有两个数字可以称为"密钥大小"。私钥是一个介于1和n-1之间的数字,对于一些m-比特数n,公钥是一个具有两个坐标的点,对于一些,每个坐标都在0和q之间ℓ-位数q。通常,m不必是平等的。但是,nq通常是接近的(如果不是,对于给定的安全级别来说,这是对性能的浪费),因此m通常是相等的,可以称为"密钥长度",没有歧义。

每个位都可以是1或0。它是数字世界中的基本单元。正如你可能知道的,所有的数字最终要么是1,要么是0。每个1和0都是一位。

长度为n bits的东西意味着它有n的1和0。

最新更新