RSA中国大会胡磊:以代码为基础的公开密钥密码系统的代数

安全
其实,基于纠错码的公钥密码和公钥密码都是同时问世的,是在30年前问世的。McEliece提出用纠错码来做公钥密码的加密。它的困难是,假设你去解一个随机的线性码是困难的。

【51CTO.com 综合报道】2010年10月21日-22日,为期两天的RSA 2010大会在京召开,其中很多经典的演讲都值得我们进行深入思考。那么接下来,我们就一起回顾一下中国科学院研究生院信息安全国家重点实验室教授,胡磊,所带来的关于《以代码为基础的公开密钥密码系统的代数》的精彩演讲。更多内容请参阅RSA 2010信息安全国际论坛专题报道

胡磊:我是第一次参加RSA的会议。我刚才听了第一个报告主要是关于密码的应用。但我想RSA这个会总应该有一些是关于学术方面的报告,所以我的报告主要是密码的理论方面的。是基于纠错码的公钥的代数密码分析。

这是和我的两个学生合作的。我首先介绍一下什么是基于纠错码的公钥密码在现代密码学中是一个重要的题目。然后再简要地解释一下什么是代数密码分析。作为例子,我们给出对一个纠错码的公钥密码的分析和实际攻击。

其实,基于纠错码的公钥密码和公钥密码都是同时问世的,是在30年前问世的。McEliece提出用纠错码来做公钥密码的加密。它的困难是,假设你去解一个随机的线性码是困难的。这个工作在80年代和90年代前半期有很多这方面的工作。但是后来慢慢就沉寂了,因为现实的密码应用用的不是这个活动,而是RSA团曲线。这些系统在90年代中后期以后,应用的困难问题都解决。所以得到了广泛的应用。这些密码其他的非RSA、非ECC的密码研究就比较少了。最近这十年由于量子计算的进展,发现有必要再来继续研究基于纠错码的这些一些密码。这里面有两个因素,一个因素是因自分解算法。这个算法后来由别人来推广到解离散问题上,这是量子计算方面的结果。

那么量子计算需要在量子计算机上来实施。那么量子计算机是不是真的能够制造出来?这个问题最近5、6年有很多进展,但这个进展都是来自于物理学家,数学家是很难听懂量子计算实际的进展。但有一部分专家认为量子计算机在若干年以后有可能被制造出来,如果这样的话现有的RSA和椭圆曲线这样的公钥密码将不再安全。

为了应对这样的一个局面,实际上很多人就探讨能够在量子计算下安全的一些公钥密码。实际上在现有的密码学和复杂度理论中找这样的一些问题和方案,有一些方案在公钥密码问世的时候就已经被提出过了,但是在当时没有得到充分的研究。比如说基于杂错数(音)的公钥密码这只是做数字签名,不能做加密的。这个系统德国的当师特(音)已经实施了。今天我们要讲的基于纠错码的公钥密码,还有基于格(音),这在复杂度理论里是非常重要的问题,而且也是研究最多的问题之一。还有一个是多变量密码,明天有一个报告是讲多变量密码的。目前找到有这样四类这样的公钥密码,现在有一群人把它称之为后量子密码,或者称之为量子免疫公钥密码。

那么什么是一个基于纠错码的公钥密码,实际上它的思维很简单就是一个可以码的公钥密码通过线性样把它伪装成一个随机的线性码,而随机的线性码是没有有效的算法的。具体的方案就是McEliece提出的。这个G'代表了可解的码。然后选两个矩阵一个叫P、一个叫S,将它们伪装,这个就是线性变化的乘法,一个从里面乘、一个从外面乘,乘出来的矩阵集就是作为公钥的深层矩阵(音)。加密就是将M编码成密文,按照公开的码来编码。因为加密的时候知道的只是公开的信息G。那么解码的时候,解码的人是知道P和S这两个矩阵,他先将C去乘上P,就等于括号里面的。这个就是一个错误项。原来是的编码是加上一个噪声一,下来就把它去掉,就可以得到M、S,这就是解码,按照G'来解码。知道了M乘上S就可以恢复出M,这就是最原始的McEliece方案。

