荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hackson (hackson), 信区: Hacker
标  题: 磁盘加密
发信站: BBS 荔园晨风站 (Sat Jul  4 14:45:27 1998), 转信

标  题: 一个磁盘加密的设想(转载)
技术背景及假设:
以下是磁盘加密的简单介绍和一些假设,都是基于本人的认识。高手尽
可掠过不看。如有纰漏或者荒谬之处,敬请指正。

所谓磁盘加密是值利用某种手段在磁盘上设置无法正常复制的信息,特
定程序运行时将校验该信息并确定运行的合法性。比较简单的例子是运
行或者安装某一程序是需要在驱动器里面插入一张“钥匙盘”,没有正
确的钥匙盘该程序将不能运行或者某些功能被限制。这张钥匙盘是肯定
不能通过磁盘拷贝来复制的。

一种当前普遍采用的加密技术是在磁盘上做出一些非正常的磁道或者扇
区,应用程序通过校验这些加密点来确定磁盘的合法性。这种加密方法
的最基本弱点在于:无论什么非正常扇区都是可以由特定程序复制的,
因为最起码制造商本人需要某种手段来批量制造合法盘。而一旦其加密
点的信息被人得知并复制,该方法即被攻破。破解被该种方法加密的磁
盘的方法有:通过某些磁盘分析工具静态分析磁盘上的扇区,找出特殊
点并设法复制;动态跟踪程序读写磁盘的校验工作,分析出加密点的位
置及方法;监视系统磁盘服务中断,截获并用TSR程序摹拟加密信息。

磁盘指纹
所谓磁盘指纹信息是一张磁盘在被格式化的时侯在磁道接缝等处生成的
信息。这些信息据有很强的随机性和不可复制性。就是说就是同一张盘
在同一个驱动器里,不会有两次格式化出来的磁盘具有相同的指纹。当
然这些信息也是无法随意改动的。磁盘指纹一旦生成可以被程序用特定
手段稳定的读出。这样某个应用程序可以将加密盘的指纹信息写入程序
体内并保护起来。在运行时动态检察指纹的合法性。这种方法具有较高
的防复制性。但它的一个缺点是对于通过拷贝升级的如国产某杀毒软件
不易使用,因为与加密点加密不同,磁盘指纹法的每张磁盘将具有不同
的指纹信息,而软件的升级是只通过拷贝升级文件来进行的,一个升级
文件绝对不可能“记住”所有合法加密盘的特征指纹信息。

我的设想:

指纹二次加密法
此设想的思想是将磁盘指纹的不可复制性和密码生成的不可逆性结合
在一起,做出一个不可能(很难)复制的加密磁盘。

这种方法来源于上述的基本磁盘指纹法。其基本原理是:加密生成程序
在读出磁盘指纹信息并不将指纹信息写入被加密程序体中,instead(嘿
嘿,不会用中文了),将磁盘指纹信息用一把密钥通过某种加密方法(比
如说128bit DES,但最好使用一种自己改动过的变种,原因下面会讲)加
密后写入一个正常磁盘文件,我们不妨称它为加密指纹文件。应用程序
运行时会试图用用原来的密钥解开加密指纹文件并与磁盘指纹进行比较
以进行校验。这种方法把磁盘指纹从应用程序体中分离开来,使拷贝升
级并使用磁盘指纹加密成为可能。

以下讨论一下其可能的弱点和加强的方法。
首先该加密方法的核心是从指纹信息生成加密指纹文件的方法。一旦这
种方法被破译,该加密方法便被攻破。在刚才提出的方法中,使用密钥
进行对指纹信息的加密,这样就是知道了方法,比如说DES,不知道密
钥也跟本无法复制指纹文件。如果在实践中采用强加密方法,仅仅知道
明文和密文是不可能破译密钥的,也就无法复制。


但这种方法中仍有一漏洞,即应用程序必需携带密钥去校验,这样一旦
应用程序被破解(总会发生),密钥便被破译,如果采用一种很普遍的加
密方法则该加密方法便被攻破。

