春节期间,我没有迈出家门一步,跟疯了似的,粘在计算机前。编完程序后的详细测试,又耗掉了我仅剩的精力。昨天发表帖子后倒头就睡,对我所做的事没有作必要的介绍,导致一些星友可能不明白这是怎么一回事。今天补上注解。 

这次完成的MAP几个主要函数的仿真,意义很大(就不多说了),但难度也非常大。XG和国际上的不少高手,联手攻关了许久,都不得其门而入,一直无法搞定。这是因为XG有线采用的不是逐步升级反制的方法(Dream TV逐步升级反制,允许黑客如水涨船高般逐步跟随学习提高,一直在“道高一尺,魔高一丈”的圈子中游戏),而是从一开始就精心研制了这个超级反制措施,设置重重难关,以期达到吓阻效果和让企图破解和仿真的黑客精疲力尽、白花时间、知难而退。(这招实在是高,确实达到了其效果。) 

为形成极高的破解门槛,研制的这个超级反制的程序很长,EMM根本无法携带,要通过下行的信号逐步将信息灌入ROM10/ROM11卡的内部EEPROM,在其中形成了数个程序,它们以$CE02为主,又调用了好几个其他程序。这些程序结构很特殊,采用一般反汇编的方法,看不到正确的程序。这还不是难关所在,最难破解和仿真的是该程序联合应用了7个MAP函数调用,它们多数都是未公开的MAP功能。 

要知道这些MAP函数,黑客一般通过对未知的MAP函数输入各种数字后,观察和分析MAP表现出的相应输出结果,反猜测其函数。这样做的难度是很大的。它有点像数学上的回归问题,通过数据反求函数。但回归求得的是函数的逼近解,而编码/解码不允许近似解,要求完全准确!因为只要一个比特的误差,就必定造成解码失败。可以猜到,MAP中这些多是关于RSA的函数,但RSA算法中有许多相似功能的函数,比如与SHA-1相似的就有MD4,MD5,SHA,SHA256,SHA384和SHA512等等,每种函数的初始值变化,其中一些参数或编程实现细节的变化,都导致函数变化。这也都造成猜测MAP函数是一件非常困难的事。 

从2005年6月开始(我所知道的),经过国际上高手们的分析和讨论,到2005年底,才逐步大体搞清楚了这些MAP的功能。之所以说“大体”是因为在没有仿真实现和测试证明前,只能说还是停留在猜测的基础上,只有仿真重现该函数并且在应用上可以与MAP一样解码,才真正确定了这些函数。 

大体知道MAP功能后,接下来的事情就是在其它CPU(最好当然是15卡和黑卡的AVR家族)仿真实现其功能。 
仿真编程的事是不得已而为之的。正卡多数都有特殊的电路和结构,如带有协处理器等,但一般的D卡就是普通的单片计算机电路,不可能配上厂家协议定制的协处理器(有钱没地方买),所以D卡的功能与速度都要比正卡差一些,比如正卡先天就是“无等待的”,而能AU的D卡,从一开始就是“有等待的”,D卡要做到无等待,就要在许多地方下功夫。正卡之所以要采用硬件协处理器来进行编码/解码的运算,除了保密原因之外,一个重要原因就是可以简化CPU编程难度,加快计算的速度。可以类比一下,如果我们的计算机不应用CPU内带的硬件数学协处理器进行浮点运算,而要自己编浮点运算程序,那将会是件多么复杂和吃力不讨好的事! 

根据Flezzo等高手的研究(他是长期研究RSA算法的专家),这些MAP函数中除了几个数据进行搬动之外,其余主要都是编/解码计算,其中以计算A的B次方再模上C,-1除以M再模上2^32和SHA-1为最难,这里A,B,C,M都是8字节的大整数,每个数都有64位,可达2^64这个天文数字(约2后跟19个0),这么大的数字还要进行乘方计算,指令代码和内存开销都很大。应当指出,D卡中与AU有关的EMM的解码使用的也是RSA算法(ECM则使用DES算法即DES Encryption Algorithm),但这些解码EMM的一部分计算用的数据是固定的,通过分解质因子(如,将M分解为P和Q),并引入所谓“伯克利算法”,大大简化了计算。仿真要实现的函数都是D卡中原来没有的,不可能通过调用已有函数来实现,必须完全从头编起,这也是这个超级反制的难关之一。 

注:关于RSA,MD5、SHA-1的一些背景,大家可参看山东大学王小云带领的女子团队做出了令国际安全与密码届震惊的破解成就等。  [Page]

仿真的最后阶段是编程与测试。编汇编语言程序,不像高级语言那样舒服,必须要注意一切细节...,关于编程,可能距离多数星友太远了,也太枯糙无味,我就不多说了。 
以往我国高手改编D卡程序时,一般是引进、吸收和消化国外的程序,再对有关数据作本地化处理,反制时,采取贴补丁的方法进行处理。将来Dream TV如果采用XG有线的做法,用多个MAP组合拳,必将难倒一大批未作好能力准备的高手。因此,我要用我从入队时学说的话勉励自己:“时刻准备着”。