这里面还有一个校验矩阵同样可做。对基于纠错码的密码,攻击可以大致上分成两类。第一类是结构化的攻击,给定一个公开的码,这是公钥信息,把私钥的码恢复出来。我们今天讲的就是这样一种攻击,就是要利用伪装的结构。另外一种攻击就是非结构化的攻击,我们用信息论的解码方法,来直接去攻破公开的码。就是你的加密是一个加噪的编码的方式,那我现在就直接对这个码进行解码。这个问题可以等价于另外一个码里面找小重量的码。我就不赘述了。恢复信源信息就等于另外一个码里找一个小重量的。在实际的基于纠错码的公钥密码的构造中,这两个问题经常会被用到。有的是用信源恢复的译码,有的是找小重量的译码。

基于纠错码的公钥密码进来被用到其他的密码构造里,比如说one  time  signature,用到证明,把以前用RSA用离散对素(音)来构造的所有的密码的方案,现在换成用编码来构造。那么它的安全基础就是译码的困难性。而且,现在有一些方案已经被处理,引入了一些可证明安全的方法和工具。就是把可证明安全这套理论也用在这些方案的设计和分析上。虽然McEliece用到这个困难问题,而且解一般的线性码是一个NP困难问题,这个是可以严格证明的。但对一些具体的参数,这个问题究竟有多困难,有没有一些具体的复杂度?这个工作在80年代以后一直有人在做。在编码理论里讨论的都是一些参数比较小的码的具体的解码方法和工程应用。在密码里面,它处理的是很大的一些参数的译码。现在比如说为了达到一个安全目标,为了达到2的80次方、100次方,你应该选择多大规模的参数,码长是多少?这就需要对解码找到最后的方法,然后按照最好的方法来度量困难程度。这里面有很多工作要做。比如说最近的一个工作就是在后量子密码学年会上,有人给出了提升的方法,这个方法实际上比较早是在80年代末和90年代中期就已经出现了。他的方法实际上就是例如了哈奇碰撞(音)的思想。

在基于纠错码的密码系统中,一般用的码是Goppa码这个码是可以有效解码的。而且对他们的要求是有40多年的历史了,研究得比较充分。而且这一类码是比较大的一类码,包含着很多常见的码。所以在基于码的密码系统的设计中,通常选择Goppa码作为秘密的私钥的纠错码。

但是,有一个问题,这个问题是跟应用相关的。这样的一些系统他的缺陷就是说他的密钥规模比较大。通常里面用到的参数、码长都是几百,编码理论的话,码长可能是10几、20,这里面的参数这么大。私钥是要除乘两个矩阵。但一个可逆矩阵是有方块的,所以你可以想象密钥的规模可能就是一个兆,非常大。进来有一些工作是为了约减密钥的规模,用了一些Goppa码。我们的方法是代数攻击,这个代数攻击实际上思想最原始的是香农(音)1949年的论文就有了。他说,你要设计一个密码就要使得密码的破解相当于解一个很复杂的方程,这个方程可能包括明文的信息,可能包括密文的信息。但这个方法实际上并没有在密码学中得到研究。直到90年代中期研究多变量密码的时候才被重新发现。明天可能会讲到多变量密码里有两个日本人提出的方案,那个体制就是用代数攻击来攻破的。它其实很简单,就是用到了关于明文分降和密文分降的方程组,你去设法解方程组就可以把信息解出来。代数攻击是一种思想,就是首先建立关于明文Bit(音)或者是包含密钥的bit的代数方程组,然后去解它。如果多数方程组是线性的,那就很容易解了。但这个中间如果变量构素特别多的话,那实际中能不能解还是有一个界定。但如果是非线性的话一般来说就很难解了。这是代数攻击的思想,这个思想后来被用到了序列密码,基于前馈电路(音),也就是说序列密码设计是两部分,一个是线性驱动部分,另外一部分是讲线性变成非线性的。对这样序列密码代数攻击也可以使用。对于分组密码代数攻击只是用到了一些很简单的密码上,比如说K-Lock这个是汽车锁加密的分子密码算法。那个算法的明文分组和密钥都比较短,所以也可以用代数攻击来分析它。