加强的方法是:采用一种改进或者变种的加密方法,使即使敌人分析出
了密钥和密文还原方法也无法得知密文生成方法,只要生成方法不被破
译,即使某一版本的应用程序被破解,判断部分被跳过,程序被脱壳,
在下一个版本的软件种仍可以继续使用该加密盘做合法性判断,并改进
在前一个版本中被破解的保护,最关键的一点是制造商的主动权没有丢。

指纹二次加密法-版本II:
在我设想的版本II指纹二次加密法中,将使用一种新的从磁盘指纹到加密
指纹文件的加密方法,它类似于PGP的private keypublic key系统。加密
和解密将使用两种不同的密钥,与PGP不同的是,这里加密将使用private
 key,而解码使用public key。public key可以通过private生成,但无法
反向获取。既一个private key生成的密文可以通过public key来校验,
public key是用private key再加密生成的,知道public key无法得到
private key。
如果采用这样一种加密手段。那么在指纹二次加密方法中,加密生成程
序可以使用private key 加密指纹信息,而应用程序则使用public key
来解开密文并进行校验。这样即使敌人完全破解了应用程序,获得了
public key和解开密文的算法,并且知道生成密文的算法,在不知道
private key的情况下,仍然无法攻破保护。而且另外一个好处是,对于
商业软件,此private key将成为 该软件的核心机密,程序员将只负责
写加密算法implementation,而负责人(多半为老板),可以选择一个
private key并生成最终加密指纹文件生成程序。该程序将随机读取磁盘
指纹信息并使用那个负责人输入的private key生成加密磁盘指纹文件而
产生合法加密磁盘。这样即使加密程序员叛逃他所能带走的最多是生成
程序,而没有privatekey,该程序将一无是处。如果应用程序员叛逃,
最多是一个版本的程序泄漏,而磁盘加密仍然有效,在以后的版本中
仍旧有机会弥补。

不过我真的怀疑实践中是不是真的能有hacker有毅力从脱壳的汇编码中
找出来最原始的用public key校验的算法,要知道这种东西的C源码都
是及其冗长而不易看懂的,再着,即使完全分析出了校验算法,没有
private key根本没有用,呵呵。

这样的加密方法应该是可行的,简单的一个实现是:假定敌人不知道PGP,
可以将磁盘指纹做为private key,然后用PGP生成public key做为指纹
文件。校验的时侯用指纹文件加密一段随机数据在设法用指纹文件还原
。这样即使敌人知道了指纹信息,知道了用public key加密的方法,知
道了用private key还原的方法,但仍无法知道如何从private key生成
public key。这是一种简单的实现,没有负责人的private key。所需要
的是一中类似PGP的系统,能有常规的public 和private key。但生成
public key的方法不公开。可以自己设计一种(这个可以再讨论)。


对于动态跟踪和磁盘仿真
所谓磁盘仿真就是在应用程序读取合法加密盘指纹信息的时侯截获该信息
并存储在一段小TSR程序中,该程序运行时仿真系统磁盘服务中断,在应
用程序读取磁盘指纹的时侯返回存储的合法的磁盘指纹。当然通常的保护
方法如防soft-ice,动态代码生成,乱序执行,等等还都是可以使用的,
至少给破解的道路上加一块小拦路石。采用指纹二次加密法的话,可以不
确定的选择磁盘某处的指纹做为合法指纹信息,并将该处的地址加密存入
加密指纹文件中。这样应用程序运行时可以先读并译出指纹在磁盘上的位置
再进行读取,并且可以读取多处指纹。而在实际读取指纹过程中,除了确定
获得系统控制权和其它一些反跟踪手段之外,可以随机的读取磁盘上的指
纹信息,而只使用其中在加密指纹文件中标明合法的部分。这样除非将整
个磁盘都仿真了,只仿真某一次或者几次运行的信息是无法完全仿真该磁
盘的。因为下一次程序完全可以去读另外的指纹,在上一次没有读过,
但仍旧合法的。
复制指纹
当然什么方法都没有100%可靠的,如果磁盘指纹能被复制的话这种方法自然
就失去意义。但据我所知,当前复制磁盘指纹即使可能也很不容易。只要
无法成批量生产,对于加密磁盘所保护的产品就不会造成多大影响。而且
加密指纹位置的随机性也决定了这种复制必需是全盘的复制,难度上已经
很高了。


--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 202.116.95.53]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店