实际上代数攻击最成功的领域是关于多变量密码的分析。近来基于纠错码的公钥密码现在也能够应用它。下面我破解这个码是去年发表的,在加拿大和非洲密码会发表的。这些设计的人应该都是纠错码的专家,也是密码的专家。这个细节我这儿应该快一点过,它用到两个域,一个是8比特或者是10比特的,还用到二次破域。然后它用的码的话我刚才说了是一个特殊的码,是广义的read  serm码的子域、子码。这里面出现一个数,它就是用这样一些元素来表示的,这些元素在二次扩域里面。这些元素还进一步地将它更短的元素来表示,就是C0、C1-1。这中间涉及到一个秘密值一个元素beta。#p#

这是它的具体提出的七组建议参数。你就可以看到维数(音)是L×B,这个就差不多是500了。比如说第一行的51×9差不多是500。这个码差不多是长500维。这里面的2T就是维数,这是200维的。设计者假设的安全参数是2的80次方等等。这个工作发表了以后,去年9月份有一个工作对其中的三组场所进行了分析可以破解。余下的还有四种参数是不能破解的。按照它的方法来估计负责度是2的74次方,这不是实际可破的,但是理论可破的,已经把假设复杂度降低了。

公钥是将私钥矩阵伪装,乘上随机选择的矩阵。对分析者来说,知道的就是公钥矩阵。后面还有一个工作,就是今年的欧密会,一组法国的专家他们用高次方程来破解这个方案。我们是用二次方程来破解这个系统,而且这个工作是去年我们在广州密码会期间做的,我们当时在一个学生的手提电脑上做,大致上要几分钟可以恢复出一个密钥。后来我们在台式电脑上做时间更短,可以在1分钟之内实现。

这个分析出发点是要利用私钥矩阵的特殊结构,这里面它的矩阵元素是在一个小域上,但最后用的话我们都是在大域上来做的。因为大域里的表达式是很简单的,是一个单项式。具体是用的什么结构呢?我们用的是张量级(音)结构。这个张量级是说比如说两个矩阵一个叫A、一个叫B,把A的每一个元素变成跟B很像的一个矩阵,所以这个矩阵的维数可以扩大。那么现在我们的分析是倒过来,我们发现它的矩阵的每一行虽然维数很大,但我们可以把它写成两个矩阵的张量级就可以把维数缩小,这是它的系统设计的弱点。具体的就是这样的,第二行可以写成这样两个项量。上面那行的项量只是与A、M相关,下面的项量跟秘密的值没有关系了。只是与S有关,这是一个很小的数。我们后面还有一个方法,就是S可以很简单地找出来。

攻击就是从中间选出四行四个特殊的行,其中两行是相连的,就是标号2d和2d+1。这个张量分解第二个是一样的。下面这个和这两个之间有一个距离,这个距离是2a2,这样的四行第二个项量是一样的。第一个项量可以把它看成一个四行矩阵,这个矩阵很特殊。我们就可以在上面建立方程系统。四次矩阵有这样一个结构,但你知道的只是公钥矩阵,我们要从私钥矩阵转到公钥矩阵。实际上我们看,我们把这两个矩阵分别乘上,γ',γS很特殊,你跟H做乘法的时候,只需要考虑这四个行,不需要考虑别的行。这四行就可以有这样一个等式,就是γ乘上P,这个特殊矩阵又可以写成张量级。也就是说,这样的γ是特殊的。这样的项是特殊的。它使得和公钥矩阵相乘以后有特殊的结构,我们就可以把γ找出来。而且我们还可以说,如果γ具有刚才所说的张量结构的话,γS相乘的话也只有四个量。你怎么去找这个γ?就是编码云的问题了,我们有一个线性子空间就是EU。这种γ可以把它找出来。用编码的语言说的话很简单。我们就不说了。

如果找出来的话,这样的γ可以严格地证明本质上只有四个,γ1、γ2、γ3、γ4。找出以后对每一个γi和p相乘就可以写成右边一个张量结构。就是UIB×C。这时候就可以把UI分解出来。所以我们就可以把UIB给分解出来。UIB分解出来可以写成矩阵A。但这里面γ对应的UI是哪一个我们并不清楚。但我们知道,这个B是一个特殊形式的矩阵,A=MB,A是一个可逆的矩阵,这个不提供任何信息。但B的话提供信息。这个B是包含着所有的密码信息在里面的。我们现在就把M乘到左边去。刚才我们的中间有一个参数B,这个B是可变的,通过不同的B可以得到不同的方程。当然MB是不一样的,但总是存在的。

现在我们从大域过渡到小域,利用元素的表达式,对右边的矩阵第一行、第二行做一个变化,同时对左边的M的逆做变化。对右面矩阵第三行、第四行,和左边的矩阵的M逆做变化,我们就可以得到这么一个方程组。这个方程组右边就是单项式的。这里面的Ai、Yi就是秘密的信息。这个D是你选定的。这些Z、W也是未知的。我们现在建立方程组是关于Z的变量或者是关于W变量的方程组。我们把它解出来,解出来以后就可以把Ai、Yi恢复出来,这就是秘密信息。那么怎么去建立这个方程组?这个很简单,就是说单项式我们知道比如说Ai、Yi的一次方。如果d取1、取0这个式子显然是成立的。这是一个二次方程。现在我们这些Ai、Yi的矩阵元素都可以用左边的Z和W这些变量来线性表示,因为我们这个A已经算出来的。总是从公钥矩阵可以算出来。现在Ai、Yi的方幂可以从线性表示,所以我们可以左边的方程组。这个方程组是关于Z的变量的二次方程组。我们选不同的E就可以得到不同的方程。而且这里面还有一个变,所以我们可以得到很多的方程组。这是一个二次方程组,如果说个数比较少的话,我们还是可以解的。实际上是关于符号计算的研究的话,对特殊的方程组还可以有更好的方法。那么同样也可以用W变量,这都是可用的。还可以讨论其他的一些问题。我们后来在台式电脑上做的,我们选的就是小d。然后我们的实验结果是这样的,比如说第一行,我们想d1取0、1、2,a2是他给定的。二次方程我们可以得到8个,得到三个线性方程,总共的变量只有12个。我们可以去解,这个就是用现有的符号计算形式。这就可以完全把它破解。

刚刚还有一个秘密值S的确定也可以用维数来计算。我们可以定义一个维数,这个维数叫ES'这是一个张量空间,这有多少这样的γ、有多少这样的维。如果S'是正确的话,这个值是2。如果错误的话是4。在剩余的两种情况下算出是2就可以对应正确的S值来,所以这么判断就可以了。

我总结一下,基于纠错码的密码系统,由于量子计算威胁,现在实际上是一个后选的后量子密码的方案。它的研究是很有意义的。但目前为了约减密钥的规模,很多方案并不是安全的。可以有别的攻击方法,但是也有代数攻击的方法。对一个具体例子我们可以完全、实际地破解它。而且我们的代数攻击复杂度否定了一些设计理念。比如说中间有一个参数B,那么参数B增加的话攻击难度会加大。但我们这里的B增加方程更多了,我们攻击的复杂度实际是降低的。这个领域还是有很多问题可以研究。

【编辑推荐】

  1. RSA公钥密码体制安全的经验心得
  2. RSA2010中国大会的亮点和遗憾之处
  3. 数据安全大讲堂 证密码持久到100年坚不可摧
  4. 用社工对抗社工——RSA身份认证总监Uri Rivner谈钓鱼
责任编辑:佟健 来源: 51CTO.com
相关推荐

2012-02-16 08:27:14

安全漏洞RSA算法

2010-10-29 09:10:58

2010-10-28 15:35:35

2010-11-01 17:59:51

RSA2010报道

2010-10-29 13:50:23

2011-11-05 15:48:31

2011-10-19 14:44:46

2011-08-18 12:22:55

2012-08-31 16:52:27

2011-11-03 17:32:41

安全技术周刊

2011-11-02 10:43:20

RSA2011中国大会信息安全国际论坛

2010-10-29 10:30:13

2011-02-12 09:11:24

RSARSA大会2011 RSA

2014-05-04 14:36:39

存储

2014-06-23 11:22:23

存储

2011-11-02 13:28:52

2009-08-06 15:35:54

敏捷中国大会AgileChina

2012-08-24 13:03:44

2021-02-15 16:45:26

网络安全密码技术数字证书

2010-12-14 18:51:19

Java平台JavaFJavaOne中国大会OOW大会
点赞
收藏

51CTO技术栈公众号